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

时间:2016-07-22 15:27:06

标签: apache-spark docker client mode

我正在尝试使用客户端模式从docker化的Apache Spark应用程序连接到独立的Apache Spark集群。

驱动程序向Spark Master和Workers提供其地址。在docker容器内运行时,它将使用some_docker_container_ip。从外部看不到泊坞窗地址,因此应用程序无法正常工作。

Spark有spark.driver.host属性。此属性将传递给Master和Workers。我最初的本能是在那里传递主机地址,因此群集将代替可见机器。

不幸的是,spark.driver.host也用于通过Driver设置服务器。在那里传递主机地址将导致服务器启动错误,因为docker容器无法绑定主机主机下的端口。

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

理想情况下,我想拥有两个属性。 spark.driver.host-to-bind-to用于设置驱动程序服务器以及Master和Workers将使用的spark.driver.host-for-master。不幸的是,我似乎只被一个财产困住了。

另一种方法是在运行docker容器时使用--net=host。这种方法有许多缺点(例如,其他docker容器无法链接到--net=host上的容器,并且必须暴露在docker网络之外),我想避免它。

有没有办法在不暴露docker容器的情况下解决驱动程序寻址问题?

1 个答案:

答案 0 :(得分:3)

https://github.com/apache/spark/pull/15120

修复了此问题

它将成为Apache Spark 2.1发布的一部分