我试图通过阅读hadoop-2.4.1 documentation来了解如何在HDFS中管理数据写作。
根据以下架构:
每当客户端向HDFS写入内容时,他都没有与namenode联系并负责分块和复制。我假设在这种情况下,客户端是运行HDFS shell(或等效的)的计算机。
但是,我不明白这是如何管理的。 的确,根据相同的文件:
DataNode还根据NameNode的指令执行块创建,删除和复制。
上面提供的架构是否正确?如果是的话,
为什么客户端会写入多个节点?
如果此架构不正确,文件创建如何与HDF配合使用?
答案 0 :(得分:2)
正如您所说,DataNode负责提供读/写请求和块创建/删除/复制。
然后他们定期发送“HeartBeats” (健康状况报告)和“BlockReport” (DataNode上的块列表)到NameNode。
根据this article:
数据节点通过TCP每隔 3秒向名称节点发送心跳 握手,...... 每十次心跳都是阻止报告, 数据节点告诉名称节点它所拥有的所有块。
所以阻止报告每30秒完成一次,我不认为这可能会影响Hadoop的工作,因为一般来说它们都是独立的工作。
对于你的问题:
为什么客户端会写入多个节点?
我会说实际上,客户端仅写入一个数据节点并告诉他将数据发送到其他数据节点(请参阅此link图片:客户端开始写入数据),但这是透明的。这就是您的架构认为客户端是写入多个节点的人
的原因