2016-06-21 11 views
1

Ich versuche eine AWS Datapipeline-Aufgabe zu erstellen, die einen EMR-Cluster erstellt und ein einfaches Wordcount.py-Spark-Programm ausführt. Ich benutzte die datapipeline Definition, wo Schritte ist einfach wie:Wie füge ich Python Funken Schritt in EMR hinzu?

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

Wenn ich nun die Aufgabe zu aktivieren, ich einen Fehler wie:

Exception in thread "main" java.io.IOException: Fehler beim Öffnen des Jobs jar: /mnt/var/lib/hadoop/steps/s-187JR8H3XT8N7/wordcount.py um org.apache.hadoop.util.RunJar.run (RunJar.java:160) um org.apache. hadoop.util.RunJar.main (RunJar.java:136) Verursacht von: java.util.zip.ZipException: Fehler beim Öffnen der Zip-Datei unter java.util.zip.ZipFile.open (Nativ e Method) bei java.util.zip.ZipFile. (ZipFile.java:215) bei

scheint, wie die Schritte des Programms unter Verwendung von Java anstelle von Python auszuführen versucht. Irgendeine Idee, bitte.

Danke.

Antwort

0

In meiner Pipeline-Definition verwende ich die folgenden, im Grunde einige jar, die Sie einen zufälligen Befehl auf der Box ausführen können ... dann übergebe ich den Funken Job mit dem Spark-Submit-Befehl (den Sie auch verwenden können örtlich).

Stellen Sie sicher, dass alle Wege, die Sie in dem Befehl absolut sind, sonst könnte es nicht funktionieren (ich weiß nicht, in welchem ​​Ordner das aktuelle Verzeichnis)

Dies ist auf die Aktivität Knoten in der pipeline:

Beachten Sie auch, dass ich ein Skript habe, das den Cluster bootstrappt, um den gesamten Code auf die einzelnen Computer im Cluster zu übertragen, damit sie lokal existieren.

Dies ist auf der EMR-Ressource definiert: "bootstrapAction": "#{myDeliverablesBucket}/emr/bootstrap.sh,#{myDeliverablesBucket}/emr/"

Ich weiß, dass es nicht die flexibelste sein könnte, alle Ressourcen kopieren über wie der Cluster sie von S3 zu lesen, sondern direkt startet, aber es macht den Job.

Verwandte Themen