Hadoop文件写

时间:2015-12-25 15:44:36

标签: hadoop

参考Tom White的书Hadoop权威指南..... 我的问题(假设复制因子3和数据写入节点D1,D2,D3) 如果我理解正确,如果写入第一个位置D1本身就失败了......启动了新管道的整个过程...... 如果写入第二个节点D2失败怎么办? ..据说“ack队列中的任何数据包都被添加到数据队列的前面,以便故障节点下游的数据节点不会丢失任何数据包”并且好的数据节点上的当前块被赋予一个新的身份.. 我不清楚这一点......

  1. 阻止获取新身份
  2. 谁给出了这个新身份
  3. 为什么需要?

1 个答案:

答案 0 :(得分:1)

两个回答你的问题,我想强调一点。 {strong> read or write Client)已启动HDFS Client次操作。

看一下这个图。

enter image description here

在整个过程中,客户端直接从/向数据节点读取/写入,而不是通过NameNode。 NameNode将只发送要联系的数据节点列表以进行读或写操作。

回到您的查询,

  

" ack队列中的所有数据包都被添加到数据队列的前面,以便故障节点下游的数据节点不会丢失任何数据包"

在此行之后,您可以找到以下行

  

为良好的数据节点上的当前块提供一个新的标识,该标识将传递给namenode,以便在以后发生故障的datanode恢复时,将删除失败的datanode上的部分块。从管道中删除失败的datanode,并构造一个新的管道   这两个好的数据节点。

以上几点将回答您的第一个问题:1。 阻止获取新身份

  1. 谁给出了这个新身份: 即使它不明确,我们也可以得出结论HDFSClient负责提供新身份身份并通知NameNode新身份。

  2. 为什么需要?

  3. 由于只有部分数据写在有问题的数据节点上,我们必须完全删除这个数据块。同样的内容在本书的下一行中有所解释。

      

    为良好的数据节点上的当前块提供了一个新的标识,该标识被传送到namenode,以便如果失败的datanode稍后恢复,将删除失败的datanode上的部分块。