整体流程图

左 HDFS客户端

hadoop流量控制 hadoop流程图_hadoop流量控制


右 NameNode

hadoop流量控制 hadoop流程图_hadoop流量控制_02


hadoop流量控制 hadoop流程图_hadoop流量控制_03

HDFS契约

hadoop流量控制 hadoop流程图_大数据_04

HDFS写流程

1 创建INodeFile流程(数据封装成内存目录树)
2 添加文件契约流程
	调用namenode rpc代理
	底层是红黑树,实现按照契约时间排序
3 DataStreamer启动流程(重要!写数据关键服务)
	等待DataQueue有数据后执行
	备注:
		一个目录包含多个文件,一个文件包含多个block(默认128mb),
		一个block包含多个package(64k),一个package包含127个chunk
4 启动文件续约流程
	datanode调用namenode rpc代理续约
		数据结构内删除契约,修改上一次心跳时间,新契约加入数据结构
5 契约扫描机制
	NameNode monitor线程周期性每2秒遍历所有契约,数据结构前面提过是排序的,
	直接可拿出最老的契约时间遍历,当最老时间不过期直接break,提高效率
6 chunk封装成packet写入dataQueue
	触发写dataQueue条件:写满127个chunk或写满128mb block
7 Block申请流程
	namenode创建block,文件目录树记录block信息,磁盘记录元信息,BlockManager记录block元数据信息
8 pipeline数据管道流程建立
	为什么需要数据管道传输(副本之间依次传输),而不是client直接同时传输数据到3个副本?
	1 因为一般副本之间在同一机房/物理距离近,内网快/网络性能好
	2 减轻client压力,只需要传输其中一个副本
	备注:数据管道不是串行写,也就是不是第一个副本完全写完后再传递第二个副本。而是同时副本之间传递写
9 管道建立容错处理
	建立不成功则放弃block,记录排除问题节点,重新选取block重试
10 ResponseProcessor组件初始化流程
11 BlockReceiver和PacketResponser初始化
12 写数据层上报处理结果
	管道传输,副本上报返回处理结果
13 写数据容错分析
	dataQueue会将数据放入ackQueue中,做数据容错
	如果datanode收到上报结果已成功,才会删除ackQueue中数据
	如果上报结果有异常,则会把ackQueue数据放入dataQueue重新数据处理,并删除ackQueue

一些问题总结

hadoop流量控制 hadoop流程图_hdfs_05