记一次Spark任务Driver端问题排查

记一次Spark任务Driver端问题排查

Spark任务提交Client模式报错找不到依赖,换成Cluster模式就乖乖听话了,这问题其实很简单。

一、问题出现

这次是给某运营商的新项目,客户提供了两个集群分别用于测试和生产,运维组搭建好大数据集群环境后,我们开始安排部署前后台及大数据分析程序。

因为当前的程序版本此前在多个集群有过部署,所以按部就班直接放上所有文件,调整好conf配置,脚本启动……就是这么简单的一个流程,却出了一个摸不着头脑的问题。

众所周知,Spark提交任务分两种模式——cluster和client,两种的区别后头我再单独写一篇文章说明,在这里出现的问题就和这个知识相关了。

首先是以默认的client模式提交运行,方便查看Driver端的日志,毕竟新环境可能会有水土不服的情况,结果是很快就迎来了报错:

请添加图片描述

二、问题排查

因为当时同时还在做别的事情,这边草草看了一眼简单判断没有加入–jars的参数,就感觉问题解决了,可是过了半天回头一看还是不行,依然报这个错。当时大脑有些短路,直接改了cluster模式运行,又过了挺久回头看了一眼,发现竟然ok了。

到这里其实基本知道问题的根源,应该就是本地的环境出了问题,spark任务提交后,本地的Driver程序使用的环境变量缺少了相关的依赖,但毕竟集群组件维护并不在我的管辖范围内,我还是请来了运维组的大佬帮忙排查。

大佬先逐步排查了基本配置,表示配置项基本没问题;然后切换进spark的安装目录,找到jars目录查看里面的文件,果然是没有需要的jdbc的包,问题到这也就算是定位到了根本原因。

三、解决及后话

把需要用到的jar包拖进spark的jars里面之后,任务正常运行没有出现过问题,但其实这里有个问题,如果有很多依赖,需要把它们都拖到spark的安装目录下吗?听起来不太合理,但其实spark运行时可以通过参数指定环境变量,示例如下:

spark.driver.extraClassPath=/path/to/driver/classpath:${SPARK_HOME}/jars/*
spark.executor.extraClassPath=/path/to/executor/classpath:${SPARK_HOME}/jars/*

使用这两个参数,就可以灵活控制spark的环境变量,但不太建议小白这么操作,因为可能会带来别的问题,比如丢失了部分原有的环境变量。。。

如果有其它方法可以解决,欢迎评论区沟通哟!~

20210601 补充
儿童节快乐!
近期又出现这个问题,而且上述手段不能解决,于是又探索到一个新的知识
因为部署环境为yarn,所以排除上述可能性之后,我把目光放在了yarn身上,果然找到了一个运行环境调用的lib文件夹:

/path/to/yarn/share/hadoop/yarn/lib

小伙伴需要把‘path/to/yarn’更换成真实的yarn路径,然后把需要用到的依赖包放进去,就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值