このトピックでは、オープンソースの Iceberg Spark ランタイムと Iceberg REST カタログを使用して、EMR on ECS Spark から Data Lake Formation (DLF) の Iceberg テーブルにアクセスする方法について説明します。
前提条件
-
バージョン要件:Spark 3 コンポーネントがインストールされている、バージョン 5.12.0 以降の EMR クラスター。 Spark は JDK 17 を使用する必要があります (Iceberg 1.11.0 で必須です。Spark 3 での JDK 11 の使用 で説明されているように設定してください)。
-
リージョン要件:EMR クラスターと DLF は同じリージョンにある必要があります。また、クラスターの VPC は DLF の許可リストに追加されている必要があります。
-
権限要件:DLF にアクセスするための権限を持つアクセスキーペアが必要です。また、対応する RAM ユーザーには、ターゲットカタログに対するデータ権限が付与されている必要があります。 詳細については、「データ権限の管理」をご参照ください。
依存関係
必要となるのは、Maven Central の Apache Iceberg コミュニティアーティファクトのうち、次の 2 つのみです:
-
iceberg-spark-runtime-3.5_2.12(1.11.0 以降) -
iceberg-aws-bundle(1.11.0 以降)
ジョブを送信する際に --packages フラグを使用して依存関係を自動的にプルできます (以下の例をご参照ください)。 オフラインクラスターの場合は、JAR ファイルをダウンロードして $SPARK_HOME/jars に配置することもできます。
使用例
カタログ接続の設定
ターミナルで spark-sql コマンドを実行します。 プレースホルダーは実際の値に置き換えてください。
spark-sql \
--master local \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.11.0,org.apache.iceberg:iceberg-aws-bundle:1.11.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.iceberg_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.iceberg_catalog.catalog-impl=org.apache.iceberg.rest.RESTCatalog \
--conf spark.sql.catalog.iceberg_catalog.uri=http://${regionID}-vpc.dlf.aliyuncs.com/iceberg \
--conf spark.sql.catalog.iceberg_catalog.warehouse=${catalogName} \
--conf spark.sql.catalog.iceberg_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
--conf spark.sql.catalog.iceberg_catalog.rest.auth.type=sigv4 \
--conf spark.sql.catalog.iceberg_catalog.rest.auth.sigv4.delegate-auth-type=none \
--conf spark.sql.catalog.iceberg_catalog.rest.signing-region=${regionID} \
--conf spark.sql.catalog.iceberg_catalog.rest.signing-name=DlfNext \
--conf spark.sql.catalog.iceberg_catalog.rest.access-key-id=${AccessKeyId} \
--conf spark.sql.catalog.iceberg_catalog.rest.secret-access-key=${AccessKeySecret}
次の表に、設定項目を示します:
|
設定項目 |
説明 |
例 |
|
|
DLF Iceberg REST サービスの VPC エンドポイント。形式は |
|
|
|
カタログ名 |
|
|
|
固定値: |
|
|
|
標準の Iceberg コミュニティ実装。 固定値: |
|
|
|
認証タイプ。 固定値: |
|
|
|
固定値: |
|
|
|
DLF のリージョン ID |
|
|
|
固定値: |
|
|
|
DLF へのアクセスに使用するアクセスキー ID |
|
|
|
DLF へのアクセスに使用するシークレットアクセスキー |
DLF の Iceberg テーブルの読み取りと書き込み
起動後、標準の Spark SQL を使用してデータの読み取りと書き込みができます:
CREATE DATABASE IF NOT EXISTS iceberg_catalog.db;
CREATE TABLE iceberg_catalog.db.iceberg_tbl (id BIGINT, name STRING) USING iceberg;
INSERT INTO iceberg_catalog.db.iceberg_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM iceberg_catalog.db.iceberg_tbl;