你好,
这个问题之前出现过,但是我试了所有的方法都没有用。
我在EMR上运行了一个Pig脚本。这个脚本的结果大约有500个mapper和20个reducer。当我使用c3.4xlarge实例运行脚本时,我发现在同样的机器上却只有2个mapper。我想增加增加到16个mapper。
我使用Ruby CLI创建了EMR簇。下面是我的命令:
elastic-mapreduce --create --name "Test pig" \
--visible-to-all-users \
--num-instances 3 \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia \
--bootstrap-action="s3://elasticmapreduce/bootstrap-actions/configure-hadoop" \
--args "-m,mapred.tasktracker.map.tasks.maximum=16,-m,mapred.tasktracker.map.tasks.maximum=16,-m,mapred.tasktracker.reduce.tasks.maximum=16" \
--master-instance-type "c3.4xlarge" \
--slave-instance-type "c3.4xlarge" \
--pig-script \
--args s3://my-bucket/pig/myscript.pig \
--pig-versions 0.11.1.1 --ami-version 3.0.4
我还试过改变任务存储的位置。但是没有成功。我在Hadoop配置上做了一些设定(我通过UI检查了这些设定),但是我还是只能看到2个任务(2个mapper,1个mapper和1个reducer或者2个reducer)在运行。奇怪的是,当我在测试用的m1.xlarge实例上运行时,结果是成功的。
非常感谢你们的帮助。

解决方案 »

  1.   

    你好,
    当你使用AMI 3.x时,你使用的是Hadoop 2 的YARN框架。而mapred.tasktracker.map.tasks.maximum样式的框架只适用于Hadoop 1。在EMR上的Hadoop 2 YARN框架中,YARN系统以一个更为动态的方式控制map/reducer的位置,因此不用提前声明位置。
    你可以看一下http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/YARN.html中介绍的YARN怎样介绍设置资源的位置以及它对map/reduce任务的影响。
    你还可以看一下下列文档:
    http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/TaskConfiguration_H2.html你可以看到每个实例类型的默认值以及c3.xlarge和m1.xlarge中执行并行任务的不同方式的说明。最主要的不同点在于在m1.xlarge中存储yarn.nodemanager.resource.memory-mb需要的内存比在c3.4xlarge中要多1.5倍。
      

  2.   

    非常感谢,我会修改mappers/reducers的内存值的。
    另外,我记得我只试了mapreduce.map.java.opts,还没有试mapreduce.map.memory.mb。我会试着结合它们试一下的。