spark 在yarn執行job時一直抱0.0.0.0:8030錯誤

近日新寫完的spark任務放到yarn上面執行時,在yarn的slave節點中一直看到報錯日誌:鏈接不到0.0.0.0:8030 。apache

1 The logs are as below:
2 2014-08-11 20:10:59,795 INFO [main] org.apache.hadoop.yarn.client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8030
3 2014-08-11 20:11:01,838 INFO [main] org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8030. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)

 

這就很奇怪了,由於slave執行任務時應該連接的是master節點的8030端口,正常狀況下應該爲 masterIP:8030.框架

按照常規思路,首先檢查配置文件:yarn-site.xml 。查看裏面配置的yarn.resourcemanager.scheduler.address 是否爲master。oop

<property>
     <name>yarn.resourcemanager.hostname</name>                      
     <value>master1</value>
</property>
<property>
     <name>yarn.resourcemanager.scheduler.address</name>                      
     <value>master1:8030</value>
</property>

這一項排查事後,重啓cluser,故障依舊。spa

繼續排查,查看環境變量,看是否slave啓動時是否沒有加載yarn-site.xml。env|grep YARN 直接查看全部YARN的環境變量,其中能夠看到YARN_CONF_DIR = HADOOP_CONF_DIR ,而且指向了正確的目錄路徑。日誌

那麼就很奇怪了,繼續排查。若是環境方面都沒有問題,寫一下 hard coding.在代碼裏面直接寫死:code

1 Configuration conf = new Configuration();  
2 conf.set("fs.default.name",hdfsUri);  
3 conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");  
4 conf.set("mapreduce.framework.name", "yarn");  
5 conf.set("fs.AbstractFileSystem.hdfs.impl", "org.apache.hadoop.fs.Hdfs");  
6 conf.set("yarn.resourcemanager.address", yarnip+":"+8030); //設置RM 訪問位置  

從新執行job,仍然報錯。這下就有點暈菜了,冷靜一下,目前已經排查的有:server

一、配置文件:master、slave的yarn-site.xml 都正常無問題。xml

二、環境變量:master、slave的環境變量都正常無問題。blog

三、hard-coding,也無效果。ip

難道是框架本省的問題?

在spark根目錄檢索0.0.0.0,發如今spark依賴的一個包裏面還真有一個匹配的:

spark-core-assembly-0.4-SNAPSHOT.jar

打開這個jar包,裏面有一個yarn-default.xml 。這裏面配置的是0.0.0.0. 按道理來講配置文件優先級應該是大於jar的。

改了試一下!

把0.0.0.0改爲master的IP,從新打包上傳,執行job。

Oh my god!

成功了!

看看時間,爲了這個問題已經搞了大半個夜了。算了,先睡覺。具體問題留待週一檢查。

但初步認爲:應該是yarn的client再執行job時,會取一個masterIP 值,若是取不到,則默認取yarn-defalut中的值。因此關鍵就是找到從哪裏取值。這個問題看看源碼應該不是大問題。

OK,睡覺去!

相關文章
相關標籤/搜索