我正在尝试在Amazon EMR下运行wordcount示例。
-1-首先,我使用以下命令创建一个集群:
./ elastic-mapreduce --create --name“MyTest”--alive
这会创建一个包含单个实例的集群并返回一个jobID,比如说j-12NWUOKABCDEF
-2-其次,我使用以下命令启动Job:
./ elastic-mapreduce --jobflow j-12NWUOKABCDEF --jar s3n://mybucket/jar-files/wordcount.jar --main-class abc.WordCount --arg s3n:// mybucket / input-data /
- arg s3n:// mybucket / output-data /
- arg -Dmapred.reduce.tasks = 3
我的WordCount类属于包abc。
这没有任何问题,但我只得到一个reducer。 这意味着忽略参数“mapred.reduce.tasks = 3”。
有没有办法指定我希望我的应用程序使用的reducer数量?
谢谢你, Neeraj。
答案 0 :(得分:2)
"-D"
和"mapred.reduce.tasks=3"
应该是单独的参数。
答案 1 :(得分:0)
尝试使用--bootstrap-action选项设置reducers和mapper来启动EMR集群
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-daemons --args "-m,mapred.map.tasks=6,-m,mapred.reduce.tasks=3"
答案 2 :(得分:-1)
您可以使用流媒体Jar的-numReduceTasks
内置选项。例如,使用Ruby EMR CLI工具:
elastic-mapreduce --create --enable-debugging \
--ami-version "3.3.1" \
--log-uri s3n://someBucket/logs \
--name "someJob" \
--num-instances 6 \
--master-instance-type "m3.xlarge" --slave-instance-type "c3.8xlarge" \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia \
--stream \
--arg "-files" \
--arg "s3://someBucket/some_job.py,s3://someBucket/some_file.txt" \
--mapper "python27 some_job.py some_file.txt" \
--reducer cat \
--args "-numReduceTasks,8" \
--input s3://someBucket/myInput \
--output s3://someBucket/myOutput \
--step-name "main processing"