设置spark上下文配置优先级sparksubmit

2024-10-01 22:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个停靠的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,如果这是它的初衷的话?否则,是否有其他方法来实现此行为?非常感谢您在这方面的帮助


Tags: 文件hadoop内容参数confjobexportproperties
1条回答
网友
1楼 · 发布于 2024-10-01 22:40:07

我设法解决了它。停止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)

相关问题 更多 >

    热门问题