【Hadoop】(一)分布式文件系统 HDFS_namenode -format format the dfs filesystem(2)

二、Hadoop的核心

  1. HDFS: Hadoop Distributed File System 分布式存储系统
    提供了高可靠性、高扩展性和高吞吐率的数据存储服务的分布式存储系统
  2. YARN: Yet Another Resource Negotiator 资源管理调度系统
    负责集群资源的管理和调度
  3. Mapreduce:分布式运算框架(计算向数据移动)
    具有易于编程、高容错性和高扩展性等优点。

三、Hadoop的特点

  • 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
  • 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。
  • 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
  • 可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务。

四、HDFS的架构

在这里插入图片描述

  1. 文件元数据 MetaData
    文件数据 . 元数据 :数据本身
  2. HDFS具有主从架构
    (主)NameNode 节点保存文件元数据:单节点 posix
    (从)DataNode 节点保存文件Block数据:多节点
  3. 结构模型关系介绍
    DataNode与NameNode保持心跳,提交Block列表
    HdfsClient与NameNode交互元数据信息
    HdfsClient与DataNode交互文件Block数据

其中:

namenode负责:

  • 接收用户操作请求
  • 维护文件系统的目录结构
  • 管理文件与block之间关系,block与datanode之间关系
  • 持久化(fsimage,eidts log)不会持久化block的位置信息(不保存到镜像,关闭后即消失)
  • block:偏移量,因为block不可以调整大小,hdfs不支持修改文件 , 偏移量不会改变

datanode负责:

  • 存储文件
  • 文件被分成block块存储在磁盘上
  • 为保证数据安全,文件会有多个副本

Secondary NameNode负责:

  • 合并fsimage和edits文件来更新NameNode的metedata
存储模型

以后我们看到块要立即反应到偏移量、位置信息
在这里插入图片描述

NameNode(NN)

基于内存存储 :不会和磁盘发生交换

1.简介
  • namenode 是整个文件系统的管理节点。他维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

文件包括:

  • fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
  • edits:操作日志文件。
  • fstime:保存最近一次checkpoint的时间。
2.NameNode的工作特点
  • NameNode始终在内存中保存metedata,用于处理“读请求”,到有“写请求”到来时,NameNode首先会写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回。
  • Hadoop会维护一个人fsimage文件,也就是NameNode中metedata的镜像,但是fsimage不会随时与NameNode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。Secondary NameNode就是用来合并fsimage和edits文件来更新NameNode的metedata的。
3.NameNode主要功能
  • 接受客户端的读写服务
  • 收集DataNode汇报的Block列表信息
4.NameNode保存metadata信息包括
  • 文件owership和permissions文件大小
  • 时间(Block列表:Block偏移量),位置信息,Block每副本位置(由DataNode上报)
5.NameNode持久化
  • NameNode的metadate信息在启动后会加载到内存
  • metadata存储到磁盘文件名为” fsimage ”
  • Block的位置信息不会保存到fsimage
  • edits记录对metadata的操作日志
6.DataNode(DN)

本地磁盘目录存储数据(Block),文件形式 . 同时存储Block的元数据信息文件
启动DN时会向NN汇报block信息, 通过向NN发送心跳保持与其联系(3秒一次),
如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN

SecondaryNameNode(SNN)

它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。

1.SNN执行合并时机

根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。

2.SNN执行流程图
  • fsimage文件 : 其实是Hadoop文件系统元数据的一个永久性的检查点
    其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;
  • edits文件 : 存放的是Hadoop文件系统的所有更新操作的路径
    文件系统客户端执行的写操作首先会被记录到edits文件中。
    在这里插入图片描述
3.过程介绍
  1. 在 PNN(Primary NameNode) 合并之前,会将 edits 和 fsimage 文件发送给 SNN,然后 PNN 创建一个新的 edits.new 文件继续记录 PNN 的操作。
  2. PNN 将之前的 edits 和 fsimage 发送给 SNN 后,SNN 会将 fsimage 加载到内存,edits 也加载到内存
    根据 edits 中操作记录执行相应的指令,当 edits 的所有操作记录对应的指令执行完毕,会生成一个新的 fsimage.ckpt 快照。
  3. 将新生成的 fsimage.ckpt 再发送给 PNN ,这时 PNN 就拥有 edits.new 创建之前的快照记录
    若 PNN 发生了宕机,可以根据 fsimage 和 edits.new 恢复到宕机前的状态
Block的副本放置策略

Rack :服务器机架

在这里插入图片描述
这样选择很好地平衡了可靠性、读写性能

  • 可靠性:Block分布在两个机架上
  • 写带宽:写入管道的过程只需要跨越一个交换机
  • 读带宽:可以从两个机架中任选一个读取

五、HDFS的读写流程(重点)

HDFS写流程

在这里插入图片描述

  1. 客户端通过调用 DistributedFileSystem 的create方法,创建一个新的文件
  2. DistributedFileSystem 通过 RPC(远程过程调用)调用 NameNode,去创建一个没有blocks关联的新文件。创建前,NameNode 会做各种校验,比如文件是否存在,客户端有无权限去创建等。如果校验通过,NameNode 就会记录下新文件,否则就会抛出IO异常。
  3. 前两步结束后会返回 FSDataOutputStream 的对象,和读文件的时候相似,FSDataOutputStream 被封装成 DFSOutputStream,DFSOutputStream 负责处理namenode和datanode之间的通信。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet(64k),然后排成队列 data queue。 使用管道 与 切割成packet的理由:并行存储,增加效率。
  4. DataStreamer 会去处理接受 data queue,它先问询 NameNode 这个新的 block 最适合存储的在哪几个DataNode里,比如重复数是3,那么就找到3个最适合的 DataNode,把它们排成一个 pipeline。DataStreamer 把 packet 按队列输出到管道的第一个 DataNode 中,第一个 DataNode又把 packet 输出到第二个 DataNode 中,以此类推。
  5. DFSOutputStream 还有一个队列叫 ack queue,也是由 packet 组成,等待DataNode的收到响应,当pipeline中的所有DataNode都表示已经收到的时候,这时akc queue才会把对应的packet包移除掉。
  6. 客户端完成写数据后,调用close方法关闭写入流
  7. DataStreamer 把剩余的包都刷到 pipeline 里,然后等待 ack 信息,收到最后一个 ack 后,通知 DataNode 把文件标示为已完成

注意:如果数据节点(datanode)在写入的过程中失败,关闭管线(pipeline),确认队列中的任何包都会被添加回数据队列的前面,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从管线(pipeline)中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

总结:这一方法不仅提供了很好的稳定性(数据块存储在两个机架中)并实现很好的负载均衡,包括写入带宽(写入操作只需要遍历一个交换机)、读取性能(可以从两个机架中选择读取)和集群中块的均匀分布(客户端只在本地机架上写入一个块)。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

14433486106)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值