Topik ini menjelaskan cara menggunakan Iceberg dalam kluster E-MapReduce (EMR).
Informasi latar belakang
Dalam topik ini, metadata dikelola menggunakan Data Lake Formation (DLF). Untuk informasi lebih lanjut tentang konfigurasi metadata, lihat Konfigurasi Metadata DLF.
Prasyarat
Kluster Hadoop dari EMR V5.3.0 atau versi minor terbaru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster.
Batasan
Ekstensi Spark SQL dari Iceberg tidak didukung di Spark 2.4. Jika Anda menggunakan kluster EMR V3.38.X atau versi minor terbaru, Anda hanya dapat menggunakan API Spark DataFrame untuk melakukan operasi terkait Iceberg. Topik ini menjelaskan cara menggunakan Spark SQL untuk melakukan operasi terkait Iceberg dalam kluster EMR V5.3.0 atau versi minor terbaru.
Prosedur
Masuk ke kluster Anda dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
Jalankan perintah berikut untuk mengonfigurasi parameter terkait Iceberg.
Sebelum menggunakan Spark SQL untuk melakukan operasi terkait Iceberg, Anda harus mengonfigurasi katalog. Perintah berikut menunjukkan cara mengonfigurasi katalog. Nama default katalog dan parameter yang harus dikonfigurasi bervariasi berdasarkan versi kluster Anda. Untuk informasi lebih lanjut, lihat Konfigurasi Metadata DLF. Dalam konfigurasi berikut, DLF digunakan untuk mengelola metadata.
CatatanKonfigurasi katalog memiliki awalan spark.sql.catalog.<catalog_name>. <catalog_name> menunjukkan nama katalog.
EMR V5.6.0 atau versi minor terbaru
spark-sql --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.iceberg.catalog-impl=org.apache.iceberg.aliyun.dlf.hive.DlfCatalog \EMR V5.5.X
spark-sql --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.catalog-impl=org.apache.iceberg.aliyun.dlf.hive.DlfCatalog \ --conf spark.sql.catalog.dlf.warehouse=<yourOSSWarehousePath> \CatatanAnda dapat membiarkan parameter spark.sql.catalog.dlf.warehouse kosong. Jika Anda tidak mengonfigurasi parameter ini, jalur warehouse default akan digunakan.
EMR V5.3.X hingga EMR V5.4.X
Anda harus mengonfigurasi pasangan AccessKey. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
spark-sql --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.dlf_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.dlf_catalog.catalog-impl=org.apache.iceberg.aliyun.dlf.DlfCatalog \ --conf spark.sql.catalog.dlf_catalog.io-impl=org.apache.iceberg.hadoop.HadoopFileIO \ --conf spark.sql.catalog.dlf_catalog.oss.endpoint=<yourOSSEndpoint> \ --conf spark.sql.catalog.dlf_catalog.warehouse=<yourOSSWarehousePath> \ --conf spark.sql.catalog.dlf_catalog.access.key.id=<ALIBABA_CLOUD_ACCESS_KEY_ID> \ --conf spark.sql.catalog.dlf_catalog.access.key.secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> \ --conf spark.sql.catalog.dlf_catalog.dlf.catalog-id=<yourCatalogId> \ --conf spark.sql.catalog.dlf_catalog.dlf.endpoint=<yourDLFEndpoint> \ --conf spark.sql.catalog.dlf_catalog.dlf.region-id=<yourDLFRegionId>
Jika keluaran berisi informasi berikut, CLI Spark SQL dimulai:
spark-sql>Lakukan operasi dasar.
PentingDalam contoh berikut,
<catalog_name>menentukan nama katalog Anda. Untuk kluster EMR V5.6.0 atau versi minor terbaru, nama katalog adalah iceberg. Untuk kluster versi lainnya, lihat informasi yang dijelaskan di Langkah 2. Konfigurasi katalog memiliki awalan spark.sql.catalog.<catalog_name>.Buat Database
CREATE DATABASE IF NOT EXISTS <catalog_name>.iceberg_db;Buat Tabel
CREATE TABLE IF NOT EXISTS <catalog_name>.iceberg_db.sample( id BIGINT COMMENT 'id unik', data STRING ) USING iceberg;Pernyataan yang digunakan untuk membuat tabel Iceberg dapat mencakup klausa COMMENT, PARTITIONED BY, LOCATION, dan TBLPROPERTIES. Kode berikut menunjukkan cara menggunakan klausa TBLPROPERTIES untuk mengonfigurasi properti tingkat tabel:
CREATE TABLE IF NOT EXISTS <catalog_name>.iceberg_db.sample( id BIGINT COMMENT 'id unik', data STRING ) USING iceberg TBLPROPERTIES ( 'write.format.default'='parquet' );Sisipkan Data
INSERT INTO <catalog_name>.iceberg_db.sample VALUES (1, 'a'), (2, 'b'), (3, 'c');Kueri Data
SELECT * FROM <catalog_name>.iceberg_db.sample; SELECT count(1) AS count, data FROM <catalog_name>.iceberg_db.sample GROUP BY data;Perbarui Data
UPDATE <catalog_name>.iceberg_db.sample SET data = 'x' WHERE id = 3;Hapus Data
DELETE FROM <catalog_name>.iceberg_db.sample WHERE id = 3;