Spark踩坑之旅

本文记录了Spark standalone模式下遇到的问题及解决方法,包括Zookeeper leader宕机导致的master故障、主备切换任务状态异常、CDH环境提交任务时的类冲突以及1.6版本accumulator引发的内存溢出问题,提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



1、Spark standalone 模式集群,使用zk作为服务状态一致性协调器,当zk leader宕机,spark master也跟着挂掉


问题描述:
zk leader宕机之后,spark master节点也出现宕机情况,spark standby master转换为master,若在宕机的master节点恢复健康之前zk leader又出现宕机,那么spark集群挂掉


解决方案:
1)、适当增加spark standby master
2)、编写shell脚本,定期检测master状态,出现宕机后对master进行重启操作




2、Spark standalone 模式集群主备切换后,备用master上任务状态由running变为waiting
问题描述:
当spark master宕机后,所有任务转移到备用的standby master上,转移完毕后发现master界面中之前running状态的任务现在全部变为waiting状态,但实际上该任务处于running状态


解决思路:
该问题属于spark状态检测BUG,升级到2.1版本后发现问题仍然存在。



3、CDH环境中提交spark任务报java.lang.IncompatibleClassChangeError:Implementing class
问题描述:
CDH环境中提交SPARK-STREAMING任务消费kafka数据,任务提交成功后消费到kafka数据时出现上述错误信息


解决方案:
经过排查确定该问题是由于spark在消费kafka数据时需要的kafka相关jar包版本与本身CDH环境已加载的kafka相关jar包版本不同,导致调用时引起类冲突。
在spark默认提交任务时使用classloader继承spark主线程classloader,修改loader默认的类加载策略,优先加载本地class,本地class找不到后再去寻找CDH环境中相关class,问题解决

4、spark1.6版本使用accumulator 时内存使用过大导致OOM问题
问题描述:
spark1.6版本测试过程中发现数据量比较大时内存消耗增加,查看进程内存使用逐步增长,长时间运行后出现OOM问题,2.0版本没有该问题,查看spark任务堆栈信息后发现
在spark缓存Task中存在任务分析后生成的数据没有释放,spark默认会缓存job,stage,task列表信息做缓存,而1.6版本中task会对accumulator数据做缓存并展示,导致内存使用量急剧增加


解决方案:
spark默认缓存的job=1000,stage=1000,task=10000个数为1000,修改降低三个参数缓存数量,减少内存使用,修改参数为提交spark任务时设置
--conf spark.ui.retainedJobs=50
--conf spark.ui.retainedStages=100
--conf spark.ui.retainedTasks=400
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值