在CLI中定义Spark Master与在Spark应用程序代码中定义'master'有什么区别?

时间:2019-02-08 19:56:42

标签: scala apache-spark configuration cluster-computing spark-submit

在CLI中定义的Spark提交“ --master”与定义主模块的spark应用程序代码有什么区别?

在Spark中,我们可以在以下任一应用程序代码中指定主URI:

Spark Master configured in application code

或者我们可以在spark-submit中指定主URI作为参数的参数,如下所示:

Spark-submit master option

一个人比另一个人优越吗?他们是否必须通过合同达成一致,所以我在程序spark-submit和spark应用程序代码中引用了两个具有相同URI的实例,从而创建了SparkSession?一个会超越另一个吗? SparkSession对master参数有何不同之处,而spark-submit master参数有何不同之处?

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

引用reprex package

  

spark-submit脚本可以从属性文件加载默认的Spark配置值,并将其传递给您的应用程序。默认情况下,它将从Spark目录中的conf / spark-defaults.conf中读取选项。有关更多详细信息,请参阅有关加载默认配置的部分。

     

以这种方式加载默认的Spark配置可以避免某些标志需要提交火花。例如,如果设置了spark.master属性,则可以安全地从spark-submit省略--master标志。通常,在SparkConf上显式设置的配置值具有最高优先级,然后将标志传递给spark-submit,然后是默认文件中的值。

     

如果您不清楚配置选项的来源,则可以通过使用--verbose选项运行spark-submit来打印出细粒度的调试信息。

因此,所有选项都是有效的选项,如果在多个位置设置了相同的选项,则存在定义明确的优先级的层次结构。从最高到最低:

  • 应用程序中的显式设置。
  • 命令行参数。
  • 配置文件中的选项。

答案 1 :(得分:0)

从Spark文档中:

通常

    在SparkConf上显式设置的
  • 配置值具有最高优先级
  • 然后将标记传递到spark-submit
  • 然后使用默认文件中的值。

让我印象最深刻的方法是将标志传递给spark-submit。