一直在努力解决使用Spark YARN处理多个配置文件以及在集群和客户端模式之间切换的问题。
在我的应用程序中,我需要加载两个配置文件:
示例-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的一部分传递配置文件的完整路径&处理spark代码中的解压缩逻辑。
spark.submit.deploymode=client
然后取完整路径,即${APP_BASE_DIR}/conf/example-application.conf
spark.submit.deploymode=cluster
然后只取文件名,即example-application.conf
// 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} ${APP_BASE_DIR}/conf/example-application.conf "$@"
// How above file is loaded in code:
val configFile = if(!spark.conf.get("spark.submit.deployMode").contains("client")) configFileName.split("/").last else configFileName
val appConfFile = new File(configFile) // configFileName = "example-application.conf"
val conf = ConfigFactory.parseFile(appConfFile)
TL;DR:在Spark独立集群中,客户端和集群部署模式之间有什么区别?如何设置应用程序运行的模式? 我们有一个带有三台机器的Spark独立集群,它们都带有Spark 1.6.1: 主机,也是使用运行应用程序的地方 2台相同的工作机 2)如何使用选择应用程序将运行在哪个上?
有两种部署模式可用于在YARN上启动Spark应用程序。在yarn-cluster模式下,Spark驱动程序在集群上由YARN管理的应用程序主进程中运行,客户端可以在启动应用程序后离开。在yarn-client模式下,驱动程序在客户端进程中运行,而应用程序主进程仅用于向YARN请求资源。 在此,我只能理解的区别是哪个地方的驱动程序在运行,但我无法理解哪个运行得更快。莫尔沃弗: 在运行Spark-s
我有Kubernetes在两种不同的环境中工作良好,即在我的本地环境(运行minikube的MacBook)和谷歌的容器引擎(GCE,谷歌云上的Kubernetes)。我使用MacBook/local环境开发和测试我的YAML文件,完成后,在GCE上试用。 目前,我需要单独处理每个环境:我需要在本地环境中编辑YAML文件,准备好后,(git)将它们克隆到GCE环境中,然后使用/部署它们。这是一个有
要设置,我尝试了以下方法。 方法1:使用broadcast变量将tns.ora文件复制到所有执行程序sparksession.sparkcontext()。broadcast(“/tmp/conf/”,classTagTest) 方法2:在spark submit命令中使用--files参数传递tns.ora文件,并设置--conf spark.executor.extrajavaoptions=
我有一个项目连接到独立的redis,客户端创建为: 用于绝地武士和spring data redis的库版本为: 现在我需要移动到集群redis,并将客户端创建更改为 通过此代码更改,我在群集中找不到可访问的节点,如下所示: } 由于spark-2.1.3中运行了spark应用程序,由于版本依赖性,我需要使用相同的spring data redis。如果没有jedis和spring data re
我已经使用jedis将redis集成到我的spring web应用程序中(redis支持AWS弹性缓存)。在单节点上,它可以很好地使用单绝地连接工厂进行读写。 我现在需要将它扩展到一个集群,以便写入主节点并从次节点读取。也就是说,如果一个下降,那么复制将由AWS自动发生,在这种情况下,我将连接的主机名将被更改。 如何读取进入图片的新节点? 我如何从spring容器(我指的是XML文件)连接到它?