【发布时间】:2019-09-07 03:39:55
【问题描述】:
我正在共享集群环境中安装 Spark。我们决定使用 spark 独立模式,并使用 sbin 中包含的“start-all.sh”命令来启动 Spark 工作程序。由于集群的共享架构,SPARK_HOME 位于用户不可写的公共目录中。因此,我们在用户的临时目录中创建了“运行”目录,可以将 SPARK_CONF_DIR、日志目录和工作目录指向其中。
问题是 SPARK_CONF_DIR 从未在工作节点上设置,因此它们默认为 $SPARK_HOME/conf,它只有模板。我想要做的是通过 SPARK_CONF_DIR 从主节点传递到从节点。我已经确定了一个解决方案,但它需要 sbin/start-slaves.sh 的补丁:
46c46
< "${SPARK_HOME}/sbin/slaves.sh" cd "${SPARK_HOME}" \; export SPARK_CONF_DIR=${SPARK_CONF_DIR} \; "$SPARK_HOME/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
---
> "${SPARK_HOME}/sbin/slaves.sh" cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
这里有没有更好的解决方案,不需要修补 Spark 源代码?
当然,一种解决方案是复制并重命名 start-all.sh 和 start-slaves.sh 并使用它们来代替 sbin/start-all.sh。但是还有什么更优雅的吗?
感谢您的宝贵时间。
【问题讨论】:
-
为什么不通过你的程序设置你的 SPARK_CONF_DIR 呢?
-
这是在用户程序启动之前发生的。我相信 spark-submit 可以启动任务,但执行程序已经在运行。是否可以通过用户程序启动执行器?
标签: apache-spark