无法理解Spark是如何让python在Yarn上运行的?ProcessBuilder如何处理zip文件



步骤是:

1.在构建Spark时,将所有python文件打包到pyspark.zip中。

2.spark-submit to Yarn它将pyspark.zip分发到所有机器。

3.Spark Worker找到pyspark.zip并处理其中的python文件。

但是这里和这里的代码显示,它只将zip文件的路径放入ProcessBuilder的环境中。我还没有找到解压pyspark.zip.的代码

所以我想知道ProcessBuilder是如何解压缩pyspark.zip的?或者Spark Worker是如何在pyspark.zip中运行python文件的?

YARN具有自动拆分的机制:JAR、ZIP和TGZ文件。这里有一个简短的讨论,你也可以看看完整的API

事实上,如果您键入python -h,它将显示

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

ProcessBuilder可以在不解压的情况下使用zip

此外,zip文件可以直接导入Python,无需解压缩。

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();

最新更新