Topik ini menjelaskan cara mengakses katalog REST DLF Iceberg menggunakan Apache Iceberg Java API open-source, Spark, dan Flink. Anda dapat mengelola metadata tabel serta membaca dan menulis tabel Iceberg melalui protokol REST Iceberg standar dengan penandatanganan AWS SigV4. Bidang data menggunakan S3FileIO standar komunitas untuk terhubung langsung ke titik akhir OSS yang kompatibel dengan S3.
Prasyarat
Lingkungan runtime Anda harus menggunakan JDK 17 atau versi yang lebih baru (diperlukan oleh Iceberg 1.11.0).
Tambahkan dependensi komunitas Apache Iceberg berikut (versi 1.11.0) ke proyek Maven Anda. Semua dependensi tersedia di Maven Central:
<dependencies>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-core</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-aws</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-aws-bundle</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies>Jika Anda perlu membaca dan menulis data Parquet secara langsung menggunakan Java API (tanpa mesin komputasi), tambahkan juga dependensi iceberg-data, iceberg-parquet, iceberg-orc, parquet-hadoop, dan hadoop-common.
Terhubung menggunakan Java API
Gunakan kelas RESTCatalog standar komunitas untuk terhubung ke katalog REST DLF Iceberg. Teruskan parameter konfigurasi berikut saat melakukan inisialisasi:
Map<String, String> props = new HashMap<>();
props.put("uri", "http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg");
props.put("warehouse", "iceberg_table_test");
props.put("rest.auth.type", "sigv4");
props.put("rest.auth.sigv4.delegate-auth-type", "none");
props.put("rest.signing-region", "cn-hangzhou");
props.put("rest.signing-name", "DlfNext");
props.put("rest.access-key-id", "xxx");
props.put("rest.secret-access-key", "yyy");
props.put("io-impl", "org.apache.iceberg.aws.s3.S3FileIO");
RESTCatalog icebergCatalog = new RESTCatalog();
icebergCatalog.initialize(catalogName, props);Parameter konfigurasi
Parameter | Deskripsi | Contoh |
| Titik akhir DLF Iceberg REST Catalog (dapat diakses dalam VPC). Formatnya adalah |
|
| Nama katalog DLF. |
|
| Jenis otentikasi. Atur ke |
|
| Jenis otentikasi delegasi. Atur ke |
|
| ID Wilayah instans DLF. |
|
| Nama layanan penandatanganan. Atur ke |
|
| ID AccessKey untuk mengakses DLF. | |
| Rahasia AccessKey untuk mengakses DLF. | |
| Kelas implementasi File IO. Menggunakan S3FileIO standar komunitas. Atur ke |
|
Akses dengan Apache Spark
Apache Spark open-source dapat membaca dan menulis tabel DLF Iceberg secara langsung menggunakan runtime komunitas Iceberg. Katalog berkomunikasi melalui protokol REST Iceberg standar dengan penandatanganan AWS SigV4, sedangkan bidang data menggunakan S3FileIO komunitas untuk terhubung ke titik akhir OSS yang kompatibel dengan S3 melalui API yang kompatibel dengan S3. Semua dependensi tersedia di Maven Central.
Jalankan Spark SQL
spark-sql \
--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.dlf=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.dlf.type=rest \
--conf spark.sql.catalog.dlf.uri=http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg \
--conf spark.sql.catalog.dlf.warehouse=iceberg_table_test \
--conf spark.sql.catalog.dlf.rest.auth.type=sigv4 \
--conf spark.sql.catalog.dlf.rest.auth.sigv4.delegate-auth-type=none \
--conf spark.sql.catalog.dlf.rest.signing-region=cn-hangzhou \
--conf spark.sql.catalog.dlf.rest.signing-name=DlfNext \
--conf spark.sql.catalog.dlf.rest.access-key-id=xxx \
--conf spark.sql.catalog.dlf.rest.secret-access-key=yyy \
--conf spark.sql.catalog.dlf.io-impl=org.apache.iceberg.aws.s3.S3FileIOBaca dan tulis dengan Spark SQL
Setelah dikonfigurasi, gunakan Spark SQL standar untuk membaca dan menulis tabel Iceberg:
CREATE DATABASE IF NOT EXISTS dlf.demo_db;
CREATE TABLE dlf.demo_db.demo_tbl (id BIGINT, name STRING) USING iceberg;
INSERT INTO dlf.demo_db.demo_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM dlf.demo_db.demo_tbl;Akses dengan Apache Flink
Apache Flink open-source menggunakan runtime komunitas Iceberg untuk mengakses tabel DLF Iceberg. Letakkan iceberg-flink-runtime-1.20-1.11.0.jar dan iceberg-aws-bundle-1.11.0.jar (keduanya merupakan artefak komunitas dari Maven Central) di direktori lib/ instalasi Flink Anda, lalu daftarkan katalog di SQL Client.
Daftarkan katalog
CREATE CATALOG dlf WITH (
'type' = 'iceberg',
'catalog-type' = 'rest',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg',
'warehouse' = 'iceberg_table_test',
'rest.auth.type' = 'sigv4',
'rest.auth.sigv4.delegate-auth-type' = 'none',
'rest.signing-region' = 'cn-hangzhou',
'rest.signing-name' = 'DlfNext',
'rest.access-key-id' = 'xxx',
'rest.secret-access-key' = 'yyy',
'io-impl' = 'org.apache.iceberg.aws.s3.S3FileIO'
);Baca dan tulis dengan Flink SQL
USE CATALOG dlf;
CREATE DATABASE IF NOT EXISTS demo_db;
CREATE TABLE demo_db.demo_tbl (id BIGINT, name STRING);
INSERT INTO demo_db.demo_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM demo_db.demo_tbl;