Как указать сопоставленные конфигурации и параметры java с помощью пользовательского jar в CLI с помощью Amazon EMR? - PullRequest
7 голосов
/ 15 февраля 2012

Я хотел бы знать, как указать конфигурации mapreduce, такие как mapred.task.timeout, mapred.min.split.size и т. Д., При запуске потокового задания с использованием пользовательского jar.

Мы можем использовать следующий способ для указания этих конфигураций при запуске с использованием внешних языков сценариев, таких как ruby ​​или python:

rubyastic-mapreduce -j --stream --step-name "mystream" --jobconf mapred.task.timeout = 0 --jobconf mapred.min.split.size = 52880 --mapper s3: //somepath/mapper.rb --reducer s3: somepath / reducer.rb --input s3: // somepath / input --output s3: // somepath / output

Я пробовал следующие способы, но ни один из них не работал:

  1. rubyastic-mapreduce --jobflow --jar s3: //somepath/job.jar --arg s3: // somepath / input --arg s3: // somepath / output - args -m, mapred.min.split.size = 52880 -m, mapred.task.timeout = 0

  2. rubyastic-mapreduce --jobflow --jar s3: //somepath/job.jar --arg s3: // somepath / input --arg s3: // somepath / output - args -jobconf, mapred.min.split.size = 52880 -jobconf, mapred.task.timeout = 0

Я также хотел бы знать, как передавать параметры java в потоковое задание, используя пользовательский jar в EMR. При локальном запуске на hadoop мы можем передать его следующим образом:

bin / hadoop jar job.jar input_path output_path -D =

Ответы [ 2 ]

6 голосов
/ 05 апреля 2012

В контексте Amazon Elastic MapReduce (Amazon EMR) , вы ищете Действия начальной загрузки :

Действия начальной загрузки позволяют вам передатьссылка на скрипт, хранящийся в Amazon S3.Этот скрипт может содержать параметров конфигурации и аргументов, связанных с Hadoop или Elastic MapReduce .Действия начальной загрузки выполняются до запуска Hadoop и до того, как узел начинает обрабатывать данные. [выделение шахты]

Раздел Запуск пользовательских действий начальной загрузки из CLI предоставляет общий пример использования:

& ./elastic-mapreduce --create --stream --alive \
--input s3n://elasticmapreduce/samples/wordcount/input \
--mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py \
--output s3n://myawsbucket 
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/download.sh  

В частностиСуществуют отдельные действия начальной загрузки для настройки Hadoop и Java:

Hadoop (кластер)

Вы можете указать настройки Hadoop с помощью действия начальной загрузки Настроить Hadoop , что позволяетнастроить параметры Hadoop для всего кластера , например:

$ ./elastic-mapreduce --create \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
--args "--site-config-file,s3://myawsbucket/config.xml,-s,mapred.task.timeout=0"     

Java (JVM)

Пользовательские параметры JVM можно указать с помощью действия начальной загрузки Настроить демонов :

Это предопределенное действие начальной загрузки позволяет указать размер кучи или другие параметры виртуальной машины Java (JVM) для демонов Hadoop.Это действие начальной загрузки можно использовать для настройки Hadoop для больших заданий, которые требуют больше памяти, чем Hadoop выделяет по умолчанию.Это действие начальной загрузки также можно использовать для изменения расширенных параметров JVM, таких как поведение сборки мусора.

Приведенный пример устанавливает размер кучи равным 2048 и настраивает параметр Java namenode :

$ ./elastic-mapreduce –create –alive \
  --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-daemons \
  --args --namenode-heap-size=2048,--namenode-opts=-XX:GCTimeRatio=19   
3 голосов
/ 01 ноября 2012

Полагаю, если вы хотите установить их отдельно для каждой работы, вам нужно

A) для пользовательских Jar-файлов, передать их в свой Jar-файл в качестве аргументов и обработать их самостоятельно.Я полагаю, что это можно автоматизировать следующим образом:

public static void main(String[] args) throws Exception {
  Configuration conf = new Configuration();
  args = new GenericOptionsParser(conf, args).getRemainingArgs();
  //....
}

Затем создайте задание следующим образом (не проверил, работает ли все же):

 > elastic-mapreduce --jar s3://mybucket/mycode.jar \
    --args "-D,mapred.reduce.tasks=0"
    --arg s3://mybucket/input \
    --arg s3://mybucket/output

GenericOptionsParser должно автоматическипередать параметры -D и -jobconf в настройку работы Hadoop.Подробнее: http://hadoop.apache.org/docs/r0.20.0/api/org/apache/hadoop/util/GenericOptionsParser.html

B) для потоковой банки Jadoop, вы также просто передаете изменение конфигурации в команду

> elastic-mapreduce --jobflow j-ABABABABA \
   --stream --jobconf mapred.task.timeout=600000 \
   --mapper s3://mybucket/mymapper.sh \
   --reducer s3://mybucket/myreducer.sh \
   --input s3://mybucket/input \
   --output s3://mybucket/output \
   --jobconf mapred.reduce.tasks=0

Подробнее: https://forums.aws.amazon.com/thread.jspa?threadID=43872 и elastic-mapreduce --help

...