我的默认配置的hadoop作业 - >本地文件系统上的本地模式未使用我系统中的所有核心(16) - >通过使用我所说的所有核心,我可以在各种实例中看到所有核心中的活动。但是,我的CPU使用率[来自top
]从未超过200%,因此我在conf
中更改了这些配置
mapred.tasktracker.map.tasks.maximum
将此值设置为8,mapred.tasktracker.reduce.tasks.maximum
将此值设置为8。
我的核心使用率仍低于300%。如何通过使用所有核心从机器获得最大吞吐量?
另外,我的文件大小约为1TB。这是来自作业运行的示例日志。我看到它在运行作业时会创建多个(临时)拆分。创建拆分并处理它的这个循环继续(重复)。我的预感是,在每个周期中,它会创建一个临时文件并最终合并它们。有没有办法我们可以增加一些缓冲区大小来处理更大的块(对于我的大型输入文件)?
13/12/01 12:58:10 INFO mapred.MapTask: io.sort.mb = 100
13/12/01 12:58:10 INFO mapred.MapTask: data buffer = 79691776/99614720
13/12/01 12:58:10 INFO mapred.MapTask: record buffer = 262144/327680
13/12/01 12:58:10 INFO mapred.MapTask: Spilling map output: record full = true
13/12/01 12:58:10 INFO mapred.MapTask: bufstart = 0; bufend = 16702718; bufvoid = 99614720
13/12/01 12:58:10 INFO mapred.MapTask: kvstart = 0; kvend = 262144; length = 327680
13/12/01 12:58:11 INFO mapred.MapTask: Finished spill 0
13/12/01 12:58:11 INFO mapred.MapTask: Spilling map output: record full = true
13/12/01 12:58:11 INFO mapred.MapTask: bufstart = 16702718; bufend = 33439467; bufvoid = 99614720
13/12/01 12:58:11 INFO mapred.MapTask: kvstart = 262144; kvend = 196607; length = 327680
13/12/01 12:58:11 INFO mapred.MapTask: Starting flush of map output
13/12/01 12:58:12 INFO mapred.MapTask: Finished spill 1
13/12/01 12:58:12 INFO mapred.MapTask: Finished spill 2
13/12/01 12:58:12 INFO mapred.Merger: Merging 3 sorted segments
13/12/01 12:58:12 INFO mapred.Merger: Down to the last merge-pass, with 3 segments left of total size: 36912217 bytes
13/12/01 12:58:12 INFO mapred.Task: Task:attempt_local1988835396_0001_m_000543_0 is done. And is in the process of commiting
13/12/01 12:58:12 INFO mapred.LocalJobRunner:
13/12/01 12:58:12 INFO mapred.Task: Task 'attempt_local1988835396_0001_m_000543_0' done.
13/12/01 12:58:12 INFO mapred.LocalJobRunner: Finishing task: attempt_local1988835396_0001_m_000543_0
13/12/01 12:58:12 INFO mapred.LocalJobRunner: Starting task: attempt_local1988835396_0001_m_000544_0
13/12/01 12:58:12 INFO mapred.Task: Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@17aee8b0
请建议我可以遵循的其他tuning techniques
来改进流程。
答案 0 :(得分:1)
我假设你正在使用Pseudo发行版,所以你的问题(猜测)就是Hadoop可以使用这么多进程插槽,现在你受到磁盘IO的限制 - 意味着你的硬盘(又一次)我假设你只有一个硬盘驱动器)只能并行读取这么多数据 - 在这种情况下,你的进程被称为IO绑定。
如何使用所有可用的CPU - 你可以编写一个非IO限制的作业,并且每个输入记录执行一些复杂的计算(可能是一些矩阵乘法,或者Pi估算器示例 - 但我不确定如何CPU密集度。)
答案 1 :(得分:1)
从您的描述中我觉得您受I / O约束。这只是意味着您的磁盘无法提供足够的数据来保持所有cpus忙碌。
基本上有两种方法可以改变这个