在我们的环境中,我们有许多用户使用不同的工具发出Hive查询。很多时候,用户会给我们一个查询,并说它在一定时间内失败了,我们需要深入研究并找到原因。 因此,我们需要解析配置单元日志并找到查询。
查找查询是比较容易的部分,一旦在蜂巢日志中找到查询(通常在执行命令一词之后),有没有一种方法可以轻松找出,如何轻松获取与之关联的yarn application ID? / p>
我正在尝试使这一过程自动化,以便减少分析时间。
谢谢
答案 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)
我实际上找到了一种方法来做到这一点。有几个步骤
我有一个脚本来跟踪日志文件。这样做的原因是为了去掉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%'
现在获取 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 是可选的,我添加它是因为我们有一个运行一系列此类命令的进程。