我有一个hadoop集群,它有8台机器,所有8台机器都是数据节点。有一个程序在一台机器上运行(比如说机器a),它将在hdfs中连续创建序列文件(每个文件大约1gb)。问题是:所有的8台机器都是相同的硬件,具有相同的容量。当其他机器的磁盘上还有大约50%的空闲空间用于hdfs时,机器a只剩下5%。我检查了块信息,发现几乎每个块在机器a上都有一个副本。有没有办法平衡副本?谢谢。
voj3qocg1#
有办法。您可以使用hadoop命令行平衡器工具。hdfs数据可能并不总是统一地放置在datanode上。要在群集中的datanode上均匀地分布hdfs数据,可以使用此方法。
hadoop balancer [-threshold <threshold>]
其中,阈值是磁盘容量的百分比有关详细信息,请参见以下链接:http://hadoop.apache.org/docs/r1.0.4/commands_manual.htmlhttp://hadoop.apache.org/docs/r1.0.4/hdfs_user_guide.html#rebalancer
yftpprvb2#
这是默认的放置策略。它适用于典型的m/r模式,其中每个hdfs节点也是一个计算节点,并且写入机是均匀分布的。如果您不喜欢它,那么hdfs-385设计了一个可插拔的接口来在hdfs中放置块的副本。您需要编写一个实现 BlockPlacementPolicy 接口,然后将该类设置为 dfs.block.replicator.classname 在 hdfs-site.xml .
BlockPlacementPolicy
dfs.block.replicator.classname
hdfs-site.xml
2条答案
按热度按时间voj3qocg1#
有办法。您可以使用hadoop命令行平衡器工具。hdfs数据可能并不总是统一地放置在datanode上。要在群集中的datanode上均匀地分布hdfs数据,可以使用此方法。
其中,阈值是磁盘容量的百分比
有关详细信息,请参见以下链接:
http://hadoop.apache.org/docs/r1.0.4/commands_manual.html
http://hadoop.apache.org/docs/r1.0.4/hdfs_user_guide.html#rebalancer
yftpprvb2#
这是默认的放置策略。它适用于典型的m/r模式,其中每个hdfs节点也是一个计算节点,并且写入机是均匀分布的。
如果您不喜欢它,那么hdfs-385设计了一个可插拔的接口来在hdfs中放置块的副本。您需要编写一个实现
BlockPlacementPolicy
接口,然后将该类设置为dfs.block.replicator.classname
在hdfs-site.xml
.