pyspark作业参数中的--archives、--files、py文件之间有什么区别

wfypjpf4  于 2022-11-21  发布在  Spark
关注(0)|答案(2)|浏览(589)

--archives--files--py-filessc.addFile以及sc.addPyFile相当混乱,有人能解释清楚吗?

jyztefdp

jyztefdp1#

这些选项确实分散在各处。
一般来说,通过--files--archives添加数据文件,通过--py-files添加代码文件。后者将被添加到类路径中(参见此处),以便导入和使用。
可以想象,CLI参数实际上是由addFileaddPyFiles函数处理的(参见此处)

在后台,pyspark调用更通用的spark-submit脚本。
通过将逗号分隔的列表传递给--py-files,可以将Python .zip、.egg或.py文件添加到运行时路径

--files--archives选项支持使用#指定文件名,类似于Hadoop。例如,您可以指定:--files localtest.txt#appSees.txt,这会将您在本地命名为localtest. txt的文件上传到HDFS,但它将通过名称appSees. txt链接到HDFS,并且您的应用程序在YARN上运行时应使用appSees. txt这样的名称来引用它。

  • 来自http://spark.apache.org/docs/latest/api/python/pyspark.html?highlight=addpyfile#pyspark.SparkContext.addPyFile

addFile(path)在每个节点上添加一个要与此Spark作业一起下载的文件。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP、HTTPS或FTP URI。
addPyFile(path)为将来要在此SparkContext上执行的所有任务添加.py或.zip依赖项。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件或HTTP、HTTPS或FTP URI。

6jygbczu

6jygbczu2#

这也是困惑我早些时候,经过实验与Spark3.0今天,我终于明白这些选项是如何工作的。
我们可以把这些选择分成两类。
第一类是数据文件,数据文件意味着spark只将指定的文件添加到容器中,不再执行进一步的命令.这类中有两个选项:

  • --archives:使用此选项,您可以提交归档文件,Spark将为您提取其中的文件,Spark支持ziptar ......格式。
  • --files:使用此选项,您可以提交文件,spark会将其放在container中,不会执行任何其他操作。sc.addFile是此选项的编程api。

第二类是代码依赖,在spark应用程序中,代码依赖可以是JVM依赖或者是python依赖

  • --jars:这个选项用来提交JVM依赖的Jar文件,spark会自动把这些Jar添加到CLASSPATH中,这样你的JVM就可以加载它们了。
  • --py-files:该选项用于提交Python依赖项,它可以是.py.egg.zip。Spark会将这些文件添加到PYTHONPATH中,以便您Python解释器可以找到它们。

sc.addPyFile是此应用程序的编程API。
PS:对于单个的.py文件,spark会将其添加到__pyfiles__文件夹中,其他的会添加到CWD中。
这四个选项都可以指定多个文件,用,拆分,每个文件可以通过{URL}#{ALIAS}指定一个别名。不要在--py-files选项中指定别名,因为spark不会将别名添加到PYTHONPATH中。
顺便说一句,每个文件支持多个方案,如果不指定,默认为file

  • file:驱动程序将通过HTTP将这些文件传输到Executor,如果在cluster部署模式下,Spark将首先将这些文件上传到集群驱动程序。
  • 第一个月22个月1x:、第一个月23个月1x:、第一个月24个月1x:、第一个月25个月1x:驱动程序和执行器将从相应文件系统下载指定文件
  • local:该文件应作为本地文件存在于每个工作节点上。

参考

相关问题