2011-01-24 5 views
2

J'utilise la bibliothèque boto pour créer un flux de travaux dans AmazonS Elastic MapReduce Webservice (EMR). Le code suivant devrait créer une étape:Qu'est-ce qui ne va pas avec mes paramètres de flux de travail boto elastic mapreduce jar?

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' 
         ]) 

Quand je lance le flux de travail, il échoue toujours lancer cette erreur:

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 

Ceci est la ligne dans les journaux de DME invoquant le code java:

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 

Quel est le problème avec les paramètres? La définition de la classe java se trouve ici:

https://hudson.apache.org/hudson/job/Mahout-Quality/javadoc/org/apache/mahout/cf/taste/hadoop/similarity/item/ItemSimilarityJob.html

+3

lol. Il m'a fallu un certain temps pour me convaincre que vous n'étiez pas juste en train de faire des mots. –

+0

utilisez votre autre main – James

+0

@ T.E.D .: Je suis avec vous. Je pense que je deviens vieux ... –

Répondre

3

J'ai trouvé la solution pour le problème:

  1. Vous devez spécifier la version de Hadoop 0,20 dans les paramètres jobflow
  2. Vous devez exécuter l'étape JAR avec mahout-core-0.5-SNAPSHOT-job.jar, pas avec le mahout-core-0.5-SNAPSHOT.jar
  3. Si vous avez une étape de streaming supplémentaire dans votre flux de travail, vous devez corriger un bogue dans boto :
    1. Ouvert Boto/RME/step.py
    2. ligne de changement 138 "retour '/home/hadoop/contrib/streaming/hadoop-streaming.jar'"
    3. Enregistrer et réinstaller Boto

Voici comment la fonction job_flow doit être invoqué pour fonctionner avec cornac:

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])

+0

Merci d'être revenu et de poster votre réponse. Cela peut aider si quelqu'un d'autre a déjà le même problème. Si c'est vraiment ** la réponse ** à votre problème, vous devriez l'accepter aussi (Cliquez sur la coche à côté de son score). Je sais qu'il semble ringard de se faire repreindre de cette façon, mais cela indique au système d'OS qu'une solution a été trouvée. –

1

Pour référence Certains faisant de Boto

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]) 

Il est évident que vous devez téléchargez le fichier mahout-core-0.6-job.jar vers un emplacement s3 accessible. Et l'entrée et la sortie doivent être accessibles.

Questions connexes