2016-06-21 1 views
1

Je suis en train de créer une tâche aws datapipeline qui va créer un cluster EMR et exécuter un simple programme spark de wordcount.py. J'ai utilisé la définition de datapipeline où les étapes est simple:Comment ajouter une étape d'étincelle python dans EMR?

"myEmrStep": "s3://test/wordcount.py,s3://test/data/abc.txt,s3://test/output/outfile5/", 

Maintenant, quand je la tâche activer, je reçois une erreur comme:

Exception dans le thread "principal" java.io.IOException: erreur pot de travail d'ouverture: /mnt/var/lib/hadoop/steps/s-187JR8H3XT8N7/wordcount.py à org.apache.hadoop.util.RunJar.run (RunJar.java:160) à org.apache. hadoop.util.RunJar.main (RunJar.java:136) Causé par: java.util.zip.ZipException: erreur dans l'ouverture du fichier zip au java.util.zip.ZipFile.open (Nativ Procédé e) à java.util.zip.ZipFile. (ZipFile.java:215) à

semble que les étapes tente d'exécuter le programme en utilisant java au lieu du python. Toute idée, s'il vous plaît.

Merci.

Répondre

0

Dans ma définition de pipeline, j'utilise ce qui suit, essentiellement un pot qui vous permet d'exécuter une commande aléatoire sur la boîte ... puis je soumets le travail d'allumage avec la commande spark-submit (que vous pouvez également utiliser localement).

Assurez-vous que tous les chemins que vous utilisez dans la commande sont absolues, sinon il pourrait ne pas fonctionner (je ne sais pas quel dossier est le répertoire courant)

Ceci est sur le nœud d'activité dans la pipeline: "step" : "/var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar,spark-submit,--py-files,/home/hadoop/lib.zip,/home/hadoop/analyse_exposures.py,#{myOutputS3Loc}/output/,#{myExposuresAnalysisWindowSize}"

Notez également que j'ai un script qui amorce le cluster pour transférer tout le code vers les machines individuelles du cluster afin qu'elles existent localement.

Il est défini sur le DME-ressource: "bootstrapAction": "#{myDeliverablesBucket}/emr/bootstrap.sh,#{myDeliverablesBucket}/emr/"

Je sais que cela pourrait ne pas être le plus flexible pour copier toutes les ressources que le cluster commence au lieu de les lire à partir de S3 directement, mais il fait le travail.