一直困扰于使用Spark YARN处理多个配置文件以及在集群和客户端模式之间切换的问题。
在我的应用程序中,我需要加载两个配置文件:
我当前的设置:
example-application.conf:
include required(file("env.conf"))
app {
source
{
source-name: "some-source"
source-type: "file"
source-path: ${env.some-source-path}
}
....
}
env.conf:] >>
env { some-source-path: "/path/to/file" }
代码:
// Spark submit that works: $SPARK_HOME/bin/spark-submit --class ${APP_MAIN_CLASS} \ --master yarn \ --deploy-mode cluster \ --name ${APP_INSTANCE} \ --files ${APP_BASE_DIR}/conf/${ENV_NAME}/env.conf,${APP_BASE_DIR}/conf/example-application.conf \ --principal ${PRINCIPAL_NAME} --keytab ${KEYTAB_PATH} \ --jars ${JARS} \ --num-executors 10 \ --executor-memory 4g \ --executor-cores 4 \ ${APP_JAR} "example-application.conf" "$@" // How above file is loaded in code: val appConfFile = new File(configFileName) // configFileName = "example-application.conf" val conf = ConfigFactory.parseFile(appConfFile)
在集群模式下,上述设置有效,因为spark-submit命令的
--files
选项会将文件复制到集群模式下涉及的所有节点上,并与jars相同。因此,提供配置文件的名称就足够了。
但是,我不确定如何使此设置正常工作,以便可以轻松地将应用程序从客户端切换到群集模式。在客户端模式下,应用程序失败,因为ConfigFactory无法找到要解析的example-application.conf
。我可以通过提供应用程序配置的完整路径来解决此问题,但是包含函数include required(file("env.conf"))
将失败。
关于如何进行设置的任何建议,以便我可以轻松地在集群模式和客户端模式之间交换?
谢谢!
一直困扰于使用Spark YARN处理多个配置文件以及在集群和客户端模式之间切换的问题。在我的应用程序中,我需要加载两个配置文件:一个应用程序...
有多种方法可以解决此问题,我将遵循以下方法。