Hadoop学习之HDFS读写流程

来源:互联网 发布:手机淘宝店店招 编辑:程序博客网 时间:2024/05/21 10:00

向HDFS写数据流程:


1)client向NameNode发起写数据请求;

2)NameNode检查文件是否存在,client是否有写入权限,成功会为向client返回一个通过的信息,失败会让client抛出异常;

3)开始写文件,客户端会将文件切分成多个packets,并以数据队列”data queue”的形式管理,然后向NameNode申请blocks信息,获取DataNode列表;

4)以pipeline的形式将packets写入DataNode中;

5)最后一个DataNode写入成功后会返回一个”ack packet”至client,client中会维护着”ack queue”(确认队列),成功收到返回后,会从”ack queue”中删除相应的”ack packet”;

6)如果传输过程中某个DataNode出现故障,pipeline会将该DataNode移除,剩下的DataNode会继续以pipeline形式传输,NameNode会分配一个新的DataNode保证副本数;

7)所有数据块都传完后,client会给NameNode返回一个状态信息,表示写入成功或失败;

8)NameNode根据成功的状态信息更新元数据。



从HDFS读取数据流程:


1)client向NameNode发起读数据请求;

2)NameNode进行权限验证,检查文件存不存在,如果存在向client返回block列表,带有block所有副本的DataNode地址信息;

3)client从列表中选取最近的一台DataNode发送下载请求;

4)一个block读取完毕后以同样的方式读取下一个block,直到所有的block都读取完毕;

5)读的过程中会先将数据写入内存的一个环形缓冲池中,默认大小100M,达到阈值后(默认缓冲池大小的80%)会将数据溢出到磁盘。环形缓冲池的作用:使输入输出并行工作,提高效率。

原创粉丝点击