运行Spark作业: Python vs. spark.submit

5

运行Spark作业的常见方法似乎是使用spark-submit,如下所示(source):

spark-submit --py-files pyfile.py,zipfile.zip main.py --arg1 val1

作为一个较新的spark用户,我想知道为什么第一种方法比从Python运行(example)更受欢迎:

python pyfile-that-uses-pyspark.py

使用前一种方法谷歌该主题可以得到更多的示例,但其中并没有明确说明原因。实际上,这里还有另一个 Stack Overflow 问题,其中一个回答(如下所述)特别告诉 OP 不要使用 python 方法,但没有给出原因。

不要运行你的 py 文件:python filename.py,而应该使用:spark-submit filename.py

能否有人提供见解?


1
不过,我自己已经有了一些理解,尽管我需要再次查看以回忆起来。如果我记得正确的话,它与集群有关,配置集群,并向节点提供所有所需的Python包。使用spark submit可以轻松完成所有这些操作,并且Python包依赖项可以作为zip文件提交。 - Mint
1
是的,我应该回来为其他人提供答案,因为当初接触Spark时这是一个很自然的问题。 - Mint
2个回答

1
稍微长一点的答案是,除了说 Anaconda 文档中提到的内容是错误的之外,官方文档从未告诉你使用 python,因为 Spark 需要 Java 虚拟机。 spark-submit 是一个 JVM 进程的包装器,它设置类路径、下载包、验证某些配置等等。运行 python 将绕过这个过程,必须将所有这些过程重建到 pyspark/__init__.py 中,以便在导入时运行这些进程。

谢谢,但是在使用Jupyter笔记本时它是如何工作的呢?例如,在这里https://codelabs.developers.google.com/codelabs/spark-jupyter-dataproc#5 - Michael
@Michael 这取决于Jupyter kernelspec。它需要使用PYTHONPATH定义,以包括pyspark和py4j库。或者您可以让它运行一个调用pyspark的shell进程。请参考Apache Toree项目作为示例。 - OneCricketeer

1

@mint 您的评论或多或少是正确的。

Spark的bin目录中的spark-submit脚本用于在集群上启动应用程序。它可以通过统一接口使用所有支持的集群管理器,因此您不必为每个管理器单独配置应用程序。

据我所知,使用python pyfile-that-uses-pyspark.py无法在集群上启动应用程序,或者至少更加困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接