私のボト弾性MapReduce JARジョブフローパラメーターの何が問題になっていますか?

StackOverflow https://stackoverflow.com/questions/4788187

質問

ボトライブラリを使用して、Amazons Elastic MapReduce WebService(EMR)でジョブフローを作成しています。次のコードはステップを作成する必要があります。

step2 = JarStep(name='Find similiar items',
            jar='s3n://recommendertest/mahout-core/mahout-core-0.5-SNAPSHOT.jar',
            main_class='org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob',
            step_args=['s3n://bucket/output/' + run_id + '/aggregate_watched/',
                       's3n://bucket/output/' + run_id + '/similiar_items/',
                       'SIMILARITY_PEARSON_CORRELATION'
                      ])

ジョブフローを実行すると、常にこのエラーを投げることに失敗します。

java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/JobContext
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:148)
at org.apache.hadoop.mapred.JobShell.run(JobShell.java:54)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
at org.apache.hadoop.mapred.JobShell.main(JobShell.java:68)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.JobContext

これは、Javaコードを呼び出すEMRログの行です。

2011-01-24T22:18:54.491Z INFO Executing /usr/lib/jvm/java-6-sun/bin/java \
-cp /home/hadoop/conf:/usr/lib/jvm/java-6-sun/lib/tools.jar:/home/hadoop:/home/hadoop \
/hadoop-0.18-core.jar:/home/hadoop/hadoop-0.18-tools.jar:/home/hadoop/lib/*:/home/hadoop/lib/jetty-ext/* \
-Xmx1000m \
-Dhadoop.log.dir=/mnt/var/log/hadoop/steps/3 \
-Dhadoop.log.file=syslog \
-Dhadoop.home.dir=/home/hadoop \
-Dhadoop.id.str=hadoop \
-Dhadoop.root.logger=INFO,DRFA \
-Djava.io.tmpdir=/mnt/var/lib/hadoop/steps/3/tmp \
-Djava.library.path=/home/hadoop/lib/native/Linux-i386-32 \
org.apache.hadoop.mapred.JobShell \
/mnt/var/lib/hadoop/steps/3/mahout-core-0.5-SNAPSHOT.jar \
org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob \
s3n://..../output/job_2011-01-24_23:09:29/aggregate_watched/ \
s3n://..../output/job_2011-01-24_23:09:29/similiar_items/ \
SIMILARITY_PEARSON_CORRELATION

パラメーターの何が問題になっていますか? Javaクラスの定義はここにあります:

https://hudson.apache.org/hudson/job/mahout-quality/javadoc/org/apache/mahout/cf/taste/hadoop/similarity/item/itemsimilarityjob.html

役に立ちましたか?

解決

問題の解決策を見つけました:

  1. JobflowパラメーターでHadoopバージョン0.20を指定する必要があります
  2. mahout-core-0.5-snapshot.jarではなく、mahout-core-0.5-snapshot-job.jarでjarステップを実行する必要があります
  3. ジョブフローに追加のストリーミングステップがある場合は、ボトでバグを修正する必要があります。
    1. BOTO/EMR/STEP.PYを開きます
    2. 行138を「return '/home/hadoop/contrib/streaming/hadoop-streaming.jar'」に変更します。
    3. ボトを保存して再インストールします

これは、job_flow関数をmahoutで実行するために呼び出される方法です。

jobid = emr_conn.run_jobflow(name = name, log_uri = 's3n://'+ main_bucket_name +'/emr-logging/', enable_debugging=1, hadoop_version='0.20', steps=[step1,step2])

他のヒント

上記のステップ#2で説明されているボトへの修正(つまり、非バージョンのHadoop-Streamin.jarファイルを使用)は、このコミットでGitHubマスターに組み込まれています。

https://github.com/boto/boto/commit/a4e8e065473b5ff9af554ceb91391f286ac5cac7

ボトからこれを行ういくつかの参照のために

import boto.emr.connection as botocon

import boto.emr.step as step

con = botocon.EmrConnection(aws_access_key_id='', aws_secret_access_key='')

step = step.JarStep(name='Find similar items', jar='s3://mahout-core-0.6-job.jar', main_class='org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob', action_on_failure='CANCEL_AND_WAIT', step_args=['--input', 's3://', '--output', 's3://', '--similarityClassname', 'SIMILARITY_PEARSON_CORRELATION'])

con.add_jobflow_steps('jflow', [step])

明らかに、Mahout-Core-0.6-job.jarをアクセス可能なS3の場所にアップロードする必要があります。そして、入力とアウトパットにアクセスできる必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top