

# Amazon EMR ログをクエリする
<a name="emr-logs"></a>

Amazon EMR と、Amazon EMR で実行されるビッグデータアプリケーションは、ログファイルを生成します。ログファイルは[プライマリノード](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html)に書き込まれます。ログファイルを自動的に Amazon S3 にアーカイブするように Amazon EMR を設定することもできます。Amazon Athena を使用してこれらのログをクエリし、アプリケーションとクラスターのイベントと傾向を特定することができます。Amazon EMR のログファイルのタイプと、それらの Amazon S3 への保存に関する詳細については、「Amazon EMR マネジメントガイド」の「[ログファイルを表示する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)」を参照してください。

**Topics**
+ [Amazon EMR ログファイルに基づいて、基本的なテーブルを作成およびクエリする](emr-create-table.md)
+ [Amazon EMR ログに基づいて、パーティショニングされたテーブルを作成およびクエリする](emr-create-table-partitioned.md)

# Amazon EMR ログファイルに基づいて、基本的なテーブルを作成およびクエリする
<a name="emr-create-table"></a>

以下の例は、`s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/elasticmapreduce/` に保存されたログファイルに基づいて、基本的なテーブル `myemrlogs` を作成します。以下の例で使用されている Amazon S3 の場所は、リージョン *us-west-2* で Amazon Web Services アカウント *123456789012* によって作成された EMR クラスターのデフォルトでのログの場所のパターンを反映しています。カスタムの場所を使用する場合、パターンは s3://amzn-s3-demo-bucket/*ClusterID* です。

パーティション化されたテーブルを作成してクエリのパフォーマンスを向上させ、データ転送を削減できる可能性のある方法については、「[Amazon EMR ログに基づいて、パーティショニングされたテーブルを作成およびクエリする](emr-create-table-partitioned.md)」を参照してください。

```
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'
```

## クエリの例
<a name="emr-example-queries-basic"></a>

次の例のクエリは、前の例で作成した `myemrlogs` テーブルに対して実行できます。

**Example – ERROR、WARN、INFO、EXCEPTION、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;
```

**Example – ERROR、WARN、INFO、EXCEPTION、FATAL、または DEBUG に関する特定のインスタンスログ i-00b3c0a839ece0a9c のクエリ**  

```
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;
```

**Example – ERROR、WARN、INFO、EXCEPTION、FATAL、または DEBUG に関する Presto アプリケーションログのクエリ**  

```
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;
```

**Example – ERROR、WARN、INFO、EXCEPTION、FATAL、または DEBUG に関する Namenode アプリケーションログのクエリ**  

```
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;
```

**Example – ERROR、WARN、INFO、EXCEPTION、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 ログに基づいて、パーティショニングされたテーブルを作成およびクエリする
<a name="emr-create-table-partitioned"></a>

これらの例は、Athena テーブルを作成するためのものと同じログの場所を使用しますが、テーブルがパーティション分割された後、パーティションがログの場所ごとに作成されます。詳細については、「[データのパーティション化](partitions.md)」を参照してください。

次のクエリは、`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 で Amazon EMR が作成する異なるログタイプのサブディレクトリに基づいて、テーブルパーティションを作成します。

```
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;
```

## クエリの例
<a name="emr-example-queries-partitioned"></a>

以下の例は、上記の例で作成されたテーブルとパーティションを使用する特定のログエントリに対するクエリを示しています。

**Example – ERROR または WARN に関するコンテナパーティション内のアプリケーション application\$11561661818238\$10002 ログのクエリ**  

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

**Example – ジョブ job\$11561661818238\$10004 と Failed Reduces に関する Hadoop-Mapreduce パーティションのクエリ**  

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

**Example – クエリ ID 056e0609-33e1-4611-956c-7a31b42d2663 に関するノードパーティションでの Hive ログのクエリ**  

```
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;
```

**Example – アプリケーション 1567660019320\$10001\$101\$1000001 に関するノードパーティションでの Resourcemanager ログのクエリ**  

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