SparkContext.addFile vs spark-submit --files

Mr *_*ark 12 apache-spark

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

我没有找到关于--files的文档,所以--files和SparkContext.addFile两个选项相同吗?

我发现有关--filesSparkContext.addFile的参考资料.

gcl*_*ssn 18

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

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

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

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