

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Hive AWS のメタストアとしての Glue データカタログの使用
<a name="emr-hive-metastore-glue"></a>

Amazon EMR リリース 5.8.0 AWS 以降を使用して、 Glue データカタログをメタストアとして使用するように Hive を設定できます。永続的なメタストア、またはさまざまなクラスター、サービス、アプリケーション、あるいは AWS アカウントで共有されるメタストアが必要である場合は、この設定をお勧めします。

AWS Glue はフルマネージド型の抽出、変換、ロード (ETL) サービスで、データを簡単かつ費用対効果の高い方法で分類し、クリーンアップ、強化し、さまざまなデータストア間で確実に移動できます。 AWS Glue Data Catalog は、Amazon EMR、Amazon RDS、Amazon Redshift、Redshift Spectrum、Athena、および Apache Hive メタストアと互換性のある任意のアプリケーションと統合して、さまざまなデータソースとデータ形式にわたって統合されたメタデータリポジトリを提供します。 AWS Glue クローラは、Amazon S3 のソースデータからスキーマを自動的に推測し、関連するメタデータをデータカタログに保存できます。データカタログの詳細については、「 [Glue デベロッパーガイド AWS 」の「 Glue データカタログ](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html)の入力」を参照してください。 *AWS *

Glue AWS には個別の料金が適用されます。データカタログにメタデータを保存してアクセスするための月額料金、Glue ETL AWS ジョブとクローラランタイムに対して 1 分あたりに課金される時間料金、プロビジョニングされた開発エンドポイントごとに 1 分あたりに課金される時間料金があります。Data Catalog では、最大 100 万個までのオブジェクトを無料で保存できます。100 万を超えるオブジェクトを保存した場合は、100,000 オブジェクトごとに 1 USD が課金されます。Data Catalog 内のオブジェクトは、テーブル、パーティション、またはデータベースです。詳細については、「[Glue 料金表](https://aws.amazon.com/glue/pricing)」を参照してください。

**重要**  
2017 年 8 月 14 日より前に Amazon Athena または Amazon Redshift Spectrum を使用してテーブルを作成した場合、データベースとテーブルは AWS Glue データカタログとは別の Athena 管理カタログに保存されます。Amazon EMR をこれらのテーブルと統合するには、 AWS Glue データカタログにアップグレードする必要があります。詳細については、[「Amazon Athena ユーザーガイド」の「 AWS Glue データカタログへのアップグレード](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html)」を参照してください。 *Amazon Athena *

## AWS Glue データカタログをメタストアとして指定する
<a name="emr-hive-glue-configure"></a>

、、または Amazon EMR API を使用して AWS マネジメントコンソール AWS CLI、 AWS Glue データカタログをメタストアとして指定できます。CLI または API を使用する場合は、Hive の設定分類を使用して Data Catalog を指定します。さらに、Amazon EMR 5.16.0 以降では、設定分類を使用して別の でデータカタログを指定できます AWS アカウント。コンソールを使用する場合は、**[Advanced Options]** (詳細オプション) または **[Quick Options]** (クイックオプション) を使用して、Data Catalog を指定できます。

------
#### [ Console ]

**コンソールで AWS Glue データカタログを Hive メタストアとして指定するには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) で Amazon EMR コンソールを開きます。

1. 左側のナビゲーションペインの **[EMR on EC2]** で、**[クラスター]** を選択し、**[クラスターの作成]** を選択します

1. **[アプリケーションバンドル]** で **[Core Hadoop]**、**[HBase]**、または **[カスタム]** を選択します。クラスターをカスタマイズする場合は、必ず Hive または HCatalog をアプリケーションの 1 つとして選択しします。

1. **[AWS Glue Data Catalog 設定]** で **[Hive テーブルメタデータに使用]** チェックボックスをオンにします。

1. クラスターに適用するその他のオプションを選択します。

1. クラスターを起動するには、**[クラスターの作成]** を選択します。

------
#### [ CLI ]

**で AWS Glue データカタログを Hive メタストアとして指定するには AWS CLI**

 AWS CLI と EMR API を使用して設定分類を指定する方法の詳細については、「」を参照してください[アプリケーションの設定](emr-configure-apps.md)。
+ 次の例に示すように、`hive-site` 設定分類を使用して `hive.metastore.client.factory.class` の値を指定します。

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
      }
    }
  ]
  ```

  EMR リリースバージョン 5.28.0、5.28.1、5.29.0、または 6.x で、 AWS Glue データカタログをメタストアとして使用してクラスターを作成する場合は、 `hive.metastore.schema.verification`を に設定します`false`。これにより、Hive と HCatalog が MySQL に対してメタストアスキーマを検証できなくなります。この設定がない場合、プライマリインスタンスグループは Hive または HCatalog の再設定後に中断されます。

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false"
      }
    }
  ]
  ```

  EMR リリースバージョン 5.28.0、5.28.1、または 5.29.0 にクラスターが既に存在する場合は、次の情報を使用してプライマリインスタンスグループ `hive.metastore.schema.verification` を `false` に設定できます。

  ```
     
      Classification = hive-site
      Property       = hive.metastore.schema.verification
      Value          = false
  ```

  別の AWS アカウントでデータカタログを指定するには、次の例に示すように `hive.metastore.glue.catalogid`プロパティを追加します。`acct-id` は、データカタログの AWS アカウントに置き換えます。

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false",
        "hive.metastore.glue.catalogid": "acct-id"
      }
    }
  ]
  ```

------

## IAM アクセス許可
<a name="emr-hive-glue-permissions"></a>

クラスターの EC2 インスタンスプロファイルには、 Glue アクションの AWS IAM アクセス許可が必要です。さらに、 Glue Data Catalog オブジェクト AWS の暗号化を有効にする場合は、暗号化 AWS KMS key に使用される の暗号化、復号、生成もロールに許可する必要があります。

### Glue AWS アクションのアクセス許可
<a name="emr-hive-glue-permissions-actions"></a>

Amazon EMR の デフォルトの EC2 インスタンスプロファイルを使用する場合、アクションは必要ありません。にアタッチされている `AmazonElasticMapReduceforEC2Role`マネージドポリシーは、必要なすべての Glue AWS アクション`EMR_EC2_DefaultRole`を許可します。ただし、カスタム EC2 インスタンスプロファイルとアクセス許可を指定する場合は、適切な AWS Glue アクションを設定する必要があります。開始点として `AmazonElasticMapReduceforEC2Role` 管理ポリシーを使用します。詳細については、「*Amazon EMR 管理ガイド*」の「[クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)」を参照してください。

### Glue Data Catalog AWS を暗号化および復号するためのアクセス許可
<a name="emr-hive-glue-permissions-encrypt"></a>

インスタンスプロファイルには、キーを使用してデータを暗号化および復号するためのアクセス許可が必要です。以下のステートメントが両方とも適用される場合、これらのアクセス許可を設定する必要は*ありません*。
+ Glue AWS のマネージドキーを使用して、 AWS Glue Data Catalog オブジェクトの暗号化を有効にします。
+  AWS Glue データカタログ AWS アカウント と同じ にあるクラスターを使用します。

それ以外の場合は、EC2 インスタンスプロファイルにアタッチされたアクセス許可ポリシーに次のステートメントを追加する必要があります。

 AWS Glue データカタログの暗号化の詳細については、*AWS 「 Glue デベロッパーガイド*」の[「データカタログの暗号化](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)」を参照してください。

### リソースベースのアイデンティティアクセス許可
<a name="emr-hive-glue-permissions-resource"></a>

Amazon EMR で AWS Glue を Hive、Spark、または Presto と組み合わせて使用する場合、 AWS Glue は Data Catalog リソースへのアクセスを制御するためのリソースベースのポリシーをサポートします。これらのリソースには、データベース、テーブル、接続、ユーザー定義関数が含まれます。詳細については、「*AWS Glue デベロッパーガイド*」の「[AWS Glue リソースポリシー](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html)」を参照してください。

リソースベースのポリシーを使用して Amazon EMR 内から AWS Glue へのアクセスを制限する場合、アクセス許可ポリシーで指定するプリンシパルは、クラスターの作成時に指定する EC2 インスタンスプロファイルに関連付けられたロール ARN である必要があります。例えば、カタログにアタッチされたリソースベースのポリシーの場合、以下の例に示されている形式を使用して、クラスター EC2 インスタンスのデフォルトサービスロールのロール ARN である *EMR\$1EC2\$1DefaultRole* を `Principal` として指定できます。

```
arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole
```

*acct-id* は Glue アカウント ID AWS とは異なる場合があります。これにより、さまざまなアカウントで EMR クラスターからアクセスできます。異なるアカウントから、複数のプリンシパルを指定できます。

## AWS Glue データカタログを使用する際の考慮事項
<a name="emr-hive-glue-considerations-hive"></a>

Glue データカタログを Hive AWS のメタストアとして使用する場合は、次の項目を考慮してください。
+ Hive シェルを使用した補助 JAR の追加はサポートされません。この問題を回避するには、`hive-site` 設定分類を使用して `hive.aux.jars.path` プロパティを設定します。これにより、Hive のクラスパスに補助 JAR が追加されます。
+ [Hive のトランザクション](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)はサポートされていません。
+ Glue AWS 内からのテーブルの名前変更はサポートされていません。
+ `LOCATION` を指定せずに Hive テーブルを作成すると、テーブルデータは、`hive.metastore.warehouse.dir` プロパティによって指定された場所に保管されます。デフォルトでは、これは HDFS 内の場所です。別のクラスターがテーブルにアクセスする必要がある場合、テーブルを作成したクラスターに対する適切なアクセス許可がない限り、処理に失敗します。さらに、HDFS ストレージは一時的であるため、クラスターが終了すると、テーブルデータは失われ、テーブルを再作成する必要があります。Glue を使用して Hive テーブルを作成するときは、Amazon S3 AWS `LOCATION`で を指定することをお勧めします。または、`hive-site` 設定分類を使用して、`hive.metastore.warehouse.dir` の Amazon S3 で場所を指定できます。これは、すべての Hive テーブルに適用されます。テーブルが HDFS ロケーションで作成され、テーブルを作成したクラスターがまだ実行されている場合は、 Glue 内からテーブルロケーションを Amazon S3 AWS に更新できます。詳細については、「 [AWS Glue デベロッパーガイド」の「 Glue コンソールでのテーブルの操作](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html)」を参照してください。 *AWS *
+ 引用符とアポストロフィを含むパーティション値はサポートされていません(例: `PARTITION (owner="Doe's").`)。
+ [列統計](https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ColumnStatistics)は、emr-5.31.0 以降でサポートされています。
+ [Hive 認可](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization)の使用はサポートされていません。代替策として、[AWS Glue リソースベースのポリシー](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html)を使用することを検討してください。詳細については、「Use [Resource-Based Policies for Amazon EMR Access to AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html)」を参照してください。
+ [Hive 制約](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Constraints)はサポートされていません。
+ [Hive でのコストベースの最適化](https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive)はサポートされていません。
+ `hive.metastore.partition.inherit.table.properties` の使用はサポートされていません。
+ 次のメタストア定数の使用はサポートされていません。`BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION`。
+ 述語式を使用する場合、明示的な値が比較演算子の右側にある必要があります。そうしなければ、クエリが失敗する可能性があります。
  + **正**: `SELECT * FROM mytable WHERE time > 11`
  + **誤**: `SELECT * FROM mytable WHERE 11 > time`
+ Amazon EMR バージョン 5.32.0 および 6.3.0 以降では、述語式でのユーザー定義関数 (UDF) の使用がサポートされています。以前のバージョンを使用している場合、Hive がクエリの実行を最適化しようとするため、クエリが失敗する可能性があります。
+ [一時テーブル](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TemporaryTables)はサポートされていません。
+ Glue を使用して直接作成するのではなく、Amazon EMR AWS を使用してアプリケーションを使用してテーブルを作成することをお勧めします。Glue AWS を使用してテーブルを作成すると、必須フィールドが欠落し、クエリ例外が発生する可能性があります。
+ EMR 5.20.0 以降では、 Glue Data Catalog をメタストアとして使用すると、Spark と Hive AWS に対して並列パーティションプルーニングが自動的に有効になります。この変更により、複数のリクエストを並列に実行してパーティションを取得できるため、クエリ計画時間が大幅に短縮されます。同時に実行できるセグメントの総数は、1～10 の範囲です。デフォルト値は 5 であり、これが推奨される設定です。`hive-site` 設定分類の `aws.glue.partition.num.segments` プロパティを指定すると、これを変更できます。スロットリングが発生した場合は、値を 1 に変更して機能をオフにすることができます。詳細については、「[AWS Glue セグメント構造](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-Segment)」を参照してください。