2015-02-11 97 views
9

這是使用大數據的東西,比如Apache火花和Hadoop我們的第一個步驟。阿帕奇星火錯誤:無法連接到akka.tcp:// @ sparkMaster

我們安裝了Cloudera CDH 5.3。我們選擇從cloudera管理器安裝spark。 Spark在集羣中的一個節點上運行良好。

從我的機器我做了一個連接到讀取存儲在Hadoop的HDFS一個文本文件中的小應用程序。

我試圖從Eclipse運行應用程序並顯示這些消息

15/02/11 14:44:01 INFO client.AppClient$ClientActor: Connecting to master spark://10.62.82.21:7077... 15/02/11 14:44:02 WARN client.AppClient$ClientActor: Could not connect to akka.tcp://[email protected]:7077: akka.remote.InvalidAssociation: Invalid address: akka.tcp://[email protected]:7077 15/02/11 14:44:02 WARN Remoting: Tried to associate with unreachable remote address [akka.tcp://[email protected]:7077]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: Connection refused: no further information: /10.62.82.21:7077

的應用是有一個類使用以下行

JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("Spark Count").setMaster("spark://10.62.82.21:7077"));

的創建上下文這個IP是機器火花工作的IP地址。

然後我嘗試使用以下行來讀取HDFS文件

sc.textFile("hdfs://10.62.82.21/tmp/words.txt")

當我跑我得到了應用程序的

+0

您是否爲同一臺計算機配置了多個IP? – Harman 2015-02-11 13:16:13

+0

實際上,我不知道,但如果我使用域名而不是IP,則會引發相同的異常。 – Fanooos 2015-02-11 13:18:44

+0

當你啓動ifconfig時,你會看到什麼 – Harman 2015-02-12 06:02:27

回答

6

檢查你的星火主日誌,你應該看到類似這樣的:

15/02/11 13:37:14 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:7077] 
15/02/11 13:37:14 INFO Remoting: Remoting now listens on addresses: [akka.tcp://[email protected]:7077] 
15/02/11 13:37:14 INFO Master: Starting Spark master at spark://mymaster:7077 

然後你連接到主時,一定要準確使用相同的主機名在上面的日誌中找到(做不使用IP地址):

.setMaster("spark://mymaster:7077")); 

星火獨立是有點挑剔與此主機名/ IP的東西。

+0

機器有一個域名,如果我使用它而不是IP,則會拋出相同的異常。 – Fanooos 2015-02-11 13:19:24

+0

你檢查了主人的日誌嗎? – 2015-02-11 13:58:39

+0

另一個Spark獨立的缺陷是它充當點對點系統。您的客戶端/驅動程序應用程序必須可以由主人聯結。您可能已禁用防火牆設置並添加到您的SparkConf中: .set(「spark.driver.host」,「mydriverapp」) .set(「spark.driver.port」,「7076」) – 2015-02-11 16:57:38

4

當你使用shell命令「sbin目錄/ start-master.sh」創建星火主人。去地址http://localhost:8080並檢查「URL」行。

+0

這很好建議,同時在我今天的測試中,我發現如果URL顯示主機名,則無論如何都不會連接。只有當我設置一個設置(SPARK_MASTER_IP)並使用IP地址時,它纔會連接。 – JimLohse 2015-12-28 20:53:36

1

我注意到沒有接受的答案,只是爲了我想我會提到一些事情的信息。

首先,在conf目錄下的文件spark-env.sh的SPARK_MASTER_IP和SPARK_LOCAL_IP設置可以是主機名。你不想讓他們成爲,但他們可以。

正如另一個答案指出,星火可以大約主機名與IP地址有點挑剔,因爲這解決的bug /功能:See bug here。問題是,目前尚不清楚他們是否「解決」僅僅是告訴我們使用IP而不是主機名?

好吧,我現在有這個同樣的問題,你要做的第一件事是檢查的基礎知識。

你可以ping通Spark主機運行的盒子嗎?你可以從主人ping工人嗎?更重要的是,你可以通過主機箱向工作人員輸入無密碼的ssh嗎? Per 1.5.2 docs您需要使用私鑰來完成此操作,並讓工作人員輸入conf/slaves文件。我在最後複製了相關段落。

您可以得到一個情況,即工作人員可以聯繫主人,但主人無法返回工人,因此看起來沒有連接。檢查兩個方向。

最後所有的設置組合,在一個有限的實驗中,現在我只找到一個重要的:在主設備上,在spark-env.sh中,將SPARK_MASTER_IP設置爲IP地址,而不是主機名。然後從工作人員連接spark://192.168.0.10:7077,然後連接!貌似在這裏不需要其他配置參數。

下面是有關SSH和奴隸的文檔段落文件中的conf:

要啓動星火獨立集羣的啓動腳本,你 應該創建一個名爲CONF文件/在你的星火目錄奴隸,其中 必須包含您打算 啓動Spark worker的所有機器的主機名,每行一個。如果conf/slave不存在,則 啓動腳本默認爲一臺機器(localhost), 對測試有用。請注意,主機通過ssh訪問每個 工作機。默認情況下,ssh並行運行,並且 要求設置無密碼(使用私鑰)訪問權限。如果 您沒有無密碼設置,則可以設置環境 變量SPARK_SSH_FOREGROUND併爲每個 工作人員連續提供一個密碼。

一旦你這樣做了,使用IP地址應該在你的代碼中工作。讓我們知道!這可能是一個令人討厭的問題,並且瞭解大多數配置參數並不重要,這很好。