Topik ini menjelaskan cara mengakses tabel Iceberg Data Lake Formation (DLF) dari EMR pada Spark ECS menggunakan Iceberg Spark Runtime open-source melalui Iceberg REST Catalog.
Prasyarat
-
Persyaratan versi: Kluster EMR versi 5.12.0 atau lebih baru dengan komponen Spark 3. Spark harus menggunakan JDK 17 (diperlukan oleh Iceberg 1.11.0); konfigurasikan sesuai petunjuk dalam Use JDK 11 in Spark 3.
-
Persyaratan wilayah: Kluster EMR dan DLF harus berada di wilayah yang sama, serta VPC kluster harus ditambahkan ke daftar izin DLF.
-
Persyaratan izin: Anda harus memiliki Pasangan Kunci Akses dengan izin untuk mengakses DLF, dan Pengguna RAM terkait harus diberikan izin data pada katalog target. Untuk informasi selengkapnya, lihat Manage data permissions.
Dependencies
Hanya dua artefak komunitas Apache Iceberg berikut dari Maven Central yang diperlukan:
-
iceberg-spark-runtime-3.5_2.12(versi 1.11.0 atau lebih baru) -
iceberg-aws-bundle(versi 1.11.0 atau lebih baru)
Anda dapat menggunakan flag --packages untuk menarik dependensi secara otomatis saat mengirimkan Pekerjaan (lihat contoh berikut). Untuk kluster offline, Anda juga dapat mengunduh file JAR dan meletakkannya di direktori $SPARK_HOME/jars.
Contoh penggunaan
Konfigurasi koneksi Catalog
Jalankan perintah spark-sql di terminal. Ganti placeholder dengan nilai aktual Anda.
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}
Tabel berikut menjelaskan item konfigurasi:
|
Item konfigurasi |
Deskripsi |
Contoh |
|
|
Titik akhir VPC layanan REST Iceberg DLF, dalam format |
|
|
|
Nama katalog |
|
|
|
Nilai tetap: |
|
|
|
Implementasi standar komunitas Iceberg. Nilai tetap: |
|
|
|
Jenis autentikasi. Nilai tetap: |
|
|
|
Nilai tetap: |
|
|
|
ID wilayah DLF |
|
|
|
Nilai tetap: |
|
|
|
ID AccessKey yang digunakan untuk mengakses DLF |
|
|
|
AccessKeySecret yang digunakan untuk mengakses DLF |
Baca dan tulis tabel Iceberg DLF
Setelah startup, Anda dapat menggunakan Spark SQL standar untuk membaca dan menulis data:
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;