spark常见异常汇总
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
温馨提示:
如果开发运行spark出现问题啦,可能需要运维这边做一些调优,也可能是开发那边需要修改代码。到底是啥情况,我们可以通过yarn命令查看spark运行的日志。有的报错运维是不需要处理的,直接把报错贴个开发,让他们自己去处理就好啦!如果你只是运维的话只需要负责集群的稳定运行就OK。当然你能帮助开发把问题解决掉就再好不过啦~。本片博客会把我生产环境中遇到的spark相关问题以及解决方案进行分享。
查看spark日志的话,可以直接在yarn的wenUI界面直接查看相应的报错信息,不需要敲击任何命令行操作。如果你是基于Apache Hadoop版本部署的cdh需要你手动配置一些参数,详情请参考:https://www.cnblogs.com/yinzhengjie/p/9471921.html。当然如果你是基于CDH或者HDP方式部署的话,默认它以及帮你部署好啦。我生产环境用的是CDH版本,但是我并不喜欢使用web UI去查看任务。一般都是给开发去用webUI。我喜欢用命令行的方式查看各类日志。我们只需要在任意一台gateway机器上敲击(“yarn logs -applicationId application_1540295101685_61048 > logs.txt”)相应的命令即可查看日志。
一.org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /user/hive/warehouse/yingshi.db/op_sarrs_hour/......
1>.报错提示:
2>.报错原因
我百度了一下原因:提示为文件操作超租期,由于多个task操作写一个文件,其中某个task完成任务后删除了临时文件引起。该参数和“dfs.datanode.max.xcievers
”有关,默认为256。dfs.datanode.max.xcievers
表示每个datanode任一时刻可以打开的文件数量上限。
3>.解决方案
有两个解决方法:(1)修改spark代码,避免太高的并发度同时写一个文件。 所以在调用write.parquet前,先使用repartition合并碎片分区。因为减少了分区数,下次再读取这份数据进行处理时,减少了启动task的开销。(2)修改hdfs参数配置,提高同时写的上限。 在hdfs-site.xml中修改dfs.datanode.max.xcievers,将其设置为4096。
二.