解决Docker容器在客户端模式下运行的Apache Spark应用程序的问题

问题描述:

我试图从使用客户端模式的dockerized Apache Spark应用程序连接到独立Apache Spark群集。解决Docker容器在客户端模式下运行的Apache Spark应用程序的问题

驱动程序给火花大师和工人的地址。在码头集装箱内运行时,它将使用some_docker_container_ip。码头地址从外部不可见,所以应用程序将无法工作。

Spark有spark.driver.host属性。这个属性被传递给主人和工人。我最初的直觉是在那里传递主机地址,以便集群可以访问可见机器。

不幸的是,spark.driver.host也被用来由Driver建立一个服务器。在此处传递主机地址将导致服务器启动错误,因为docker容器无法绑定主机机器主机下的端口。

这似乎是一个双输的局面。我既不能使用主机地址也不能使用码头容器地址。

理想情况下,我想有两个属性。 spark.driver.host-to-bind-to用于设置驱动程序服务器和spark.driver.host-for-master将由主和工作人员使用。不幸的是,它似乎只是一个属性卡住了。

另一种方法是在运行码头集装箱时使用--net=host。这种方法有很多缺点(例如,其他码头集装箱无法链接到集装箱,--net=host,必须暴露在码头网络之外),我想避免它。

有什么办法可以解决驱动程序寻址问题而不暴露码头集装箱?

+0

从星火吉拉相关的问题 - https://issues.apache.org/jira/browse/SPARK-4563 目前可能无法用Spark解决我的问题。 – Ajk

此问题已在https://github.com/apache/spark/pull/15120

这将是阿帕奇的一部分星火2.1版本