spark 2.X 疑难问题汇总

当前spark任务都是运行在yarn上,所以不用启动长进程worker,也没有master的HA问题,所以主要的问题在任务执行层面。

作业故障分类

故障主要分为版本,内存和权限三方面。

  • 各种版本不一致
  • 各种内存溢出
  • 其他问题

版本不一致

#####1)java版本不一致
报错:java.lang.UnsupportedClassVersionError: com/immomo/recommend/RedisDao: Unsupported major.minor version 52.0
处理:该问题一般是spark的java版本与作业编译的java版本不一致,建议将本地java版本改为与spark一致的版本(目前集群是1.7.0_71)。
2)scala版本不一致
报错:

java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/
    JavaMirrors JavaMirror;
处理:该报错就是本地使用的scala版本与集群的不一致,建议把本地scala版本替换为集群版本scala 2.11.8

3) 本地jar包跟hdfs远程的不一致
报错:
local class incompatible: stream classdesc serialVersionID = -6965587383804958479374, local class serialVersionID = -2231952633394736947

4) spark版本不一致
报错:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.SparkContext.assertNotStopped()at org.apache.spark.sql.SparkSession.<init>(SparkSession.scala:80)
处理:检查bash和spark-env.sh中的SPARK_HOME,看是不是目标版本,如果不是就修改。这个问题在spark新老版本迁移中可能出现。

  1. hive metastore与spark的编译hive版本不一致(spark sql 插入语句失败)
    报错:
    Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to alter table. Invalid method name: 'alter_table_with_cascade' Caused by: org.apache.thrift.TApplicationException: Invalid method name: 'alter_table_with_cascade'
    解决方法:任务启动加参数 --conf spark.sql.hive.metastore.version=“0.14.0” --conf spark.sql.hive.metastore.jars=maven
    在hdfs上创建文件,并在SPARK_HOME/conf/hive-site.xml设置对应参数:hive.exec.stagingdir值为/tmp/hive/spark-${user.name}

该参数权限设置为777
这个maven涉及包有~/.m2 ~/.ivy2的jar文件
参考:https://discourse.looker.com/t/fixing-spark-default-metastore-and-hive-metastore-mismatch-issues-prior-to-looker-3-44/2123

内存问题

1)GC开销超过限制
报错:
java.lang.OutOfMemoryError: GC overhead limit exceeded at scala.collection.immutable.HashMap.scala.collection.immutable.HashMap makeHashTrieMap(HashMap.scala:175)
处理:分为两个角度,一是是检查代码,减少不必要的冗余,重用的RDD要序列化缓存,减少shuffle数据,加大并行度;二从参数配置看,加大executor内存,增加shuffle buffer缓存,但有时候也因为job写的太低效而出现无效。

2)空指针异常
报错:
java.lang.NullPointerException at com.immomo.recommend.recommend_molive anonfun 1.apply(recommend_molive.scala:83)
处理:该问题一般是代码中的,检查数组,对象内容是否可能为空;尤其是表数据,能有字段的值为null,但没有处理null,出现这个错误。</

  • 16
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值