Apache Spark を Amazon EMR または AWS Glue と併用し、他の AWS アカウント内の AWS Glue データカタログに属する Apache Iceberg と連携したいと考えています。
解決策
AWS Glue データカタログに属する Apache Iceberg テーブルと Spark を連携させるには、AWS Glue ジョブまたは Amazon EMR クラスターでパラメータを設定します。
Amazon EMR または AWS Glue ジョブには、クロスアカウントの AWS Glue データカタログにアクセスするための AWS Identity and Access Management (IAM) 権限が必要です。詳細については、「AWS Glue でクロスアカウントアクセスを許可する方法」を参照してください。
Catalog.Id を使用して AWS Glue データカタログが配置されたアカウントの ID を指定する必要があります。詳細については、「クロスアカウント API コールの実行」を参照してください。
AWS Glue でパラメータを設定する
AWS Glue ジョブのジョブパラメータを設定します。
ジョブパラメータの例:
Key: --conf Value: spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.dev=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.dev.glue.id=CROSS_ACCOUNT_ID --conf spark.sql.catalog.dev.warehouse=s3://amzn-s3-demo-bucket/ --conf spark.sql.catalog.dev.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.dev.io-impl=org.apache.iceberg.aws.s3.S3FileIO
注: CROSS_ACCOUNT_ID をクロスアカウント ID に、amzn-s3-demo-bucket を S3 バケットの場所に置き換えてください。
Amazon EMR でパラメータを設定する
バージョン 6.5 以降を実行する Amazon EMR クラスターでは、ジョブの送信時にパラメータを設定します。または、Spark のデフォルト構成である /etc/spark/conf/spark-defaults.conf を使用することも可能です。詳細については、「Spark で Icebergクラスターを使用する」を参照してください。
パラメーターを設定するには、次の spark-submit コマンドを実行します。
spark-submit \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix \
--conf spark.sql.catalog.my_catalog.type=glue \
--conf spark.sql.catalog.my_catalog.glue.id=CROSS_ACCOUNT_ID \
--conf spark.sql.defaultCatalog=my_catalog \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
注: CROSS_ACCOUNT_ID をクロスアカウント ID に、**amzn-s3-demo-bucket/**prefix を S3 バケットの場所とプレフィックスに、my_catalog をカタログに置き換えてください。
または、
次の spark-defaults 構成を使用します。
] } "configurations": []
},
"spark.sql.catalog.dev.io-impl": "org.apache.iceberg.aws.s3.S3FileIO"
"spark.sql.catalog.dev.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog",
"spark.sql.catalog.dev.warehouse": "s3://amzn-s3-demo-bucket/",
"spark.sql.catalog.dev.glue.id": "CROSS_ACCOUNT_ID",
"spark.sql.catalog.dev": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.jars": "/usr/share/aws/iceberg/lib/iceberg-spark3-runtime.jar",
"properties": {
"classification": "spark-defaults",
{
},
"configurations": []
},
"iceberg.enabled": "true"
"properties": {
"classification": "iceberg-defaults",
{
[
注: CROSS_ACCOUNT_ID をクロスアカウント ID に、amzn-s3-demo-bucket を S3 バケットの場所に置き換えてください。
関連情報
Spark を使用して Amazon S3 からアイスバーグテーブルを読み取る