之前说了HDFS的组件,尤其是 NN, DN, 2NN的工作机制,这回整理下HDFS的block块与副本机制,读写过程
1. HDFS的block块
HDFS中存储的文件都以block的形式放在DN中,Hadoop 2.X中采用每个block的默认大小128M, 可以调整,主要看网络IO,磁盘IO的能力,设置太小,寻址时间过长,设置太大MR处理时间过长
以block存储文件的好处:
- 可存储比磁盘空间大的文件
- 块的形式可以简化存储子系统
- 块的形式非常适合数据备份从而提供系统容错性
2.副本机制
就是每个块有几个,默认的副本因子为3
3. HDFS的数据读写过程
3.1 写入
- client通过建立RPC通信询问NN能否写入文件,NN检查文件是否存在,父目录在哪里,是否可以写入文件
- Client 请求第一个block应写到哪些DN上,NN根据文件备份数量和机架感知机制返回可以写入的DN的地址
- Client通过RPC调用与第一个DataNode A 建立连接,A收到请求后会调用B, 再调用C,4者建立连接,形成一个pipeline
- client以packet的形式将数据发送给A,A得到数据后将数据发送给B, B再发给C, B和C收到packet后返回一个ack信号