如何显式定义数据节点以在HDFS中存储特定的给定文件?

时间:2012-05-30 06:11:53

标签: hadoop hdfs

我想编写一个脚本或类似.xml文件的内容,该文件明确定义Hadoop集群中的数据节点以存储特定的文件块。 例如: 假设有4个从节点和1个主节点(hadoop集群中共有5个节点)。 有两个文件file01(大小= 120 MB)和file02(大小= 160 MB)。默认块大小= 64MB

现在我想在slave1上存储两个file01块中的一个,在slave2上存储另一个块。 类似地,从节点1处的file02的三个块之一,从节点3处的第二个块和从节点4处的第三个块。 所以,我的问题是我该怎么做?

实际上有一种方法:每次在conf / slaves文件中进行更改以存储文件。 但我不想这样做 那么,有另一个解决方案吗? 我希望我明白我的观点。 等待你的回应...... !!!

2 个答案:

答案 0 :(得分:4)

没有办法在这里实现您的要求 - 名称节点将根据机架配置,复制因素和节点可用性将块复制到数据节点,因此即使您设法在两个特定数据节点上获取块,如果其中一个节点发生故障,名称节点会将该块复制到另一个节点。

您的要求也假设复制因子为1,这不会给您任何数据冗余(如果丢失数据节点,那将是一件坏事)。

如果要保持群集均匀分布,请让namenode管理块分配并定期使用平衡器

答案 1 :(得分:1)

NameNode是决定块放置的最终权限。 关于使这个算法可插入的要求有Jira: https://issues.apache.org/jira/browse/HDFS-385
但不幸的是,这是在0.21版本,这不是生产(虽然工作不坏)。
如果您处于研究状态,我建议将算法插入到0.21然后等待0.23进入生产,或者如果您现在需要将代码降级到0.20。