作者:周鹏辉
文档编写目的CDH集群在业务高峰的时候,偶尔会出现Hive 查询慢的现象,本文通过分析Hive出现查询慢时候的集群状态,查找导致Hive查询慢的原因。
文档概述
1.异常现象
2.异常分析
3.总结
生产环境
1.CDH和CM版本:CDH5.15.1和CM5.15.1
2.集群启用Kerbeos+OpenLDAP+Sentry
异常现象1.10月14日14:40左右,业务反应集群Hive查询慢,然后查看各租户资源池空闲。为了确认导致当时集群查询慢的原因,进行了如下测试。使用hive用户root.default资源池提交如下query,发现确实响应慢,selectcount(*)一个81行数据的表耗时2分钟。
select count(*) from cor_credit_id ;
application_1600315084574_2190734
2.查看此时HiveServer2压力不大
异常分析3.1 HiveServer2和YARN层面分析
1. 首先我们先看 query 在 HiveServer2中的运行情况:
1). Query提交时间是 14:45:
2020-10-14 14:45:29,547 INFO org.apache.hadoop.hive.ql.Driver: [HiveServer2-Handler-Pool: Thread-21234249]: Compiling command(queryId=hive_20201014144545_5b55640c-a133-43f3-a34b-1afedde1e271): select count(*) from cor_credit_id
2). Query很快完成编译,提交到编译完成耗时毫秒级别完成:
2020-10-14 14:45:29,752 INFO org.apache.hadoop.hive.ql.Driver: [HiveServer2-Handler-Pool: Thread-21234249]: Completed compiling command(queryId=hive_20201014144545_5b55640c-a133-43f3-a34b-1afedde1e271); Time taken: 0.205 seconds
3). Query 很快进入后台执行:
2020-10-14 14:45:29,764 INFO org.apache.hadoop.hive.ql.Driver: [HiveServer2-Background-Pool: Thread-21432574]: Executing command(queryId=hive_20201014144545_5b55640c-a133-43f3-a34b-1afedde1e271): select count(*) from cor_credit_id
4).接下来 HiveServer2相当于要执行 hadoop jar命令, 因为需要上传所有与此 Query 有关的依赖文件(比如至少有 hive-exec.jar、 还有所有的UDF jar 文件)到HDFS,这一步到最后向 YARN 提交作业花了几乎 1 分半钟的时间。
2020-10-14 14:45:30,066 WARN org.apache.hadoop.mapreduce.JobResourceUploader: [HiveServer2-Background-Pool: Thread-21432574]: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
...
2020-10-14 14:46:52,914 WARN org.apache.hadoop.hdfs.DFSClient: [HiveServer2-Background-Pool: Thread-21432574]: Slow waitForAckedSeqno took 39371ms (threshold=30000ms). File being written: /user/hive/.sta