解决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
,必须暴露在码头网络之外),我想避免它。
有什么办法可以解决驱动程序寻址问题而不暴露码头集装箱?
从星火吉拉相关的问题 - https://issues.apache.org/jira/browse/SPARK-4563 目前可能无法用Spark解决我的问题。 – Ajk