前言
大家好,我是明哥!
大数据作业异常的排查,往往是个比较棘手的问题。这一方便是因为分布式作业的执行往往需要跨多个网络节点进行通信比较复杂,另一方面也是因为涉及底层框架多(spark, hive, flink, hdfs, hbase, kafka, yarn,zookeeper 等等),排查人员对这些组件各自的运行机制以及组件之间如何交互配合完成最终作业的机制不甚明了,再加上整个作业的执行涉及到各种日志且这些日志散落于集群多个节点多个目录,如何根据时间线跟踪排查各处日志,还原作业执行发生异常时底层究竟发生了什么原因是什么,相比传统的作业异常的排查确实更加困难些。
但正所谓会者不难难者不会,只要大家日积月累勤修内功掌握各个组件的底层原理和运行机制,再加上勤学苦练多多实操查看异常时的各处日志并定期归纳整理,相信大家排查相关问题会越来越得心顺手,成为一名合格的“排坑”专家!在此分享一次真实项目中hive sql作业的异常排查经验,供大家学习参考。
问题现象
某大数据业务系统在每日日终清算环节,会采集上游业务系统rdbms中的业务数据到Hive中,进行hive sql离线计算,然后推送结果数据到下游系统的rdbms中。这些数据采集和推送作业,偶尔会执行失败,此时业务端会收到如下SocketTimeoutException异常:
java.sql.SQLException:org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutException: Read timed out atorg.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:262)
有的作业还会有个被抑制的异常:Suppressed:java.sql.SQLException: Error while cleaning up the server resources atorg.apache.hive.jdbc.HiveConnection.close(HiveConnection.java:595) Caused by:org.apache.thrift.TApplicationException: CloseSession failed: o