大数据Hive任务异常快速排查方案

大数据Hive任务异常快速排查方案

背景

女娲云平台每天产生的业务数据都会由大数据部门采集清洗并呈现数据报表,标签数据等。大数据平台任务调度框架使用开源项目Azkaban,其简单易用的特点广受中小团队喜爱,服务器依托于腾讯云EMR,在数据清洗层,对数据量较大,实时性要求不高的离线任务使用Hive计算 + HDFS存储的经典组合,展现层结果数据存储于Clickhouse,保证了海量数据的存储与计算,对一些数据量较小且实时性要求高的业务使用Presto即时计算框架+Metabase开源BI快速呈现。数以百计的离线任务按小时、天等周期不间断运行,中间发生异常后需要快速定位并解决,不能影响业务方使用,本文结合数据开发日常经验提供快速解决方案。

注:以下示例为UAT测试环境

1、发现异常

  • 查看azkaban任务运行记录,发现任务运行卡顿,状态长时间在running中(图中是强制中止后转为Killed状态)

  • 新启动的hive任务无法运行,一直在等待调度

2、定位异常

2.1 查看错误日志

  • 内存不足异常

java.lang.OutOfMemoryError: Java heap space

  • 动态分区未设置异常

Error while compiling statement: FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

  • ParseException一般为SQL语法问题

Error while compiling statement: FAILED: ParseException line 1:17

2.2 查看EMR机器资源是否异常

2.3 查看YARN内存、cpu核是否充足

Memory Total:总可使用内存
Memory Used: 已使用内存,发现异常时若看到这里的值与Memory Total值一样,说明YARN内存不足,任务堵塞
Vcores Total:总可使用cpu核数

Vcores Used:已使用cpu核数,发现异常时若看到这里的值与Vcores Total值一样,说明YARN核数不足,任务堵塞

3、解决异常

3.1 常见异常

  • SQL语法错误

开发时在测试环境多跑几遍,借助HUE可视化工具、hive终端等多测试能否正常运行

  • 任务内存不足

SET mapred.child.java.opts=-Xms1024M,同时对Map和Reduce端设置,任务启动默认申请内存200M,报内存不足异常时可以在默认值基础上提高设置,再调试任务能否正常运行

  • 没设置分区参数,设置参数解决

SET hive.exec.dynamic.partition.mode=nonstrict;

SET hive.exec.max.dynamic.partitions = 3000;

SET hive.exec.max.dynamic.partitions.pernode=3000;

3.2 EMR机器内存不足

先查看同机器是否还有其他应用占用内存过高,如果没有只能提高机器配置,通过观察分析EMR机器不止有Hive离线程序,还有Presto即席查询程序在运行,最高会占用到30~40%机器内存(JVM机制导致),这时候会选择把presto重启一下释放占用内存

3.3 YARN资源不足

  • 临时解决方案,杀死所有运行堵塞的任务

    • for i in  `yarn application  -list | awk '{print $1}' | grep application_`; do yarn  application -kill $i; done
  • 排查是否有大任务占用了大量资源,大任务是否有数据发散,是否全量数据更新任务,是的话能否改成增量更新任务,针对性逐个优化

  • 实在不行就提高机器内存配置

总结

大数据部门目前可支配机器内存170G左右,Hive单表最大量2~3亿,同一周期内运行任务数较多,有时会发生YARN资源内存不足、机器内存不足、机器磁盘不足、任务堵塞等线上问题,快速解决线上问题的同时,要从长远考虑治标治本的问题,任务编排是否合理、任务调度频率是否要这么快、开发流程是否有漏洞、修复后数据质量是否受到影响,综合考虑机器成本和任务资源利用最大化之间的平衡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章