2015-04-03 72 views
6

無法在Docker上運行Apache Spark。如何在Docker上運行Spark?

當我嘗試從我的司機溝通,引發主我收到一個錯誤:

15/04/03 13:08:28 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

+1

我試圖在Docker中運行Spark Job Server時遇到了同樣的問題。這裏的問題是,Spark使用隨機端口在主,工作者和驅動程序之間進行通信。 Docker是一個封閉的系統設計,您需要通過EXPOSE公開特定的端口。當Spark無法通信時,會出現此錯誤。 – 2015-11-09 05:37:55

回答

4

二是碼頭工人情況更常見的原因。你應該檢查一下,你

  • 公開所有必要的端口
  • 設置正確的spark.broadcast.factory
  • 手柄泊塢窗別名

沒有處理所有的3個問題引發集羣的部分(主,工人,司機)無法溝通。您可以在http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html對每一個問題仔細閱讀或使用容器準備火花從https://registry.hub.docker.com/u/epahomov/docker-spark/

如果資源問題,嘗試分配較少的資源,標誌(執行器,內存,核心數量)從https://spark.apache.org/docs/latest/configuration.html。檢查Spark主UI頁面上有多少資源,默認爲http://localhost:8080

5

這個錯誤聽起來像工作人員沒有註冊主人。

這可以在主人的火花網頁大便http://<masterip>:8080

檢查你也可以簡單地使用不同的碼頭工人的形象,或碼頭的圖像與一個工程,看看有什麼不同的比較。

我已碼頭化spark masterspark worker

如果您有一臺Linux機器位於NAT路由器之後,如家庭防火牆,它將私有192.168.1。*網絡中的地址分配給機器,該腳本將下載一個spark 1.3.1主機和一個worker在分別地址爲192.168.1.10和.11的單獨的docker容器中運行。如果您的LAN上已經使用了192.168.1.10和192.168.1.11,則可能需要調整地址。

pipework是一種將LAN連接到容器而不是使用內部泊塢橋的實用程序。

Spark要求所有機器能夠相互通信。據我所知,火花不是分層的,我見過工作人員試圖互相打開端口。因此,在shell腳本中我公開了所有的端口,如果機器被其他防火牆(例如家庭NAT路由器後面)阻止,那麼這是可以的。

./run-docker-spark

#!/bin/bash 
sudo -v 
MASTER=$(docker run --name="master" -h master --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env SPARK_MASTER_IP=192.168.1.10 -d drpaulbrewer/spark-master:latest) 
sudo pipework eth0 $MASTER 192.168.1.10/[email protected] 
SPARK1=$(docker run --name="spark1" -h spark1 --add-host home:192.168.1.8 --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env mem=10G --env master=spark://192.168.1.10:7077 -v /data:/data -v /tmp:/tmp -d drpaulbrewer/spark-worker:latest) 
sudo pipework eth0 $SPARK1 192.168.1.11/[email protected] 

運行此腳本,我可以在192.168.1.10:8080看到主Web報告,或者去我的局域網上的另一臺機器,有一個火花分配後,並運行./spark-shell --master spark://192.168.1.10:7077,它會調出一個交互式的scala外殼。

相關問題