更新时间:2024-07-24 GMT+08:00

Hive SQL运行变慢阶段如何排查

场景说明

对于一个Hive SQL任务,如果运行时间突然变长,可能有多种原因造成,如HiveServer编译变慢、访问HDFS变慢、访问Yarn变慢或访问元数据变慢。

操作步骤

以下为Hive SQL在哪个阶段执行变慢的排查方法:

  • HiveServer编译变慢

    查看HiveServer审计日志“/var/log/Bigdata/audit/hive/hiveserver/hive-audit.log”,搜索运行的SQL,如图1的SQL为“show databases”,过滤线程名包含“HiveServer2-Handler-Pool”的两条记录,第一条记录为开始编译时间,第二条记录为结束编译时间。 根据SQL变慢前后的审计记录可判断是否是HiveServer编译变慢。

    图1 HiveServer正在运行的SQL
  • 访问HDFS变慢
    • 方法一:

      查看HiveServer运行日志“/var/log/Bigdata/hive/hiveserver/hive.log”,搜索运行的SQL对应的线程日志,再搜索number of splits日志,如果该日志前后间隔时间较长,则表示访问HDFS变慢。

    • 方法二:

      通过打印HiveServer进程jstack,查看相关线程是否卡顿在访问HDFS部分,是的话则表示访问HDFS变慢。

    • 方法三:

      查看HDFS RPC监控,看是否在SQL运行变慢期间HDFS RPC异常升高,是的话则大概率是访问HDFS变慢。

  • 访问Yarn变慢

    查看HiveServer运行日志“/var/log/Bigdata/hive/hiveserver/hive.log”,搜索运行的SQL对应的线程日志,再搜索Kill Command日志,如果该日志后面间隔较长时间才打出下一行日志,则表示访问Yarn变慢。

  • 访问元数据变慢

    在FusionInsight Manager界面,选择“集群 > 服务 > Hive > 实例 > 任一MetaStore实例 > 图表”,在“图表分类”选择“操作统计”,查看“create_table API元数据操作耗时情况”和“add_partitions_req api执行情况”等监控,看SQL运行慢是否是因为MetaStore访问变慢。