如何将数据写入HDFS?

时间:2014-07-02 09:12:04

标签: hadoop hdfs

我试图通过阅读hadoop-2.4.1 documentation来了解如何在HDFS中管理数据写作。

根据以下架构:

HDFS architecture

每当客户端向HDFS写入内容时,他都没有与namenode联系并负责分块和复制。我假设在这种情况下,客户端是运行HDFS shell(或等效的)的计算机。

但是,我不明白这是如何管理的。 的确,根据相同的文件:

  

DataNode还根据NameNode的指令执行块创建,删除和复制。

上面提供的架构是否正确?如果是的话,

  • 是仅在收到Blockreport时才通知新文件的namenode(我想这可能需要时间)?
  • 为什么客户端会写入多个节点?

    如果此架构不正确,文件创建如何与HDF配合使用?

1 个答案:

答案 0 :(得分:2)

正如您所说,DataNode负责提供读/写请求和块创建/删除/复制。

然后他们定期发送“HeartBeats” (健康状况报告)“BlockReport” (DataNode上的块列表)到NameNode。

根据this article

  

数据节点通过TCP每隔 3秒向名称节点发送心跳   握手,...... 每十次心跳都是阻止报告,   数据节点告诉名称节点它所拥有的所有块。

所以阻止报告每30秒完成一次,我不认为这可能会影响Hadoop的工作,因为一般来说它们都是独立的工作。

对于你的问题:

  

为什么客户端会写入多个节点?

我会说实际上,客户端仅写入一个数据节点并告诉他将数据发送到其他数据节点请参阅此link图片:客户端开始写入数据),但这是透明的。这就是您的架构认为客户端是写入多个节点的人

的原因