问题背景
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加上去。