当复制大规模数据到HDFS时,要考虑的一个重要因素是文件系统的平衡。当系统中的文件块能够很好地均衡分布到集群的各个节点时,HDFS才能够更好地工作,所以要保证distcp操作不会打破这个平衡。回到前面复制1000GB数据的例子,参见HDFS的distcp博文。当设定-m为1,就意味着1个Map操作可以完成1000GB的操作。这样不仅会让复制操作非常慢,而且不能充分利用集群的性能。最重要的是,复制文件的第一个块都要存储在执行Map任务的那个节点上,直到这个节点的磁盘被写满,显然这个节点是不平衡的。通常我们通过设置更多的、超过集群节点的Map任务数来避免不平衡情况的发生,所以最好的选择是刚开始并且还是使用的默认属性值,每个节点分配20个Map任务。!!!
当然,我们不能保证集群总能够保持平衡,有时可能会限制Map的数量以便节点可以被其他任务使用,这样HDFS还提供了一个工具balancer。来改变集群中的文件块存储的平衡。
本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5140861.html,如需转载请自行联系原作者