Apache spark SparkContext.addFile vs spark submit--文件

Apache spark SparkContext.addFile vs spark submit--文件,apache-spark,Apache Spark,我正在使用Spark 1.6.0。我想传递一些属性文件,比如log4j.properties和其他一些客户属性文件。我看到我们可以使用--files,但我还看到SparkContext中有一个addFile方法。我更喜欢使用--files,而不是通过编程方式添加文件,假设两个选项相同 我没有找到太多关于--files的文档,那么--files和SparkContext.addFile这两个选项都一样吗 我找到的关于和的参考资料。这取决于Spark应用程序是以客户端模式还是群集模式运行 在客户端模

我正在使用Spark 1.6.0。我想传递一些属性文件,比如log4j.properties和其他一些客户属性文件。我看到我们可以使用--files,但我还看到SparkContext中有一个addFile方法。我更喜欢使用--files,而不是通过编程方式添加文件,假设两个选项相同

我没有找到太多关于--files的文档,那么--files和SparkContext.addFile这两个选项都一样吗


我找到的关于和的参考资料。

这取决于Spark应用程序是以客户端模式还是群集模式运行

客户端模式下驱动程序(应用程序主控程序)在本地运行,可以从项目中访问这些文件,因为它们在本地文件系统中可用。SparkContext.addFile应该可以找到您的本地文件并按预期工作


如果应用程序正在群集模式下运行。申请通过spark submit提交。这意味着您的整个应用程序被传输到Spark master或Thread,它在集群中的特定节点和分离的环境中启动驱动程序(应用程序master)。此环境无法访问您的本地项目目录。因此,所有必要的文件也必须传输。这可以通过--files选项实现。同样的概念也适用于jar文件(Spark应用程序的依赖项)。在集群模式下,它们需要添加--jars选项,以便在应用程序主机的类路径中可用。如果您使用PySpark,则有一个--py files选项。

SparkContext.addFile java doc说“在每个节点上添加一个要与此Spark作业一起下载的文件”。因此,似乎--files,addFile也会将文件传输到每个节点??运行分布式应用程序的部分(因为Spark是一个群集计算框架),因此,每个节点上都可能需要资源,因此资源将被分配到每个计算执行器上,以便访问。愚蠢的问题,这是否意味着如果我在群集模式下运行,我可以使用addFile或--file将文件传输到群集?如果客户端模式我只需要使用addFile而不是--files?没有愚蠢的问题!:-)如果您的文件可以通过http、hdfs等访问,那么您应该能够在客户端和集群模式下使用addFile和--files。在群集模式下,未添加到spark submit的本地文件将无法通过addFile找到。这是因为驱动程序(应用程序主控程序)在集群上启动,并且在到达addFile调用时已经在运行。现在已经很晚了。应用程序已经提交,本地文件系统是特定群集节点的文件系统。@gclaussn所以在客户端模式下,我们可以使用“addFile”和“--files”选项(如果文件是本地的),对吗?