Spark SQL のメタストアとしての AWS Glue Data Catalog の使用 - Amazon EMR

Spark SQL のメタストアとしての AWS Glue Data Catalog の使用

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

AWS Glue は、簡単でコスト効果の高い方法でデータの分類、消去、強化、およびさまざまなデータストア間を確実に移動することができる、フルマネージド型の抽出、変換、ロード (ETL) サービスです。AWS Glue Data Catalog は、さまざまなデータソースおよびデータ形式にわたって一本化されたメタデータリポジトリを提供します。そのために、Amazon EMR だけでなく、Amazon RDS、Amazon Redshift、Redshift Spectrum、Athena、およびその他の Apache Hive メタストアと互換性のあるすべてのアプリケーションと連携します。AWSGlue クローラは、Amazon S3 のソースデータからスキーマを自動的に推論し、関連するメタデータを Data Catalog に保存します。Data Catalog の詳細については、「AWS Glue デベロッパーガイド」の「AWS Glue データカタログの作成」を参照してください。

AWS Glue には、別個の料金が適用されます。Data Catalog にメタデータを保存し、保存済みメタデータにアクセスするための月別レート、AWS Glue ETL ジョブとクローラランタイムに対して分単位で課金される時間レート、およびプロビジョニング済みの開発エンドポイントごとに分単位で課金される時間レートが適用されます。Data Catalog では、最大 100 万個までのオブジェクトを無料で保存できます。100 万を超えるオブジェクトを保存した場合は、100,000 オブジェクトごとに 1 USD が課金されます。Data Catalog 内のオブジェクトは、テーブル、パーティション、またはデータベースです。詳細については、「Glue 料金表」を参照してください。

重要

2017 年 8 月 14 日よりも前に Amazon Athena または Amazon Redshift Spectrum を使用してテーブルを作成した場合、データベースとテーブルは Athena 管理のカタログに保存されます。このカタログは、AWS Glue データカタログとは別個のものです。Amazon EMR をこれらのテーブルに統合するには、AWS Glue データカタログにアップグレードする必要があります。詳細については、「Amazon Athena ユーザーガイド」の「AWS Glue データカタログへのアップグレード」を参照してください。

AWS Glue Data Catalog をメタストアとして指定する

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

注記

Spark SQL コンポーネントには Zeppelin がインストールされているため、Zeppelin でも AWS Glue Data Catalog を使用できます。

New console
新しいコンソールを使用して AWS Glue Data Catalog を Spark メタストアとして指定するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

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

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

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

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

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

Old console
古いコンソールを使用して AWS Glue Data Catalog を Spark メタストアとして指定するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Create cluster (クラスターの作成)]、[Go to advanced options (詳細オプションに移動する)] の順に選択します。

  3. [Release] で、[emr-5.8.0] 以降を選択します。

  4. [Release] で、[Spark] または [Zeppelin] を選択します。

  5. [AWS Glue Data Catalog 設定][Spark テーブルメタデータに使用] を選択します。

  6. 必要に応じてクラスターの他のオプションを選択し、[Next (次へ)] 選択してアプリケーションに適切な他のクラスターオプションを設定します。

AWS CLI
AWS CLI を使用して AWS Glue Data Catalog を Spark メタストアとして指定するには

AWS CLI と EMR API を使用した設定分類の指定方法の詳細については、「アプリケーションの設定」を参照してください。

  • 次の例に示すように、spark-hive-site 分類を使用して hive.metastore.client.factory.class の値を指定します。

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

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

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

IAM アクセス許可

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

AWS Glue アクションに対するアクセス許可

Amazon EMR の デフォルトの EC2 インスタンスプロファイルを使用する場合、アクションは必要ありません。EMR_EC2_DefaultRole にアタッチされている AmazonElasticMapReduceforEC2Role 管理ポリシーでは、必要なすべての AWS Glue アクションが許可されます。ただし、カスタム EC2 インスタンスプロファイルとアクセス許可を指定する場合、該当する AWS Glue アクションを設定する必要があります。開始点として AmazonElasticMapReduceforEC2Role 管理ポリシーを使用します。詳細については、「Amazon EMR 管理ガイド」の「クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)」を参照してください。

AWS Glue データカタログを暗号化/復号するためのアクセス許可

インスタンスプロファイルには、キーを使用してデータを暗号化および復号するためのアクセス許可が必要です。以下のステートメントが両方とも適用される場合、これらのアクセス許可を設定する必要はありません

  • AWS Glue の管理キーを使用する AWS Glue Data Catalog オブジェクトの暗号化を有効にする。

  • AWS アカウント Glue Data Catalog と同じ AWS にあるクラスターを使用する。

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

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

AWS Glue Data Catalog 暗号化の詳細については、「AWS Glue デベロッパーガイド」の「データカタログの暗号化」を参照してください。

リソースベースのアクセス許可

AWS Glue を Amazon EMR で Hive、Spark、または Presto と共に使用する場合、AWS Glue はデータカタログのリソースへのアクセスを制御するリソースベースのポリシーをサポートします。これらのリソースには、データベース、テーブル、接続、ユーザー定義関数が含まれます。詳細については、「AWS Glue デベロッパーガイド」の「AWS Glue リソースポリシー」を参照してください。

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

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

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

AWS Glue Data Catalog を使用する場合の考慮事項

AWS Glue データカタログを Spark でメタストアとして使用するときは、以下について考慮します。

  • 場所の URI が指定されていないデフォルトデータベースを使用すると、テーブルの作成時に障害が発生します。回避策として、LOCATION の使用時に s3://EXAMPLE-DOC-BUCKET 句を使用して CREATE TABLE などのバケットの場所を指定します。または、デフォルトデータベース以外のデータベース内にテーブルを作成します。

  • AWS Glue 内からのテーブルの名前変更はサポートされていません。

  • LOCATION を指定せずに Hive テーブルを作成すると、テーブルデータは、hive.metastore.warehouse.dir プロパティによって指定された場所に保管されます。デフォルトでは、これは HDFS 内の場所です。別のクラスターがテーブルにアクセスする必要がある場合、テーブルを作成したクラスターに対する適切なアクセス許可がない限り、処理に失敗します。さらに、HDFS ストレージは一時的であるため、クラスターが終了すると、テーブルデータは失われ、テーブルを再作成する必要があります。AWS Glue を使用して Hive テーブルを作成するときに、Amazon S3 で LOCATION を指定することをお勧めします。または、hive-site 設定分類を使用して、hive.metastore.warehouse.dir の Amazon S3 で場所を指定できます。これは、すべての Hive テーブルに適用されます。テーブルが HDFS の場所に作成され、それを作成したクラスターがまだ実行中の場合、AWS Glue 内から Amazon S3 にテーブルの場所を更新できます。詳細については、「AWS Glue デベロッパーガイド」の「AWS Glue コンソールでのテーブルの使用」を参照してください。

  • 引用符とアポストロフィを含むパーティション値はサポートされていません(例: PARTITION (owner="Doe's").)。

  • 列統計は、emr-5.31.0 以降でサポートされています。

  • Hive 認可の使用はサポートされていません。代替策として、AWS Glue リソースベースのポリシーを使用することを検討してください。詳細については、「リソースベースのポリシーを使用して Amazon EMR から AWS Glue データカタログにアクセスする」を参照してください。