2

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

现在我想在从节点 1 存储两个 file01 块之一,在从节点 2 存储另一个。类似地,从节点 1 的三个文件 02 块之一,从节点 3 的第二个文件块和从节点 4 的第三个文件块之一。所以,我的问题是我该怎么做?

实际上有一种方法:每次更改 conf/slaves 文件以存储文件。但我不想这样做所以,还有另一种解决方案吗?我希望我的观点很清楚。等待您的友好回应..!!!

4

2 回答 2

4

没有方法可以实现您在此处提出的要求 - 名称节点将根据机架配置、复制因子和节点可用性将块复制到数据节点,因此即使您确实设法在两个特定数据节点上获得了一个块,如果一个如果这些节点发生故障,名称节点会将块复制到另一个节点。

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

如果您想保持集群均匀分布,请让名称节点管理块分配并定期使用平衡器

于 2012-05-30T10:32:04.693 回答
1

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

于 2012-05-31T06:48:22.807 回答