如何在dockerized Apache Zeppelin后面公开Spark Driver?

时间:2016-12-10 15:26:09

标签: apache-spark docker apache-zeppelin

我目前正在使用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无法启动,阻止该过程前一步。

提前感谢任何想法/建议!

1 个答案:

答案 0 :(得分:4)

好问题!首先,正如您所知,Apache Zeppelin运行interpreters in a separate processes

Apache Zeppelin architecture diagram

在您的情况下,Spark解释器JVM进程托管SparkContext并充当SparkDriver部署模式的yarn-client实例。根据{{​​3}},容器内的这个过程需要能够来自YARN ApplicationMaster和集群的所有SparkWorkers机器的来回

Apache Spark documentation

这意味着您必须在容器和主机之间打开并手动转发Apache Spark architecture diagram。以下number of ports做了类似的工作,我们用 7个端口来完成工作。

Anoter aproach可以在an example of a project at ZEPL中运行Docker网络(虽然它显然不适用于os x,因为host mode