Apache spark spark.jar与--jar之间的区别

Apache spark spark.jar与--jar之间的区别,apache-spark,pyspark,Apache Spark,Pyspark,spark submit上提供的--conf spark.jars与--jars选项有什么区别?这两个选项填充相同的配置,因此,它们之间没有区别,除了--jars优先于--conf spark.jars因此,如果--jars和--conf spark.jars都设置了不同的值,那么将使用的是--jars值 详细说明 在Spark 3.1中,Spark submit中的参数值存储在类中。此类包含多个字段,每个字段表示一个选项,可以使用命令行参数或spark配置进行设置: var-master:St

spark submit上提供的
--conf spark.jars
--jars
选项有什么区别?

这两个选项填充相同的配置,因此,它们之间没有区别,除了
--jars
优先于
--conf spark.jars
因此,如果
--jars
--conf spark.jars
都设置了不同的值,那么将使用的是
--jars

详细说明 在Spark 3.1中,Spark submit中的参数值存储在类中。此类包含多个字段,每个字段表示一个选项,可以使用命令行参数或spark配置进行设置:

var-master:String=null
var deployMode:String=null
...
var jars:String=null
...
val sparkProperties:HashMap[String,String]=新的HashMap[String,String]()
...
这些字段用
null
或空集合初始化。稍后将在类中使用以下代码段填充它们:

//从命令行参数设置参数
解析(args.asJava)
//从属性文件填充“SparkProperty”映射
合并DefaultSparkProperties()
//从“sparkProperties”中删除不以“spark.”开头的键。
IgnoreProperties()
//使用“sparkProperties”贴图和环境变量来填充任何缺少的参数
loadEnvironmentArguments()
第一步是解析命令行中的所有参数,并用
parse(args.asJava)
相应地填充字段。我们传递解析部分并查看字段是如何填充的。在
handle
方法中完成:

覆盖受保护的def句柄(opt:String,value:String):布尔={
选择匹配{
案例名称=>
名称=值
...
箱子罐子=>
jars=Utils.resolveURIs(值)
...
案例形态=>
val(confName,confValue)=SparkSubmitUtils.parseSparkConfProperty(值)
SparkProperty(confName)=confValue
...
因此,
--jars
参数的值被设置为
jars
字段,而
--conf
参数的值被添加到
sparkProperties
字段映射中

解析参数后,
sparkProperties
将用于使用方法
loadEnvironmentArguments
填充缺少的参数:

private def loadEnvironmentArguments():单位={
master=Option(master).orElse(sparkproperty.get(“spark.master”)).orElse(env.get(“master”)).orNull
...
jars=Option(jars).orElse(sparkProperties.get(config.jars.key)).orNull
...
对于
SparkSubmitArguments
类的每个字段,此方法检查字段是否已使用已解析的参数填充,并且仅当情况并非如此时,才查看
SparkProperty
字段映射以填充空白

So
--jars
--conf spark.jars
SparkSubmitArguments
类中填充相同的字段
jars
,唯一的区别是
--jars
选项值覆盖
--conf spark.jars
选项值