无法理解 Spark 如何让 python 运行 at Yarn? ProcessBuilder 如何处理 zip 文件?

Can not understand how Spark let python run at Yarn? How does the ProcessBuilder deal with zip file?

步骤是:

1.package 构建 Spark 时将所有 python 文件放入 pyspark.zip。

2.spark-提交给 Yarn,它将 pyspark.zip 分发给所有机器。

3.Spark 工作人员找到 pyspark.zip 并处理其中的 python 文件。

但是代码 here and here 表明它只将 zip 文件的路径放入 ProcessBuilder 的环境中。而且我还没有找到解压缩 pyspark.zip 的代码。

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

YARN 具有自动解绑机制:JAR、ZIP 和 TGZ 文件。关于它有一个简短的讨论 here you can also look at the full 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();