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

上次更新时间:2020 年 12 月 3 日

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

简短描述

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

解决方法

Hive Shell

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

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

所有与查询相关的错误都记录在 /mnt/var/log/hive/user/ 目录中。例如,如果您从 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

如果以 root (sudo) 身份从 Hive Shell 运行查询,请检查以下日志中是否存在查询错误:

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

Hue、JDBC 或 ODBC

HiveServer2 允许 Beeline 或 SQL Workbench/J 等客户端对 Hive 运行查询。有关更多信息,请参阅 Hive 网站上的 HiveServer2 概览。如果您在使用 JDBC 或 ODBC 驱动程序从客户端连接到 Hive 时遇到问题,请检查 hive-server2 日志中的错误:

[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

您可以使用 hive-server2 日志还可用于解决与服务相关的问题,例如查询速度慢、HiveServer2 启动失败、查询提交问题等。

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