【问题标题】:Get application id from hive log for given query从配置单元日志中获取给定查询的应用程序 ID
【发布时间】:2018-07-26 04:11:48
【问题描述】:

在我们的环境中,我们有许多用户从不同的工具发出 Hive 查询。很多时候用户会给我们一个查询,说它在某个时间左右失败,我们需要挖掘并找到原因。 所以我们需要解析 hive 日志并找到查询。

查找查询是比较容易的部分,有没有办法在 hive 日志中找到查询后(通常在执行命令之后),如何轻松获取与之关联的 yarn 应用程序 ID?

我正在尝试自动化这个过程,以便缩短分析时间。

谢谢

【问题讨论】:

    标签: hadoop hive hadoop-yarn


    【解决方案1】:

    您可以做的一件事是,您可以使用yarn application -list -appStates ALL 命令。它的作用是,它将为您提供所有应用程序的列表以及它们各自的应用程序 ID、名称、用户、状态、跟踪 url 等。因此您可以深入了解您需要的内容。您甚至可以指定状态,例如您需要哪些状态数据:- yarn application -list -appStates FINISHED 将显示所有状态为已完成的记录。

    【讨论】:

      【解决方案2】:

      不是一个完整的答案,但它可以帮助您入门。

      您可以查看时间线服务器休息 API,也可以查看资源管理器 API,而不是查看配置单元日志。从那时起,您应该能够获得查询列表和应用 ID。

      如果您使用的是 Hortonworks,请查看 Tez 视图。它显示查询和应用程序 ID。查看浏览器的开发人员工具实际发生的情况有助于了解 API 调用的流程。我对 Cloudera 或 MapR 不够熟悉,不知道该去哪里看。

      此选项的优点是它可以远程完成,并且可以更优雅地处理 HA,因为它不需要直接在您的 Hive 服务器上运行

      【讨论】:

        【解决方案3】:

        我实际上找到了一种方法来做到这一点。有几个步骤

        1. 我有一个跟踪日志文件的脚本。这样做的原因是为了去掉SQL语句中的回车。我会把它放在底部,但基本上只是在 /opt/mapr/hive/hive-2.3/logs/mapr/mapr-hiveserver2-*.log 上做 tail 并寻找“执行命令”。 (我相信你已经这样做了)。例如,我得到这个:

          2021-01-21T15:43:21,836 INFO [HiveServer2-Background-Pool: Thread-4024376] ql.Driver: Executing command(queryId=mapr_20210121154321_abfc0235-571f-44dd-961c-521064c8d163): SELECT COUNT(*) FROM prod.statsman WHERE dt = '20210101' AND oid like 'qos.8%'

        2. 现在获取 queryId 并 grep 查询 id 和“提交 dag 到 TezSession”的相同文件。从这里你可以找到你的application_id

           cat /opt/mapr/hive/hive-2.x/logs/mapr/mapr-hiveserver2-*.log | grep mapr_20210121154321_abfc0235-571f-44dd-961c-521064c8d163 | grep "Submitting dag to TezSession"
          
           2021-01-21T15:43:21,952  INFO [HiveServer2-Background-Pool: Thread-4024376] client.TezClient: Submitting dag to TezSession, sessionName=HIVE-bd39c7da-7041-4fff-ab51-9d0bac18178e, applicationId=application_1607034625968_103472, dagName=SELECT COUNT(*) FROM prod.statsma...'qos.8%'(Stage-1), callerContext={ context=HIVE, callerType=HIVE_QUERY_ID, callerId=mapr_20210121154321_abfc0235-571f-44dd-961c-521064c8d163 }
          

        注意:为了跟踪日志文件,我将此 perl 代码创建为 stripcrlf.pl

        #!/usr/bin/perl
        
        use strict;
        use warnings;
        
        while(<>) {
          my $line = $_;
          $line =~ s/\r\n/ /g;
          print $line;
        }
        

        然后这是尾日志文件

        tail -f /opt/mapr/hive/hive-2.x/logs/mapr/mapr-hiveserver2-*.log | ./stripcrlf.pl | grep "Executing command" | grep -viP "show partitions|describe |analyze table|show schemas|create external|desc "
        

        grep -viP 是可选的,我添加它是因为我们有一个运行大量此类命令的进程。

        【讨论】:

          猜你喜欢
          • 2020-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 1970-01-01
          相关资源
          最近更新 更多