有一个 HDFS/Hadoop 集群设置并且正在研究调整。
我想知道,将默认的 HDFS 复制因子(默认值:3)更改为更大的值是否会提高映射器性能,但显然会增加使用的磁盘存储?
我的理由是,如果数据已经复制到更多节点,那么映射器作业可以在更多节点上并行运行而无需任何数据流/复制?
有人有什么意见吗?
答案1
从概念上讲,您的结论是正确的:由于块在更多地方可用,因此调度程序可以更自由地分配节点本地任务(在与输入块相同的机器上),并且流式传输的数据更少。
但是,在采取这一步骤之前,您确定块流式传输是导致速度变慢的原因吗?除非一小部分 HDFS 节点托管您的工作负载所需的块,否则增加复制因子对您并没有真正的帮助。换句话说,如果您已经拥有一个在相关块分布方面均衡的集群,那么将这些块放置在其他节点上不会大大加快执行速度,因为流式传输不是您的瓶颈。
一个快速检查是针对给定作业在 JobTracker Web 界面上查看节点本地与机架本地的统计信息。
如果流式传输确实是导致速度变慢的原因,那么瓶颈是磁盘 I/O 还是网络 I/O?增加复制的一些替代方法可能是先提高 (4) 然后降低 (3) 块复制,这应该会使整个集群的分布更加均匀。或者,卸载并重新加载文件。
请详细说明为什么您认为这是一个瓶颈,并且可能还有其他合适的解决方案。