大数据生态之 ——HDFS

大数据生态之-----HDFS

HDFS工作机制

客户端上传文件时,一方面由datanode存储文件内容,另一方面有namenode负责管理block信息(切块大小,副本数量,位于datanode上的位置信息)

一丶namenode的工作职责:

  1. 记录元数据

a) 文件的路径

b) 文件的副本数量

c) 文件切块大小

d) block块信息

e) block块的位置信息

2. 响应客户端请求

3. 平衡datanodeblock文件块的存储负载

datanode启动后会向namenode汇报自身所持有的block文件块的相关信息,客户端上传文件时,namenode会优先分配剩余空间较多的datanode供客户端使用。当有新的datanode节点加入集群时,namenode也会通知旧的datanode节点转移自身一部分block块到新的datanode

二丶namenode元数据管理机制

扫描二维码关注公众号,回复: 4531693 查看本文章

 

  1. namenode上完整的元数据存储在内存中
  2. 内存中的元数据也会序列化到磁盘上生成fsimage文件,整个生命周期中只序列化一次
  3. namenode会对引起元数据变化的客户端操作进行日志记录
  4. secondarynamenode定期从namenode上下载编号较新的日志,将fsimage反序列化以后和解析的日志进行合并,合并完成后生成一个新的fsimage并上传到namenode上覆盖掉原来的fsimage文件
  5. 这样就保证了namenode上的fsimage文件一直处于一个较新的状态,而且namenode上的日志文件数量也处于一个可控范围之内。

三丶datanode的工作职责

1. 接收客户端上传的block

2. 帮助客户端获取指定的block

3. 定期向namenode汇报自身所持有的block信息

四丶文件读写流程

4.1写文件流程

 

  1. 客户端向namenode发送文件上传请求(携带文件名和路径信息)
  2. namenode接收到客户端请求以后会从查询元数据中进行查询
  3. 如果文件不存在namenode会向客户端返回允许上传响应
  4. 客户端接收到namenode允许上传响应后会发送上传的block块信息,比如需要上传一个block,存储3个副本
  5. namenode接收到请求以后会从集群中随机挑选三台可用的datanode并其地址将blockid一起发送给client
  6. 客户端接收到namenode响应后会选取最近的那台datanode发送block块上传请求和存储该block块的三台datanode的地址信息
  7. 第一台datanode接收到请求以后会向第二台datanode发送建立block传输pipeline请求,第二台datanode会向第三台datanode发送建立block传输pipeline请求
  8. 第三台datanode准备完毕后会向第二台datanode发送准备就绪响应,第二台datanode准备完毕后会向第一台datanode发送准备就绪响应,此时三台datanode都以做好准备等待接收block块,第一台datanode会向客户端发送允许上传响应
  9. 客户端接收到datanode发送的允许上传响应后会利用FileInputStream读取文件并利用SocketOuputStream将文件发送给第一台datanode,该datanode使用SocketInputStream接收数据的同时会通过block pipeline将数据发送到下一台datanode上,三台datanode几乎会同时完成block的接收工作。
  10. 后续block块的发送重复4-9步骤

4.2读文件流程

 

  1. Clientname发送文件下载请求(含文件名和HDFS上存储的路径信息)
  2. namenode从元数据中进行查找并将block所在的datanode地址响应给Client
  3. 客户端接收到block块位置信息后,会选择距离最近的datanode发送block读取请求,
  4. datanode接收到client发送的block读取请求以后会将数据发送给client

client接收到datanode发送的数据以后会存储到本地磁盘并继续请求下一个block块并根据偏移量与第一块接收到的block块文件进行合并,最终获取完整文件。

猜你喜欢

转载自www.cnblogs.com/lsbigdata/p/10127478.html
今日推荐