使用spark-submit提交到的各个模式

使用spark-submit提交到yarn上遇到的第三方jar包的问题

spark-submit on yarn cluster can’t use third-party libraries


本地运行jar包方式

spark@host1$ java -cp exmple1.jar:exmple2.jar:....:yourApplication.jar  com.test.YourMainClass

这里使用”:”分割

spark local 模式运行application

spark@host1$ spark-submit \
--master local \ 
--jars exmple1.jar,exmple2.jar \ #这里配置jars
--class com.test.YourMainClass \
target/yourApplication.jar

这里使用”,”分割

与local模式一样yarn-client模式提交

spark@host1$ spark-submit \
--master yarn \ 
--deploy-mode client \
--jars exmple1.jar,exmple2.jar \
--class com.test.YourMainClass \
target/yourApplication.jar

使用yarn-cluster模式提交

重点来了,再yarn-cluster模式下怎么提交第三方jar包呢?
经过测试发现,使用上面client的同样的方式提交application是不行的。
原因是client模式下程序driver是在本机的所以,程序运行时可以在本地找到依赖的jar包。
而再cluster模式下driver所在的机器是由yarn随机分配的,所以当分配的机器不是本地机器时,程序将会找不到所需要的jar包而出错。当然如果你运气足够好,正好yarn分配的driver是再本机的node,就不会出错。

如何避免这种问题呢?
一种方法是把你需要的第三方jar包在所有的Slave节点的相同路径下都放一份。
当然这个方法在集群规模较大的情况下不太现实。
另一种方法就是把jar包放在hdfs等分布式文件系统中,保证所有的节点都能拿到这些jar包。

spark@host1$ spark-submit \
--master yarn \
--deploy-mode cluster\
--jars hdfs://myApplication/exmple1.jar,hdfs://myApplication/exmple2.jar \
--class com.test.YourMainClass \
target/yourApplication.jar

关于为何使用client模式可以提交的方式,却不能在cluster模式运行的bug,有人在issues.apache.org反映过这个情况,最后官方的回复说不会修复,不按bug处理关闭了这个问题,具体如下:

https://issues.apache.org/jira/browse/SPARK-10789

有什么问题欢迎留言一起讨论。

参考文献

http://blog.csdn.net/a95473004/article/details/53886010
http://spark.apache.org/docs/latest/submitting-applications.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值