Установка количества редукторов для приложения Amazon EMR

Я пытаюсь запустить пример WordCount под Amazon EMR.

-1- Сначала я создаю кластер с помощью следующей команды:

./elastic-mapreduce --create --name "MyTest" --alive

Это создает кластер с одним экземпляром и возвращает jobID, скажем, j-12NWUOKABCDEF

-2- Во-вторых, я запускаю работу, используя следующую команду:

./elastic-mapreduce --jobflow j-12NWUOKABCDEF --jar s3n: //mybucket/jar-files/wordcount.jar --основной класс abc.WordCount --arg s3n: // mybucket / input-data /

--arg s3n: // mybucket / output-data /

--arg -Dmapred.reduce.tasks = 3

Мой класс WordCount принадлежит пакету abc.

Это выполняется без каких-либо проблем, но я получаю только один редуктор. Это означает, что параметр "mapred.reduce.tasks=3" игнорируется.

Есть ли способ указать количество редукторов, которые я хочу использовать в моем приложении?

Спасибо, Нирадж.

3 ответа

"-D" и "mapred.reduce.tasks=3" должны быть отдельные аргументы.

Попробуйте запустить кластер EMR, установив в свойствах Reduser и Mapper опцию --bootstrap-action

--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-daemons --args "-m,mapred.map.tasks=6,-m,mapred.reduce.tasks=3"

Вы можете использовать встроенную опцию потокового 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"
Другие вопросы по тегам