Amazon EMR (旧称 Amazon Elastic MapReduce) は、AWS でビッグデータフレームワーク (Apache Hadoop、Apache Spark、および Apache Spark など) の実行を簡素化して、ビッグデータを処理および分析するマネージドクラスタープラットフォームです。これらのフレームワークと、関連するオープンソースプロジェクトを使用することで、分析用のデータやビジネスインテリジェンスワークロードを処理できます。Amazon EMR は、大量のデータを変換したり、他の AWS データストアやデータベースとの間で出し入れしたりできるようにします。
Amazon EMR の Apache Iceberg クラスターを使用して、Spark セッション内のテーブルバケットに接続することで S3 テーブルを操作できます。Amazon EMR のテーブルバケットに接続するには、AWS Glue Data Catalog を通じて AWS 分析サービスの統合を使用するか、オープンソースの Amazon S3 Tables Catalog for Apache Iceberg クライアントカタログを使用できます。
注記
S3 Tables は Amazon EMR バージョン 7.5 以降でサポートされています。
Amazon EMR Iceberg クラスターでの Spark を使用した S3 テーブルバケットへの接続
この手順では、Apache Iceberg 用に設定された Amazon EMR クラスターをセットアップし、テーブルバケットに接続する Spark セッションを起動します。AWS Glue を通じて AWS 分析サービス統合を使用して設定することも、オープンソースの Amazon S3 Tables Catalog for Apache Iceberg クライアントカタログを使用することもできます。クライアントの詳細については、「Amazon S3 Tables Iceberg REST エンドポイントを使用したテーブルへのアクセス」を参照してください。
次のオプションから、Amazon EMR でテーブルを使用する方法を選択します。
Amazon S3 Tables Catalog for Apache Iceberg を使用して、Amazon EMR で Spark によりテーブルに対してクエリを実行するには、次の前提条件が必要です。
前提条件
-
Amazon EMR で使用する IAM ロールに
AmazonS3TablesFullAccess
ポリシーをアタッチします。
Spark を使用してテーブルをクエリするように Amazon EMR クラスターを設定するには
次の設定を使用して、クラスターを作成します。この例を実行するには、
をユーザー自身の情報に置き換えます。user input placeholders
aws emr create-cluster --release-label emr-7.5.0 \ --applications Name=Spark \ --configurations file://configurations.json \ --region
us-east-1
\ --name My_Spark_Iceberg_Cluster \ --log-uri s3://
/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-roleamzn-s3-demo-bucket
EMR_DefaultRole
\ --ec2-attributes \ InstanceProfile=EMR_EC2_DefaultRole
,SubnetId=subnet-1234567890abcdef0
,KeyName=my-key-pair
configurations.json
:[{ "Classification":"iceberg-defaults", "Properties":{"iceberg.enabled":"true"} }]
-
テーブルバケットに接続する Iceberg の Spark セッションを初期化するには、次のコマンドを入力します。
をテーブルバケットの ARN に置き換えます。user input placeholders
spark-shell \ --packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3 \ --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \ --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:
us-east-1
:111122223333
:bucket/amzn-s3-demo-bucket1
\ --conf spark.sql.defaultCatalog=s3tablesbucket \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions -
Spark SQL を使用してテーブルをクエリします。クエリの例については、「Spark SQL を使用した S3 テーブルのクエリ」を参照してください。
注記
Amazon EMR で DROP TABLE PURGE
コマンドを使用している場合:
Amazon EMR バージョン 7.5
Spark 設定
spark.sql.catalog.
をyour-catalog-name
.cache-enabledfalse
に指定します。この設定がtrue
に設定されている場合、テーブルキャッシュがアクティブ化されないように、新しいセッションまたはアプリケーションで コマンドを実行します。-
Amazon EMR バージョン 7.5 以上
DROP TABLE
はサポートされていません。S3 Tables のDeleteTable
REST API を使用してテーブルを削除できます。