查询 Amazon EMR 日志 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询 Amazon EMR 日志

Amazon EMR 和 Amazon EMR 上运行的大数据应用程序会生成日志文件。日志文件写入主节点,您还可以配置 Amazon EMR 以将日志文件自动存档到 Amazon S3。您可以使用 Amazon Athena 查询这些日志,以确定应用程序和集群的事件和趋势。有关 Amazon EMR 中的日志文件类型以及将其保存到 Amazon S3 中的更多信息,请参阅查看日志文件中的Amazon EMR 管理指南.

基于 Amazon EMR 日志文件创建和查询基本表

以下示例基于保存到的 s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/elasticmapreduce/ 日志文件创建基本表 myemrlogs。以下示例中使用的 Amazon S3 位置反映了 Amazon Web Services 账户创建的 EMR 集群的默认日志位置的模式。123456789012在区域us-west-2. 如果您使用自定义位置,则模式为 s3://PathToEMRLogs/ClusterID

有关创建分区表以潜在改善查询性能和减少数据传输的信息,请参阅 基于 Amazon EMR 日志创建和查询分区表

CREATE EXTERNAL TABLE `myemrlogs`( `data` string COMMENT 'from deserializer') ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'

以下示例查询可以在上一示例创建的 myemrlogs 表上运行。

例 — 查询步骤日志以查找出现的 ERROR、WARN、INFO、FATAL 或 DEBUG

SELECT data, "$PATH" FROM "default"."myemrlogs" WHERE regexp_like("$PATH",'s-86URH188Z6B1') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

例 — 查询特定实例日志 i-00b3c0a839ece0a9c 以查找 ERROR、WARN、INFO、FATAL 或 DEBUG

SELECT "data", "$PATH" AS filepath FROM "default"."myemrlogs" WHERE regexp_like("$PATH",'i-00b3c0a839ece0a9c') AND regexp_like("$PATH",'state') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

例 — 查询 Presto 应用程序日志以查找 ERROR、WARN、INFO、FATAL 或 DEBUG

SELECT "data", "$PATH" AS filepath FROM "default"."myemrlogs" WHERE regexp_like("$PATH",'presto') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

例 — 查询 Namenode 应用程序日志以查找 ERROR、WARN、INFO、FATAL 或 DEBUG

SELECT "data", "$PATH" AS filepath FROM "default"."myemrlogs" WHERE regexp_like("$PATH",'namenode') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

例 — 按日期和小时查询所有日志以查找 ERROR、WARN、INFO、FATAL 或 DEBUG

SELECT distinct("$PATH") AS filepath FROM "default"."myemrlogs" WHERE regexp_like("$PATH",'2019-07-23-10') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

基于 Amazon EMR 日志创建和查询分区表

这些示例使用相同的日志位置创建 Athena 表,但对表进行了分区,然后为每个日志位置创建一个分区。有关更多信息,请参阅分区数据

以下查询将创建名为 mypartitionedemrlogs 的分区表:

CREATE EXTERNAL TABLE `mypartitionedemrlogs`( `data` string COMMENT 'from deserializer') partitioned by (logtype string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'

然后,以下查询语句基于 Amazon S3 中创建的不同日志类型的子目录创建表分区:

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='containers') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/containers/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-mapreduce') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-mapreduce/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-state-pusher') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-state-pusher/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='node') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/node/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='steps') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/steps/'

创建分区后,您可以在表上运行 SHOW PARTITIONS 查询以确认:

SHOW PARTITIONS mypartitionedemrlogs;

以下示例演示对特定日志条目的查询使用由上述示例创建的表和分区。

例 — 查询容器分区中的应用程序 _1516181818181818182388_0002 日志以查找 ERROR 或 WARN

SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='containers' AND regexp_like("$PATH",'application_1561661818238_0002') AND regexp_like(data, 'ERROR|WARN') limit 100;

例 — 查询 Hadoop-Mapreduce 分区以查找作业作业 _1516161661661818181818181818181818181818181818181818181818181818181818181818181818

SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='hadoop-mapreduce' AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;

例 — 查询节点分区中的 Hive 日志以查找查询 ID 056e0609-33e1-46e1-461b42d2663

SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='node' AND regexp_like("$PATH",'hive') AND regexp_like(data,'056e0609-33e1-4611-956c-7a31b42d2663') limit 100;

例 — 查询节点分区中的资源管理器日志以查找应用程序 1567660019320_0001_01_0001

SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='node' AND regexp_like(data,'resourcemanager') AND regexp_like(data,'1567660019320_0001_01_000001') limit 100