我目前正在使用Apache Zeppelin + Spark 2.x在普通发行版中构建自定义docker容器。
My Spark作业将在远程群集中运行,我使用yarn-client
作为主。
当我运行笔记本并尝试打印sc.version
时,程序会卡住。如果我转到远程资源管理器,已经创建并接受了一个应用程序,但在日志中我可以阅读:
INFO yarn.ApplicationMaster: Waiting for Spark driver to be reachable
我对情况的理解是群集无法与容器中的驱动程序通信,但我不知道如何解决此问题。
我目前正在使用以下配置:
spark.driver.port
设置为PORT1
,选项-p PORT1:PORT1
传递给容器spark.driver.host
设置为172.17.0.2
(容器的IP)SPARK_LOCAL_IP
设置为172.17.0.2
(容器的IP)spark.ui.port
设置为PORT2
,选项-p PORT2:PORT2
传递给容器我觉得我应该将SPARK_LOCAL_IP更改为主机ip,但如果我这样做,SparkUI无法启动,阻止该过程前一步。
提前感谢任何想法/建议!
答案 0 :(得分:4)
好问题!首先,正如您所知,Apache Zeppelin运行interpreters in a separate processes。
在您的情况下,Spark解释器JVM进程托管SparkContext
并充当SparkDriver
部署模式的yarn-client
实例。根据{{3}},容器内的这个过程需要能够来自YARN ApplicationMaster和集群的所有SparkWorkers机器的来回。
这意味着您必须在容器和主机之间打开并手动转发。以下number of ports做了类似的工作,我们用 7个端口来完成工作。
Anoter aproach可以在an example of a project at ZEPL中运行Docker网络(虽然它显然不适用于os x,因为host mode)