Hadoop:如何设置它以使用更多进程

时间:2013-12-05 04:11:39

标签: hadoop mapreduce

我在具有超线程的四核机器上运行MR程序,Hadoop 1.2.1在该机器上以伪分布式模式运行。

我做了什么

我有一个1GB的文件,并使用不同的地图任务和插槽设置(不减少)多次运行程序,这是我得到的结果:

  split     mapred.tasktracker.    No. of
  size      map.tasks.maximum      process   time   
--------------------------------------------------------
  iGB       1                      1         04m 13s
  1GB       2                      1         04m 10s
  1GB       4                      1         04m 12s

  500MB     1                      2         02m 14s
  500MB     2                      2         02m 13s
  500MB     4                      2         02m 13s

  250MB     1                      2         02m 17s
  250MB     2                      2         02m 16s
  250MB     4                      2         02m 18s
  250MB     8                      2         02m 16s

  125MB     1                      2         02m 25s
  125MB     2                      2         02m 23s
  125MB     4                      2         02m 24s
  125MB     8                      2         02m 24s

问题

当分割大小设置为1GB和500MB时,结果对我有意义。但是,当分割大小= 250MB且插槽大小大于或等于4时,我希望在TOP屏幕中最多获得4个java进程。或者,当分割大小= 125MB且插槽大小大于或等于4时。 (我看到更多的java进程,但它们正在睡眠并使用0.1%的CPU)

MR程序是用Python编写的,所以我使用的是Hadoop Streaming,每次运行时我都会看到1到2个Python进程。这是否意味着2个python进程和2个java进程占用了所有可用内核?但是这台机器是超级线程的四核,所以这是否意味着我可以同时运行多达8个进程? 这是记忆问题吗? CPU使用率很低。或者我在这里遗漏了什么?

我已尝试添加此功能,但仍然无法同时看到超过2个进程运行..

  <property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx512m</value>
  </property> 

修改

当我在属性中使用mapreduce而不是mapred时,我会在运行时获得更多信息,但由于打印日志而减慢速度。 INFO显示如下:

mapred.MapTask: numReduceTasks: 1
mapred.MapTask: io.sort.mb = 100
streaming.PipeMapRed: PipeMapRed exec [/Users/hadoop/./map.py]
...
streaming.StreamJob: map 0% reduce 0%
mapred.MapTask: Spilling map output: record full = true
mapred.MapTask: Finished spill 0

etc...

修改

另一件事是,当我添加更多reduce任务时,我确实在TOP屏幕中看到了更多的java进程。它只是没有添加更多的MAP流程......

0 个答案:

没有答案