Amazon EMR の Hive および Spark を使用して、別の AWS アカウントにある AWS Glue データカタログにクエリを実行する方法を教えてください。
Amazon EMR で Apache Hive と Apache Spark を使用して、別のアカウントの AWS Glue データカタログにアクセスしてクエリを実行したいと考えています。
簡単な説明
Hive または Spark の設定で aws.glue.catalog.separator プロパティを指定することで、さまざまなアカウントでデータカタログに動的にアクセスできます。さらに、Hive または Spark の設定で hive.metastore.glue.catalogid プロパティを指定することで、別のアカウントの特定のデータカタログにアクセスできます。
解決方法
AWS Glue へのクロスアカウントアクセスを許可していない場合は、「クロスアカウントアクセスを許可する」の手順に従って設定してください。AWS Glue テーブルがポイントする Amazon Simple Storage Service (Amazon S3) バケットがクロスアカウントアクセス用に設定されていることを確認してください。詳細については、「Amazon EMRFS のクロスアカウントアクセスを設定するにはどうすればよいですか?」を参照してください。
さまざまなアカウントでデータカタログに動的にアクセス
構成の変更を新しいクラスターに適用する
EMR クラスターを起動するときに、次のオブジェクトのような設定オブジェクトを追加します。詳細については、「クラスター作成時のアプリケーションの設定」を参照してください。
[{ "Classification": "hive-site", "Properties": { "aws.glue.catalog.separator": "/", "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } }, { "Classification": "spark-hive-site", "Properties": { "aws.glue.catalog.separator": "/", "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } }]
実行中のクラスターに設定変更を適用する
- Amazon EMR コンソールを開きます。
- クラスターリストの [クラスター ID] で、再設定するアクティブなクラスターを選択します。
- クラスターの詳細ページで、「アプリケーション」タブを選択します。
- アプリケーションの詳細ページで、「インスタンスグループ設定」までスクロールします。
- インスタンスグループを選択し、[Reconfigure] を選択します。
- 次の画面で、[新しい設定の追加] を選択し、次を入力します。
[分類] には、「hive-site」
[プロパティ] には、「aws.glue.catalog.separator」
[値] には、「 /」
[分類] には、「hive-site」
[プロパティ] には、「hive.metastore.client.factory.class」
[値] には、「com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory」
[分類] には、「spark-hive-site」
[プロパティ] には、「aws.glue.catalog.separator」
[値] には、「 /」
[分類] には、「spark-hive-site」
[プロパティ] には、「hive.metastore.client.factory.class」
[値] には、「com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory」 - [この設定をすべてのアクティブなインスタンスグループに適用] をチェックしてから、[変更を保存] をクリックします。詳細については、Reconfigure an instance group in a running cluster を参照してください。
別の AWS アカウントのクエリテーブル
注: Amazon EMR 6.5 では、Spark ジョブを実行する際に spark.sql.catalogImplementation=hive という設定プロパティを渡してください。詳細については、Apache Spark ドキュメントの「Spark プロパティの動的ロード」を参照してください。
別の AWS アカウントにあるテーブルにクエリを実行するには、クエリでアカウント番号を指定します。アカウント番号はカタログ ID と同じです。例えば、Hive のアカウント 111122223333 の demodb.tab1 にクエリを実行するには、次のコマンドを実行します。
SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;
Spark の例 (これを spark-submit スクリプトで実行するか、ノートブックシェルコマンドとして実行します):
spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()
2 つのカタログ間でテーブルを結合することもできます。
Hive の例:
SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2
Spark の例 (これを spark-submit スクリプトで実行するか、ノートブックシェルコマンドとして実行します):
spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()
別のアカウントで特定のデータカタログにアクセスする
構成の変更を新しいクラスターに適用する
EMR クラスターを起動するときに、次のオブジェクトのような設定オブジェクトを追加します。詳細については、「クラスター作成時のアプリケーションの設定」を参照してください。
[{ "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "account-id" } }, { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "account-id" } }]
実行中のクラスターに設定変更を適用する
- Amazon EMR コンソールを開きます。
- クラスターリストの [クラスター ID] で、再設定するアクティブなクラスターを選択します。
- クラスターの詳細ページで、「アプリケーション」タブを選択します。
- アプリケーションの詳細ページで、「インスタンスグループ設定」までスクロールします。
- インスタンスグループを選択し、[Reconfigure] を選択します。
- 次の画面で、[新しい設定の追加] を選択し、次を入力します。
[分類] には、「hive-site」
[プロパティ] には、「hive.metastore.glue.catalogid」
[値用] には、「アカウント ID」
[分類] には、「hive-site」
[プロパティ] には、「hive.metastore.client.factory.class」
[値] には、「com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory」
[分類] には、「spark-hive-site」
[プロパティ] には、「hive.metastore.glue.catalogid」
[値用] には、「アカウント ID」
[分類] には、「spark-hive-site」
[プロパティ] には、「hive.metastore.client.factory.class」
[値] には、「com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory」 - [この設定をすべてのアクティブなインスタンスグループに適用] をチェックしてから、[変更を保存] をクリックします。詳細については、Reconfigure an instance group in a running cluster を参照してください。
別の AWS アカウントのクエリテーブル
指定した AWS Glue データカタログに保存されているテーブルをクエリするには、次のコマンドを実行できます。たとえば、demodb.tab1 にクエリを実行するには:
Hive で、次のコマンドを実行します。
SELECT * FROM `demodb.tab1` LIMIT 5;
Spark の例 (これを spark-submit スクリプトで実行するか、ノートブックシェルコマンドとして実行します):
spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()
関連するコンテンツ
- 質問済み 7ヶ月前lg...
- 質問済み 6年前lg...
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前