我正在构建一个停靠的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 $1 --test_path $2
如您所见,我正在通过spark-submit
--conf
选项设置部分配置
如果在spark-submit
语句中我设置了一个配置参数,该参数也将通过以下方式在main.py
中设置:
SparkConf().set(option, value)
set
的优先级高于spark-submit
,因此,对于以两种方式设置的任何配置,只有使用SparkConf().set
设置的配置将优先(see other question)
我一直试图实现的是能够控制spark配置对spark-submit
中设置的内容进行优先级排序。似乎有参数^{
我尝试的是实例化一个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
对配置集进行优先级排序。这样,通过此方法只设置以前未设置的参数。 在代码中,这将是:相关问题 更多 >
编程相关推荐