Установка количества редукторов для приложения 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"