1. 对象

HDFS的读写流程参与者有客户端(Client)和集群(NameNode和DataNode)。

2. 写数据流程

写数据流程步骤(创建分布式文件系统):

1)客户端向NameNode请求上传xx文件;

2)NameNode进行校验,响应是否可以上传文件;

3)请求上传第一个Block(0-128M),请返回DataNode;

4)返回DataNode1,DataNode2,DataNode3节点,表示采用三个节点存储数据(首先考虑节点距离最近,再考虑负载均衡);

5)请求建立Block传输通道;

6)DataNode应答成功。

7)传输数据packet。

注:1个packet(516Byte)由chunk(512Byte)和chunksum(4Byte)构成;packet最小为64K,即积累到64K才能传输。

3. 节点距离计算

HDFS写数据的时候,NameNode会选择节点距离最近上传数据到DataNode。

节点距离计算,指两个节点到达最近的共同祖先的距离总和。

 HDFS读写流程_客户端

 4. 机架感知

 3个副本时,HDFS的存储策略:

1)第一个副本在客户端所处的节点上随机选择一个,即本地机架,如果客户端在集群外,则随机选择一个;

2)第二个副本在另一个机架随机一个节点(保证可靠性)

3)第三副本在第二个副本所在机架的随机节点(兼顾效率)。

5. 读数据流程

 HDFS读数据流程(创建分布式文件系统):

1)客户端向NameNode请求下载xx文件;

2)NameNode向客户端返回目标文件元数据;

3)选择节点距离最近的DataNode请求读数据,兼顾考虑负载能力;

4)DataNode向客户端传输数据(串行读取数据)。

6. NN和2NN

数据存储:

1)内存:计算速度快,但可靠性低;

2)磁盘:可靠性高,但计算速度慢。

HDFS(内存)中NameNode采用fsImage存储数据,Edits进行追加过程记录。

2NN的作用:定期将fsImage和Edits数据进行合并(每隔1h执行一次备份)。

区别:NN中记录了最新的edits_inprogress_xxx,2NN则没有,只有历史的edits文件。

HDFS读写流程_数据_02

 7. FsImage和Edits介绍

 

 8. DataNode工作原理

1)DataNode启动后主动向NameNode注册(Block的数据长度、校验和、时间戳);

2)DataNode周期性自查,同时上报信息(每隔6h);

3)心跳每3s一次,结果带有NameNode给DataNode的命令;

4)若超过3s未回复,再等待10分钟+30s,此时没有收到DataNode的心跳,则认为改DataNode不可用。

DataNode掉线时限参数设置:

  Timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

9. HDFS数据的完整性

CRC校验:对原始数据进行校验

 

 

 

 

 

 

 

HDFS读写流程_数据_03