我的问题的主旨是......如何减少作业可能需要的地图扫描次数?作业的映射任务数是data_size / HDFS_BLOCK_SIZE。完成此操作可能需要扫描的次数取决于我们拥有多少个地图槽。假设我没有运行任何其他工作,只发现一项工作,我发现每个节点的CPU利用率很低(这意味着我实际上可以为每个节点运行更多的映射作业)。我使用了mapred.tasktracker.map.tasks.maximum参数(例如,我的每个节点都有32个处理器,我将它设置为高达30) - 但我永远不会增加映射插槽的数量和整体CPU利用率是60%左右。还有其他参数可供使用吗?我拥有的数据大小足够大(32GB,8个节点集群,每个集群有32个cpus),它确实需要两次地图扫描(第一次扫描会映射到1-130,第二次扫描会完成其余的扫描)。
答案 0 :(得分:0)
如果有人还没有告诉你: MapReduce主要是IO绑定,它必须从磁盘读取大量数据,将其写回,读取并再次写入。在读取和写入之间,它执行映射并减少逻辑。
所以我听到提升CPU使用率的目的是让群集不再受IO限制
即便如此,你应该面对< 100%的CPU利用率,但它要好得多,而且性能将会飙升。
但是,CPU利用率对于Hadoop集群来说不是一个好的指标,因为您可以从上面的观点得出结论。 Hadoop主要是关于数据的可靠存储,提供简洁的功能来处理它。没有给你超级计算机性能,如果你需要这个获得MPI集群和PH.D来编码你的算法;)
答案 1 :(得分:0)
很抱歉捶打 - 但我的安装肯定出了问题。我碰巧重新安装了hadoop,它按预期工作。我猜一些参数肯定是冲突的。