【问题标题】:How to explicilty define datanodes to store a particular given file in HDFS?如何明确定义数据节点以将特定给定文件存储在 HDFS 中?
【发布时间】:2012-05-31 16:33:36
【问题描述】:

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

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

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

【问题讨论】:

  • 请少说几句为什么需要它
  • @DavidGruzman 我想确定一个特定的数据节点肯定会在某个特定的地方存储一些文件块。我的意思是这可以帮助我使用 hadoop 和其他一些集群管理框架在集群内进行负载平衡..

标签: hadoop hdfs


【解决方案1】:

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

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

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

【讨论】:

  • 我想在特定的数据节点上存储一个文件块。它也可能在另一个数据节点上复制文件块以实现数据冗余。但它应该在特定的数据节点上存储一个文件块。我希望我说明了我的观点。
  • 你不能用这种方式控制块的放置
【解决方案2】:

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

【讨论】:

  • 很高兴了解即将推出的可插拔接口 - 感谢分享
猜你喜欢
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多