前些天Hive查询的接口一直超时报警,登录上去查看发现这个超时报警的曲线很有规律,每个小时开始就出现,过了大约3分钟左右就好了.在这个期间里,也发现hive根本就执行不了,完全hang住了,机器负载,HDFS,Jobtracker的负载响应都完全正常!
立刻查看下日志发现几点:
1.对比其他时间的同一个job发现两个时间点的上传job文件到hdfs以及mapreduce的执行时间完全一致,也就是说排除了hdfs,jobtracker的问题
2.出问题时,hive的执行基本阻塞在Initialized ObjectStore部分
那么基本猜想就是MySQL出问题了,查看MySQL的监控日志发现果然每到这个时间点都会出现highsession,找到一个时间点用percona的工具分析了一下slow log发现了最终的元凶:
原来是每个整点都会执行一次backup,但是在backup之前会有一个分析的query也在跑(cron),mysqldump在backup之前会先进行flush table,但是由于那个long running query在导致flush table一直在等待,从而导致后来的所有操作都在waitingfor flushing table.
找到原因就好办了,把备份迁移到从库,另外优化那个long running query,解决.
本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1367256,如需转载请自行联系原作者