HDFS文件写入

来源:互联网 发布:网络表妹啥意思 编辑:程序博客网 时间:2024/05/17 08:50

1、客户端通过DistributedFileSystem对象调用create函数来新建文件

2、DistributeFilesystem对namenode创建一个RPC调用,在文件系统的命名空间中新建一个文件, 此时文件还没有相应的数据块,但是客户端已经能读取命名空间了,只是长度为null

3、namenode执行一些连的检查却熬这个文件不存在 ,客户端有新建文件的权限

4、DFSoutputStream将数据分成一个个数据包,写入内部队列,称为数据队列 (data queue)

    DataStreamer处理数据队列,他的责任是根据datanoade列表来要求nameode分配合适的新快来存储数据副本  

5、datanode构成一个数据管线,  DataStreamer将数据包流式传递给第一个datanode, 这个datanode 发送给第二个datanode,然后这个datanode发送给第三个datanode

6、DFSoutputstream 也维护这一个内部数据包队列来等待datanode的收到确认回执, 称为确认队列, 收到管道中所有datanode确认信息后,数据包才能从确认队列中删除。

===========================================================================================

如果在数据写入期间datanode发生故障, 

首先关闭管线, 确认吧队列中的所有数据包多添加回数据队列的最顶端,确保故障下游的datanode不会漏掉任何一个数据包,

为存储在另外一个正常datanode的当前数据块制定一个新的标示。并将该标示传送给namenode,以便故障datanode在恢复后可以删除存储的部分数据块。

从管线中删除故障数据节点并且把余下的数据库写入管线中另外两个正常的datanode,namenode注意到副本数量不足时,会在另外一个节点上创建一个新的副本,后续的数据块继续正常接受处理。


只要写入了dfs.replication.min的副本数目(默认是1),写入操作就会成功,并这个块可以在集群中异步复制,直到 dfs.replication默认为3


hadoop的默认布局是在运行客户端的节点上放第一个副本, 第二个副本放在与第一个不同切随机另外选择的机架上,第三个副本跟第二个副本放在同一个机架上。

0 0
原创粉丝点击