设置火花上下文配置优先火花提交
Set spark context configuration prioritizing spark-submit
我正在构建一个 dockerized spark 应用程序,它将 运行 通过一个 entrypoint.sh
文件,该文件又 运行 一个 spark-submit
:
#!/bin/bash
export SPARK_DIST_CLASSPATH=$(hadoop classpath):$HADOOP_HOME/share/hadoop/*
export _JAVA_OPTIONS="-Xms2g -Xmx8g -XX:MaxPermSize=8g"
spark-submit \
--master local \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///job/log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///job/log4j.properties"\
--files "/job/log4j.properties" \
main.py --train_path --test_path
如您所见,我正在通过 spark-submit
--conf
选项设置部分配置。
如果在 spark-submit
语句中我设置了一个配置参数,该参数也将通过以下方式在 main.py
中设置:
SparkConf().set(option, value)
set
优先于 spark-submit
,因此对于以两种方式设置的任何配置,只有使用 SparkConf().set
设置的才会优先 ()。
我一直在努力实现的是能够控制 spark 配置优先考虑 spark-submit
中设置的内容。似乎有参数SparkConf.setIfMissing
,但我不确定我是否正确使用它。
我尝试的是实例化一个SparkConf()
对象并使用上述方法设置配置,如:SparkConf().setIfMissing(option, value)
。但它不起作用。它会覆盖 spark-submit
中的任何设置。我的猜测是,在上下文未初始化之前,您无法检索通过 spark-submit
.
设置的内容
所以我不确定如何在这种情况下使用 SparkConf.setIfMissing
,如果这是开始的目的?否则,是否有其他方法可以实现此行为?在这方面将不胜感激。
我设法解决了。停止 SparkContext
并检索通过 spark-submit
设置的所有参数,然后 然后 创建一个新的上下文就做到了。步骤如下:
- 初始化
SparkContext
- 通过
sc.getConf()
检索所有先前设置的配置并使用 sc.stop()
停止先前的上下文
- 使用
SparkConf().setIfMissing()
设置所有剩余配置并使用新配置创建新上下文 SparkContext(conf=conf)
最后一步可以通过 spark-submit
设置配置集的优先级。这样,只有以前没有设置的参数才能通过此方法设置。
在代码中,这将是:
config = my_config_dict
sc = SparkContext()
sc.stop()
conf = sc.getConf()
for option in my_config_dict.keys():
conf.setIfMissing(option, my_config_dict[option])
sc = SparkContext(conf=conf)
我正在构建一个 dockerized spark 应用程序,它将 运行 通过一个 entrypoint.sh
文件,该文件又 运行 一个 spark-submit
:
#!/bin/bash
export SPARK_DIST_CLASSPATH=$(hadoop classpath):$HADOOP_HOME/share/hadoop/*
export _JAVA_OPTIONS="-Xms2g -Xmx8g -XX:MaxPermSize=8g"
spark-submit \
--master local \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///job/log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///job/log4j.properties"\
--files "/job/log4j.properties" \
main.py --train_path --test_path
如您所见,我正在通过 spark-submit
--conf
选项设置部分配置。
如果在 spark-submit
语句中我设置了一个配置参数,该参数也将通过以下方式在 main.py
中设置:
SparkConf().set(option, value)
set
优先于 spark-submit
,因此对于以两种方式设置的任何配置,只有使用 SparkConf().set
设置的才会优先 (
我一直在努力实现的是能够控制 spark 配置优先考虑 spark-submit
中设置的内容。似乎有参数SparkConf.setIfMissing
,但我不确定我是否正确使用它。
我尝试的是实例化一个SparkConf()
对象并使用上述方法设置配置,如:SparkConf().setIfMissing(option, value)
。但它不起作用。它会覆盖 spark-submit
中的任何设置。我的猜测是,在上下文未初始化之前,您无法检索通过 spark-submit
.
所以我不确定如何在这种情况下使用 SparkConf.setIfMissing
,如果这是开始的目的?否则,是否有其他方法可以实现此行为?在这方面将不胜感激。
我设法解决了。停止 SparkContext
并检索通过 spark-submit
设置的所有参数,然后 然后 创建一个新的上下文就做到了。步骤如下:
- 初始化
SparkContext
- 通过
sc.getConf()
检索所有先前设置的配置并使用sc.stop()
停止先前的上下文
- 使用
SparkConf().setIfMissing()
设置所有剩余配置并使用新配置创建新上下文SparkContext(conf=conf)
最后一步可以通过 spark-submit
设置配置集的优先级。这样,只有以前没有设置的参数才能通过此方法设置。
在代码中,这将是:
config = my_config_dict
sc = SparkContext()
sc.stop()
conf = sc.getConf()
for option in my_config_dict.keys():
conf.setIfMissing(option, my_config_dict[option])
sc = SparkContext(conf=conf)