如何使用日志解决 Amazon EMR 中的 Hive 查询问题?

2 分钟阅读
0

我在 Amazon EMR 中遇到 Apache Hive 查询问题。我想要收集日志以便解决这些问题。

简短描述

Amazon EMR 支持 Hive 的以下使用方法。故障排除步骤因您使用的方法而异:

解决方法

Hive Shell

Hive 日志存储在集群的主节点上的以下目录中。有关更多信息,请参阅查看主节点上的日志文件

  • /mnt/var/log/hive/
  • /mnt/var/log/hive/user/

根据您提交 Hive 查询的位置,您的查询日志记录在 Amazon EMR 主节点的 /mnt/var/hive/ 下的不同位置。此位置下的日志也会推送到您在创建 Amazon EMR 集群时配置的 Amazon S3 LogUri

示例:

s3://example-location/example-cluster-id/node/example-instance-id/applications/hive

例如,如果您从 Hive Shell 以 hadoop(默认用户)身份运行查询,则查询错误都将记录在以下目录中:

[hadoop@ip-172-xx-xx-x ~]$ cd /mnt/var/log/hive/user/hadoop
[hadoop@ip-172-xx-xx-x hadoop]$ tail -20 hive.log

Hue、JDBC 或 ODBC

HiveServer2 允许 Beeline、JDBC、ODBC(例如通过 SQL Workbench/J)等客户端对 Hive 运行查询。

有关 HiveServer2 支持的客户端的更多信息,请参阅 Confluence 网站中的 HiveServer2 客户端

在以下情况下检查 hive-server2 日志中的错误:

  • 您需要对其中一个客户端提交的失败查询进行故障排查。
  • 您在使用 JDBC 或 ODBC 驱动程序从客户端连接到 Hive 时遇到问题。
[hadoop@ip-172-xx-xx-x ~]$ cd /mnt/var/log/hive/
[hadoop@ip-172-xx-xx-xxx hive]$ ls -ltr
total 52
-rw-r--r-- 1 hive hive 42 May 25 19:29 hive-server2.out
drwxrwxrwt 4 root root 30 May 25 19:29 user
-rw-r--r-- 1 hive hive 49075 May 25 19:29 hive-server2.log

[hadoop@ip-172-31-33-9 hive]$ tail -20 hive-server2.log

请注意,默认情况下,Amazon EMR 上的所有 Hive 查询都使用 TEZ 引擎。该查询可能会触发 YARN 应用程序。要排查 YARN 应用程序的故障,请参阅 YARN 容器日志。有关更多信息,请参阅本文中的 YARN 应用程序历史记录部分。

Amazon EMR 步骤

检查步骤日志,这些日志位于 /var/log/hadoop/steps/ 中。例如:

[hadoop@ip-172-xx-xx-x s-3C4CZ9G05FEAX]$cd /var/log/hadoop/steps/s-3C4CZ9G05FEAX
[hadoop@ip-172-xx-xx-x s-3C4CZ9G05FEAX]$ ls -ltr
total 12
-rw-rw-r-- 1 hadoop hadoop 0 May 25 21:09 syslog
-rw-rw-r-- 1 hadoop hadoop 1304 May 25 21:09 stdout
-rw-rw-r-- 1 hadoop hadoop 213 May 25 21:09 stderr
-rw-rw-r-- 1 hadoop hadoop 2589 May 25 21:09 controller

YARN 应用程序历史记录

查看和监控 YARN 应用程序详细信息的最简单方法是,首先打开 Amazon EMR 控制台。 然后,查看集群详细信息页面的 Application history(应用程序历史记录)选项卡。有关更多信息,请参阅查看应用程序历史记录

要查看运行 Hive 查询时在后台运行的 Tez 或 MapReduce 应用程序中是否发生错误,请检查 Amazon Simple Storage Service (Amazon S3) 上的 YARN 应用程序日志。有关更多信息,请参阅查看存档到 Amazon S3 的日志文件。例如:

$ aws s3 ls s3://aws-logs-223377617334-us-west-2/elasticmapreduce/j-3MCDUQO2MWNJ5/
                           PRE containers/
                           PRE node/
                           PRE steps/
$ aws s3 ls s3://aws-logs-223377617334-us-west-2/elasticmapreduce/j-3MCDUQO2MWNJ5/node/i-045d100a1fcd13ef2/
                           PRE applications/
                           PRE bootstrap-actions/
                           PRE daemons/
                           PRE provision-node/
                           PRE setup-devices/
$ aws s3 ls s3://aws-logs-223377617334-us-west-2/elasticmapreduce/j-3MCDUQO2MWNJ5/containers/application_123456789_0001/container_1527279117205_0001_01_000001/
2020-10-25 15:46:04 842 stdout.gz
2020-10-25 15:46:04 4089 syslog.gz

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI


相关信息

如何在 Hive 输出查询结果时解决 Amazon EMR 上的“OutOfMemoryError”Hive Java 堆空间异常?

Hive 集群错误

AWS 官方
AWS 官方已更新 2 年前