如标题所示,当客户机请求将文件写入hdfs时,hdfs或name节点如何选择存储该文件的datanode?hdfs是否尝试将此文件的所有块存储在同一个节点中,或者如果文件太大,是否将某个节点存储在同一机架中?hdfs是否为应用程序提供了api,以便按照自己的喜好将文件存储在特定的datanode中?
bn31dyow1#
现在使用hadoop-385补丁,我们可以选择块放置策略,以便将文件的所有块放置在同一个节点中(对于复制节点也是如此)。阅读关于这个主题的博客-查看评论部分。
lymgl2op2#
hdfs或name节点如何选择存储文件的datanode?hdfs有一个blockplacementpolicydefault,有关更多详细信息,请查看api文档。应该可以为自定义行为扩展blockplacementpolicy。hdfs是否为应用程序提供了api,以便按照自己的喜好将文件存储在特定的datanode中?放置行为不应特定于特定的datanode。这就是hdfs能够抵御失败和可扩展性的原因。
vmjh9lq93#
如果有人喜欢图表,这里有一张图片(图片来源):
nbewdwxp4#
选择datanode的代码在函数中 ReplicationTargetChooser.chooseTarget() .评论说:副本放置策略是,如果writer在datanode上,则将第一个副本放置在本地计算机上,否则将随机放置datanode。第二个复制副本放置在不同机架上的数据节点上。第三个副本放置在与第一个副本位于同一机架上的数据节点上。它没有为应用程序提供任何api来将文件存储在所需的datanode中。
ReplicationTargetChooser.chooseTarget()
1wnzp6jl5#
您可以看到,当namenode指示datanode存储数据时。第一个副本存储在本地机器上,另外两个副本在其他机架上制作,以此类推。如果任何复制副本失败,则从其他复制副本存储数据。每一个复制品失败的几率就像你睡觉时扇子掉在你头上一样:也就是说,失败的几率非常小。
5条答案
按热度按时间bn31dyow1#
现在使用hadoop-385补丁,我们可以选择块放置策略,以便将文件的所有块放置在同一个节点中(对于复制节点也是如此)。阅读关于这个主题的博客-查看评论部分。
lymgl2op2#
hdfs或name节点如何选择存储文件的datanode?
hdfs有一个blockplacementpolicydefault,有关更多详细信息,请查看api文档。应该可以为自定义行为扩展blockplacementpolicy。
hdfs是否为应用程序提供了api,以便按照自己的喜好将文件存储在特定的datanode中?
放置行为不应特定于特定的datanode。这就是hdfs能够抵御失败和可扩展性的原因。
vmjh9lq93#
如果有人喜欢图表,这里有一张图片(图片来源):
nbewdwxp4#
选择datanode的代码在函数中
ReplicationTargetChooser.chooseTarget()
.评论说:
副本放置策略是,如果writer在datanode上,则将第一个副本放置在本地计算机上,否则将随机放置datanode。第二个复制副本放置在不同机架上的数据节点上。第三个副本放置在与第一个副本位于同一机架上的数据节点上。
它没有为应用程序提供任何api来将文件存储在所需的datanode中。
1wnzp6jl5#
您可以看到,当namenode指示datanode存储数据时。第一个副本存储在本地机器上,另外两个副本在其他机架上制作,以此类推。
如果任何复制副本失败,则从其他复制副本存储数据。每一个复制品失败的几率就像你睡觉时扇子掉在你头上一样:也就是说,失败的几率非常小。