如何将数据写入hdfs?

rkttyhzu  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(444)

我试图通过阅读hadoop-2.4.1文档来理解hdfs中如何管理数据写入。
根据以下模式:

每当客户机向hdfs写入内容时,他都不会与namenode联系,而是负责分块和复制。我假设在本例中,客户机是一台运行hdfs shell(或等效程序)的机器。
然而,我不明白这是怎么处理的。事实上,根据同样的文件:
datanode还根据namenode发出的指令执行块创建、删除和复制。
上述模式是否正确?如果是的话,
namenode是否仅在收到blockreport时才通知新文件(我想这可能需要时间)?
为什么客户端要写入多个节点?
如果此模式不正确,文件创建如何与hdfs一起工作?

rm5edbpk

rm5edbpk1#

正如您所说,datanodes负责服务读/写请求和块创建/删除/复制。
然后,它们定期向namenode发送“heartbeats”(运行状况报告)和“blockreport”(datanode上的块列表)。
根据这篇文章:
数据节点每隔3秒通过tcp握手向名称节点发送心跳。。。每十次心跳是一个块报告,其中数据节点告诉name节点它拥有的所有块。
所以块报告每30秒做一次,我不认为这会影响hadoop作业,因为一般来说它们是独立的作业。
对于您的问题:
为什么客户端要写入多个节点?
我要说的是,实际上,客户机只向一个datanode写入数据,并告诉他向其他datanode发送数据(请参见下面的链接图片:客户机开始写入数据),但这是透明的。这就是为什么您的模式认为客户机是向多个节点写入数据的人

相关问题