【问题标题】:How to expose Spark Driver behind dockerized Apache Zeppelin?如何在 dockerized Apache Zeppelin 后面公开 Spark 驱动程序?
【发布时间】:2017-04-25 22:00:33
【问题描述】:

我目前正在从一个包含 Apache Zeppelin + Spark 2.x 的普通发行版构建一个自定义 docker 容器。

我的 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 将无法启动,从而阻止了进程。

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

【问题讨论】:

  • 感谢您的回答,但实际上,如果我将spark.driver.host 设置为不同的(例如主机IP),则驱动程序无法在第一阶段启动(java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed)。

标签: apache-spark docker apache-zeppelin


【解决方案1】:

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

在您的情况下,Spark 解释器 JVM 进程托管 SparkContext 并充当 yarn-client 部署模式的SparkDriver 实例。根据Apache Spark documentation,容器内的这个进程需要能够来回与\from YARN ApplicationMaster 和集群的所有SparkWorkers 机器进行通信。

这意味着您必须打开 number of ports 并在容器和主机之间手动转发。这是 an example of a project at ZEPL 做类似的工作,我们花了 7 个端口 完成工作。

另一种方法可以在host mode 中运行 Docker 网络(尽管由于a recent bug,它显然不适用于 os x)

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2017-03-11
    • 2016-08-13
    相关资源
    最近更新 更多