hdfs如何选择要存储的数据节点

8wtpewkr  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(357)

如标题所示,当客户机请求将文件写入hdfs时,hdfs或name节点如何选择存储该文件的datanode?hdfs是否尝试将此文件的所有块存储在同一个节点中,或者如果文件太大,是否将某个节点存储在同一机架中?hdfs是否为应用程序提供了api,以便按照自己的喜好将文件存储在特定的datanode中?

bn31dyow

bn31dyow1#

现在使用hadoop-385补丁,我们可以选择块放置策略,以便将文件的所有块放置在同一个节点中(对于复制节点也是如此)。阅读关于这个主题的博客-查看评论部分。

lymgl2op

lymgl2op2#

hdfs或name节点如何选择存储文件的datanode?
hdfs有一个blockplacementpolicydefault,有关更多详细信息,请查看api文档。应该可以为自定义行为扩展blockplacementpolicy。
hdfs是否为应用程序提供了api,以便按照自己的喜好将文件存储在特定的datanode中?
放置行为不应特定于特定的datanode。这就是hdfs能够抵御失败和可扩展性的原因。

vmjh9lq9

vmjh9lq93#

如果有人喜欢图表,这里有一张图片(图片来源):

nbewdwxp

nbewdwxp4#

选择datanode的代码在函数中 ReplicationTargetChooser.chooseTarget() .
评论说:
副本放置策略是,如果writer在datanode上,则将第一个副本放置在本地计算机上,否则将随机放置datanode。第二个复制副本放置在不同机架上的数据节点上。第三个副本放置在与第一个副本位于同一机架上的数据节点上。
它没有为应用程序提供任何api来将文件存储在所需的datanode中。

1wnzp6jl

1wnzp6jl5#


您可以看到,当namenode指示datanode存储数据时。第一个副本存储在本地机器上,另外两个副本在其他机架上制作,以此类推。
如果任何复制副本失败,则从其他复制副本存储数据。每一个复制品失败的几率就像你睡觉时扇子掉在你头上一样:也就是说,失败的几率非常小。

相关问题