我的hadoop作业使用默认配置->本地文件系统上的本地模式没有使用我系统中的所有内核(16个)->通过使用所有内核,我可以在不同的示例中看到所有内核的活动 top
]从来没有超过200%,因此我改变了我的配置 conf
. mapred.tasktracker.map.tasks.maximum
设置为8和 mapred.tasktracker.reduce.tasks.maximum
把这个也设为8。
但我的内核使用率仍然低于300%。如何通过使用所有内核从机器获得最大吞吐量?
另外,我的文件大小约为1tb。这是作业运行的示例日志。我看到它在运行作业时创建了多个(temp)拆分。创建拆分并对其进行处理的循环将继续(重复)。我的预感是,在每个周期中,它都会创建一个临时文件并最终合并它们。有没有办法增加缓冲区的大小来处理更大的块(对于我的大输入文件)?
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
我可以遵循它来改进流程。
2条答案
按热度按时间uyto3xhc1#
我假设您使用的是伪发行版,所以您的问题(猜测)是,由于hadoop提供了这么多进程插槽,您现在受到磁盘io的限制—这意味着您的硬盘(我再次假设您只有一个hdd)只能并行读取这么多数据—在这种情况下,您的进程被称为io绑定。
如何使用所有可用的cpu—您可以编写一个不受io限制的作业,并对每个输入记录执行一些复杂的计算(可能是一些矩阵乘法,或pi估计器示例—但我不确定这会占用多少cpu)。
5f0d552i2#
从您的描述来看,我觉得您似乎受到i/o限制。这仅仅意味着磁盘不能提供足够的数据来保持所有cpu的繁忙。
基本上有两种方法可以改变这一点
您在系统中增加了io容量。i、 e.放入更多单独的磁盘,并确保输入文件均匀分布在这些磁盘上。
对于相同的数据,您的CPU可以做更多的工作。