从配置单元日志中获取给定查询的应用程序ID

时间:2018-07-26 04:11:48

标签: hadoop hive yarn

在我们的环境中,我们有许多用户使用不同的工具发出Hive查询。很多时候,用户会给我们一个查询,并说它在一定时间内失败了,我们需要深入研究并找到原因。 因此,我们需要解析配置单元日志并找到查询。

查找查询是比较容易的部分,一旦在蜂巢日志中找到查询(通常在执行命令一词之后),有没有一种方法可以轻松找出,如何轻松获取与之关联的yarn application ID? / p>

我正在尝试使这一过程自动化,以便减少分析时间。

谢谢

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您可以查看时间轴服务器其余API,甚至可以查看资源管理器API,而不是查看配置单元日志。从那时起,您应该能够获得查询列表和应用程序ID。

如果您正在使用Hortonworks,请查看Tez视图。它显示查询和应用程序ID。查看浏览器开发人员工具实际发生的情况,可以帮助您确定API调用的流程。我对Cloudera或MapR不够熟悉,无法知道在哪里查看。

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

答案 2 :(得分:0)

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

  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 并为查询 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 是可选的,我添加它是因为我们有一个运行一系列此类命令的进程。