2.6 HDFS读写流程
通过漫画理解hdfs读写流程:
写数据流程:
每个元素的职责:
client:客户端发起读写请求
NameNode:只有一个,我维护整个环境
DataNode:负责存储数据,可以有上千个
写数据流程(part1):
需求:想要发送200MB数据
客户端处理数据2要素:
1,客户端需要把文件拆成128M的数据块
2,每一个block存储在多个位置
1,bolck操作是按照顺序的
2,按照副本数量和副本位置将数据块存储到DataNode上
3,第一个数据负责上传,对饮的DataNode会自动复制到其他DataNode上
副本通道:副本之间互相拷贝数据
每个DataNode拷贝完成后会上传到NameNode
第一个数据块写完后,后续数据块和上述内容一致
写完所有数据块后,关闭写入数据
客户端:负责拆分数据
NameNode:对于每一个bock分配地址
DataNode:通过副本通道保存数据
读数据:
向NameNode请求数据的存储的数据块个数及其存储位置信息,获取后向对应的NameNode拿数据
常见错误及其解决方案:
节点问题:DataNode通过心跳机制向NameNode发送数据
网络错误:block report,通过Checksum来检查数据完整性
写错误:DataNode向Client返回ACK
读错误:读数据没有响应自动跳到其他的副本节点
NameNode:维护和更新两张表
1,List of Blocks
2,List of Datanodes
DataNode错误:
1,当block出现问题,更新表1
2,当DataNode出现问题,更新表1,2
NameNode通过表一查询,对于没有完全完成副本拷贝的block标记为“under replicated”的block
三副本放置策略:
第一个副本是随机放置
第二三个副本放置在别的机架的不同节点上
支持自定义放置策略