2016-04-14 8 views
1

Der Schritt ist:Kann nicht verstehen, wie Spark python bei Yarn laufen ließ? Wie geht der ProcessBuilder mit der Zip-Datei um?

1.Package alle Python-Dateien in die pyspark.zip beim Erstellen von Spark.

2.spark-submit to Yarn es verteilt die pyspark.zip auf alle Maschinen.

3.Spark Worker finden Sie die pyspark.zip und verarbeiten Sie die Python-Datei darin.

Aber der Code here und here zeigt, dass es nur den Pfad der ZIP-Dateien in die Umgebung von ProcessBuilder einfügt. Und ich habe den Code nicht gefunden, der pypark.zip entpackt.

Also ich frage mich, wie entpackt ProcessBuilder die pyspark.zip? Oder wie führt Spark Worker die Python-Dateien in pyspark.zip aus?

Antwort

0

In der Tat sehen können, wenn Sie python -h eingeben, wird es zeigen

Other environment variables: 
PYTHONPATH : ':'-separated list of directories prefixed to the default module search path. The result is sys.path. 

Und Process die Zip verwenden könnte, ohne es entpacken.

Auch eine Zip-Datei kann direkt in Python importiert werden, Sie müssen sie nicht entpacken.

List commands = new java.util.ArrayList<String>(); 
commands.add("python"); 
commands.add("-m"); 
commands.add("test");//test.py in test.zip 
ProcessBuilder pb = new ProcessBuilder(); 
pb.command(commands); 
Map workerEnv = pb.environment(); 
workerEnv.put("PYTHONPATH", "/path/to/test.zip"); 
Process worker = pb.start(); 
0

YARN verfügt über Mechanismen zur automatischen Entbündelung: JAR-, ZIP- und TGZ-Dateien. Es gibt eine kurze Diskussion darüber here Sie auch bei voller API