2015-02-23 81 views
11

我已經使用Spark設置了EC2集羣。一切正常,所有的主人/奴隸都在運轉。遠程向Spark EC2集羣提交作業

我想提交一個示例工作(SparkPi)。當我ssh羣集並從那裏提交 - 一切工作正常。但是,當在遠程主機(我的筆記本電腦)上創建驅動程序時,它不起作用。我已經試過這兩種模式爲--deploy-mode

--deploy-mode=client

從我的筆記本電腦:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 

結果在下面的不確定警告/錯誤:

WARN TaskSchedulerImpl:初始工作沒有接受任何資源; 檢查你的集羣用戶界面,以確保工人登記,並 足夠的內存15/02/22 18時三十分45秒

錯誤SparkDeploySchedulerBackend:要求刪除不存在的執行0 15/02/22 18:30: 45

錯誤SparkDeploySchedulerBackend: - 與 「國家= ERROR」 出現在星火Web UI的 「完成驅動程序」 要求刪除不存在的執行1

...和失敗的驅動程序。

我試圖通過對核心和內存提交腳本的限制,但它並沒有幫助...

--deploy-mode=cluster

從我的筆記本電腦:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --deploy-mode cluster --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 

結果是:

....驅動程序成功提交爲驅動程序-20150223023734-0007 ... 等待輪詢主驅動程序狀態之前...輪詢主驅動程序 驅動程序狀態驅動程序狀態20150223023734-0007爲錯誤異常 來自羣集:java.io.FileNotFoundException:文件 file:/home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 不存在。 java.io.FileNotFoundException:文件 file:/home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 不存在。在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:397) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251) 在org.apache.hadoop.fs .FileUtil.copy(FileUtil.java:329)at org.apache.spark.deploy.worker.DriverRunner.org $ apache $ spark $ deploy $ worker $ DriverRunner $$ downloadUserJar(DriverRunner.scala:150) at org .apache.spark.deploy.worker.DriverRunner $$匿名$ 1.run(DriverRunner.scala:75)

所以,我會很感激的什麼錯誤的指針和一些指導如何部署從工作遠程客戶端。謝謝。

UPDATE: 所以在集羣模式下的第二個問題,文件必須由每個集羣節點全局可見的,所以它必須是某處訪問的位置。這解決了IOException,但導致與客戶端模式中相同的問題。

+0

我認爲驅動程序提供的代碼/東西給工人。你的拉皮可以從你的工人到達嗎?通常情況下,您需要儘可能靠近羣集的驅動程序。 – 2015-02-23 03:14:11

+1

正如@AlisterLee說,你應該檢查你的計算機和EC2節點(防火牆,端口設置等)之間的設置。如果失敗,那麼你可能想嘗試也採取這個郵件列表(然後彙報解決方案:)) – 2015-02-23 03:43:09

回答

1

的文檔:在Spark集羣使用

http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security

列出了所有的不同通信信道。正如你所看到的,從執行器到驅動程序的連接有一堆。當您使用--deploy-mode=client運行時,驅動程序會在您的筆記本電腦上運行,因此執行程序會嘗試連接到筆記本電腦。如果您的執行程序在其下運行的AWS安全組阻止向您的筆記本電腦發送流量(由Spark EC2腳本創建的默認安全組不是),或者您位於路由器/防火牆後(更可能),則它們無法連接你會看到你所看到的錯誤。

所以要解決它,你必須將所有需要的端口轉發到你的筆記本電腦,或重新配置防火牆以允許連接到端口。隨着一堆港口隨機選擇,這意味着開放各種各樣的港口(如果不是全部的話)。因此,可能使用集羣中的--deploy-mode=clusterclient,不那麼痛苦。

+0

謝謝,這是對的。它已經有一段時間我問這個,我已經通過打開入站連接,以星火主解決了這個 - 由AWS改變安全組 – 2015-04-16 01:12:10