7

カスタム jar を使用してストリーミング ジョブを実行するときに、 mapred.task.timeout 、 mapred.min.split.sizeなどの mapreduce構成を指定する方法を知りたいです。

ruby や python などの外部スクリプト言語を使用して実行する場合、次の方法を使用してこれらの構成を指定できます。

ruby elastic-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. ruby elastic-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. ruby elastic-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

また、EMR でカスタム jar を使用して Java オプションをストリーミング ジョブに渡す方法も知りたいです。Hadoop でローカルに実行する場合、次のように渡すことができます。

bin/hadoop jar job.jar input_path output_path -D< some_java_parameter >=< some_value >

4

2 に答える 2

6

Amazon Elastic MapReduce (Amazon EMR)のコンテキストでは、 Bootstrap Actionsを探しています。

ブートストラップ アクションを使用すると、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 (クラスター)

ブートストラップ アクションConfigure 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"     

ジャバ (JVM)

ブートストラップ アクションConfigure Daemonsを介してカスタム JVM 設定を指定できます。

この定義済みのブートストラップ アクションを使用すると、Hadoop デーモンのヒープ サイズまたはその他の Java 仮想マシン (JVM) オプションを指定できます。このブートストラップ アクションを使用して、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   
于 2012-04-05T09:42:53.593 に答える
4

これらをジョブごとに設定したい場合は、

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) Hadoop ストリーミング jar の場合は、構成の変更をコマンドに渡すだけです。

> 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

于 2012-10-31T20:40:21.573 に答える