問題背景
spark是以客戶端的方式安裝的,並沒有啟動spark的mesos集群,這時候的spark就相當與hive客戶端。
以local模型和yarn-cluster方式提交任務,都能正確額執行,但是一yarn-client方式就卡在ACCEPTED
問題原因
在網上查了資料,都說是資源不夠用,需要調整yarn.scheduler.capacity.maximum-am-resource-percent從0.1改成0.5,但是我測試數據才幾k,集群內存128G,所以我直接排除了這個原因
后來想到,只有yarn-client方式失敗,那問題應該出來driver端。就查看了一下服務器的/etc/hosts,發現diver上有集群其他節點的IP等信息,但是其他節點沒有driver配置信息
導致driver能訪問到集群,但是集群其他節點訪問不了driver
所以local模式可以執行
yarn-cluster上可以執行,是因為客戶端只要把任務提交到yarn上,客戶端就沒有用了。
但是yarn-client方式,客戶端是充當了driver,driver需要一直和集群有通信,所以接收不到resouceManager的反饋。任務就一直卡住了
解決辦法:
有兩個方法:
1、在命令后面加上一個--conf spark.driver.host=$your_ip_address,后面直接填客戶端機器的IP地址就行
spark-submit \
--master yarn \
--deploy-mode client \
--num-executors 2 \
--executor-memory 1G \
--executor-cores 1 \
--conf spark.driver.host=192.168.72.129\
dmp_broadcast_data_day.py
2、在集群其他節點上都把driver服務器的IP加上去。