2016-12-10 19 views
4

我目前正在使用Apache Zeppelin + Spark 2.x從普通的發行版中構建一個定製的docker容器。如何在dockerized Apache Zeppelin後面展示Spark Driver?

我的Spark作業將在遠程集羣中運行,並且我使用yarn-client作爲主節點。

當我運行筆記本並嘗試打印sc.version時,程序卡住了。如果我去的遠程資源管理器,應用程序已被創建並接受,但在日誌中我可以讀:

INFO yarn.ApplicationMaster: Waiting for Spark driver to be reachable

我瞭解的情況是,集羣是無法跟司機容器,但我不知道如何解決這個問題。

我目前使用以下配置:

  • spark.driver.port設置爲PORT1,並傳遞到容器
  • spark.driver.host設置爲172.17.0.2(容器的IP)
  • SPARK_LOCAL_IP設置爲172.17.0.2選項-p PORT1:PORT1( ip的容器)
  • spark.ui.port設置爲PORT2和選項-p PORT2:PORT2傳遞到容器

我有我應該SPARK_LOCAL_IP更改爲主機IP的感覺,但如果我這樣做,SparkUI無法啓動,前一個步閉鎖的過程。

在此先感謝您的任何想法/建議!

+1

謝謝您的回答,但實際上,如果設置了'spark.driver.host' (例如主機IP),那麼驅動程序無法在第一階段啓動('java.net.BindException:無法分配請求的地址:Service'sparkDriver'failed')。 – ThR37

回答

2

好問題!首先,如您所知,Apache Zeppelin運行interpreters in a separate processes

Apache Zeppelin architecture diagram

在你的情況,星火解釋JVM進程承載一個SparkContext並作爲SparkDriver實例爲yarn-client部署模式。根據Apache Spark documentation,容器內的此過程需要能夠將來回與來自YARN ApplicationMaster和羣集的所有SparkWorkers機器進行通信。

Apache Spark architecture diagram

這意味着你必須有number of ports打開,容器和主機之間手動轉發。這裏是an example of a project at ZEPL做類似的工作,它把我們7端口完成工作。

Anoter的形式給出了可以運行碼頭工人在host mode網絡(儘管它顯然不會在OS X上工作,由於a recent bug

相關問題