Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何明确定义数据节点以在HDFS中存储特定的给定文件?_Hadoop_Hdfs - Fatal编程技术网

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

Hadoop 如何明确定义数据节点以在HDFS中存储特定的给定文件?,hadoop,hdfs,Hadoop,Hdfs,我想编写一个脚本或类似.xml的文件,它显式地定义Hadoop集群中的datanodes来存储特定的文件块。 例如: 假设有4个从节点和1个主节点(hadoop集群中总共有5个节点)。 有两个文件file01(大小=120MB)和file02(大小=160MB)。默认块大小=64MB 现在我想在从节点1和从节点2分别存储两个file01块中的一个和另一个。 类似地,从节点1处的三个文件块02中的一个,从节点3处的第二个,从节点4处的第三个。 所以,我的问题是,我如何才能做到这一点 实际上有一种方

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

现在我想在从节点1和从节点2分别存储两个file01块中的一个和另一个。 类似地,从节点1处的三个文件块02中的一个,从节点3处的第二个,从节点4处的第三个。 所以,我的问题是,我如何才能做到这一点

实际上有一种方法:每次在conf/slaves文件中进行更改以存储文件。 但我不想这么做 那么,还有另一种解决方案吗?? 我希望我把我的观点讲清楚。
等待您的善意回应

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

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


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

namenode是决定块放置的最终权威。 Jira提出了使该算法可插拔的要求:
但不幸的是,它是在0.21版本,这不是生产(虽然工作还不错)

如果您处于研究状态,我建议您将算法插入0.21,然后等待0.23成为生产,或者,如果您现在确实需要,请将代码降级为0.20。

我想在特定的datanode上存储一个文件块。它可能在另一个datanode上也有复制文件块,以实现数据冗余。但它应该在特定的datanode上存储一个文件块。我希望我已经阐明了我的观点。您无法以这种方式控制块的放置。请删除一些你为什么需要语言it@DavidGruzman我想确定一个特定的数据节点一定会在特定的位置存储一些文件块。我的意思是,这可以帮助我使用hadoop和其他集群管理框架在集群内实现负载平衡。很高兴了解即将推出的可插拔接口-感谢分享