5

I have a "map only" (no reduce phase) program. The size of input file is large enough to create 7 map tasks and I have verified that by looking the output produced (part-000 to part006) . Now, my cluster has 8 nodes each with 8 cores and 8 GB of memory and shared filesystem hosted at head node.

My question is can I choose between running all the 7 map tasks in 1 node only or running the 7 map tasks in 7 different slave nodes (1 task per node). If I can do so, then what change in my code and configuration file is needed.

I tried setting the parameter "mapred.tasktracker.map.tasks.maximum" to 1 and 7 in my code only but I didnot find any appreciable time difference. In my configuration file it is set as 1.

4

3 回答 3

4

"mapred.tasktracker.map.tasks.maximum"处理应该在每个节点上启动的地图任务的数量,而不是每个地图任务要使用的节点数量。在 Hadoop 架构中,每个节点(从属节点)有 1 个任务跟踪器,主节点(主节点)上有 1 个作业跟踪器。所以如果你设置了这个属性mapred.tasktracker.map.tasks.maximum,它只会改变每个节点要执行的地图任务的数量。的范围"mapred.tasktracker.map.tasks.maximum"是从1/2*cores/node2*cores/node

应该使用设置您想要的总体地图任务数setNumMapTasks(int)

于 2012-04-29T16:10:38.263 回答
1

如果可能,您绝对应该在 7 个不同的节点上运行 7 个地图任务。MapReduce 的全部优势在于能够并行化您的计算,以便每个任务尽可能高效地运行。如果您在一个节点上运行 7 个地图任务,则每个任务将在该节点上竞争相同的资源(RAM、CPU、IO)。

标准设置mapred.tasktracker.map.tasks.maximum是每个核心一个,因此您可以将设置更改为 8。

此外,如果您有一个仅 Map 的工作,您将需要一个很好的理由将映射器的数量设置为特定数量。设置地图任务的数量只是对作业跟踪器运行多少地图的“提示”,但这最终由作业跟踪器根据 DFS 存储输入数据的方式来决定。这个维基有更多细节。

但是,在某些情况下,您确实希望控制减少任务的数量。例如,如果我想要一个排序的数字列表,我会想要确保我的所有数据都通过一个 reducer。

于 2012-04-29T19:10:01.927 回答
1

现在,我的集群有 8 个节点,每个节点有 8 个内核和 8 GB 内存以及托管在头节点上的共享文件系统。

当您说共享文件系统托管头节点时,您的意思是数据托管在 HDFS 上,还是安装在每个节点上的某些 NFS 之类的文件系统上?我猜你的意思是 HDFS,但如果你使用 NFS 或类似的东西,那么你应该期望看到 HDFS 更高的吞吐量(你想将处理代码移动到数据,而不是将数据移动到处理机器)

你的输入文件有多大,它的分割大小、文件格式(文本、序列等)、复制因子和压缩方法是多少?

根据上述问题的答案,使用 8x8 设置,如果减少地图拆分大小并提高复制因子,您可能可以获得更好的吞吐量。

于 2012-04-29T18:51:43.227 回答