Anda dapat menginstal komponen tambahan seperti Iceberg saat membuat cluster Dataproc menggunakan fitur Komponen opsional. Halaman ini menjelaskan cara menginstal komponen Iceberg secara opsional di cluster Dataproc.
Ringkasan
Apache Iceberg adalah format tabel terbuka untuk set data analitik yang besar. BigLake menghadirkan keandalan dan kesederhanaan tabel SQL ke Big Data, sekaligus memungkinkan mesin seperti Spark, Trino, PrestoDB, Flink, dan Hive untuk bekerja dengan aman dengan tabel yang sama secara bersamaan.
Saat diinstal di cluster Dataproc, komponen Apache Iceberg akan menginstal library Iceberg dan mengonfigurasi Spark dan Hive agar berfungsi dengan Iceberg di cluster.
Fitur utama Iceberg
Fitur Iceberg meliputi:
- Evolusi skema: Menambahkan, menghapus, atau mengganti nama kolom tanpa menulis ulang seluruh tabel.
- Perjalanan waktu: Membuat kueri snapshot tabel historis untuk tujuan audit atau rollback.
- Partisi tersembunyi: Mengoptimalkan tata letak data untuk kueri yang lebih cepat tanpa mengekspos detail partisi kepada pengguna.
- Transaksi ACID: Memastikan konsistensi data dan mencegah konflik.
Versi image Dataproc yang kompatibel
Anda dapat menginstal komponen Iceberg di cluster Dataproc yang dibuat dengan versi image 2.2.47 dan yang lebih baru. Versi Iceberg yang diinstal di cluster tercantum di halaman versi rilis 2.2.
Properti terkait Iceberg
Saat Anda membuat Dataproc dengan cluster Iceberg, properti Spark dan Hive berikut akan dikonfigurasi agar berfungsi dengan Iceberg.
File konfigurasi | Properti | Nilai default |
---|---|---|
/etc/spark/conf/spark-defaults.conf |
spark.sql.extensions |
org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions |
spark.driver.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
spark.executor.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
/etc/hive/conf/hive-site.xml |
hive.aux.jars.path |
file:///usr/lib/iceberg/lib/iceberg-hive-runtime.jar |
iceberg.engine.hive.enabled |
true |
Menginstal komponen opsional Iceberg
Instal komponen Iceberg saat Anda membuat cluster Dataproc. Halaman Daftar versi image cluster Dataproc menampilkan versi komponen Iceberg yang disertakan dalam versi image cluster Dataproc terbaru.
Google Cloud console
Untuk membuat cluster Dataproc yang menginstal komponen Iceberg, selesaikan langkah-langkah berikut di konsol Google Cloud :
- Buka halaman Create a cluster Dataproc. Panel Siapkan cluster dipilih.
- Di bagian Components, pada Optional components, pilih komponen Iceberg.
- Konfirmasi atau tentukan setelan cluster lainnya, lalu klik Create.
Google Cloud CLI
Untuk membuat cluster Dataproc yang menginstal komponen Iceberg, gunakan perintah gcloud dataproc clusters create
dengan flag --optional-components
.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Ganti kode berikut:
- CLUSTER_NAME: Nama cluster baru.
- REGION: Region cluster.
REST API
Untuk membuat cluster Dataproc yang menginstal komponen opsional Iceberg,
tentukan SoftwareConfig.Component
Iceberg sebagai bagian dari
permintaan
clusters.create
.
Menggunakan tabel Iceberg dengan Spark dan Hive
Setelah membuat cluster Dataproc yang memiliki komponen opsional Iceberg yang diinstal di cluster, Anda dapat menggunakan Spark dan Hive untuk membaca dan menulis data tabel Iceberg.
Spark
Mengonfigurasi sesi Spark untuk Iceberg
Anda dapat menggunakan perintah gcloud CLI secara lokal, atau REPL spark-shell
atau pyspark
(Read-Eval-Print Loops) yang berjalan di node master cluster dataproc untuk mengaktifkan ekstensi Spark Iceberg dan menyiapkan katalog Spark untuk menggunakan tabel Iceberg.
gcloud
Jalankan contoh gcloud CLI berikut di jendela terminal lokal atau di Cloud Shell untuk mengirimkan tugas Spark dan menetapkan properti Spark untuk mengonfigurasi sesi Spark untuk Iceberg.
gcloud dataproc jobs submit spark \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties="spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \ --properties="spark.sql.catalog.CATALOG_NAME.type=hadoop" \ --properties="spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER" \ other flags ...
Ganti kode berikut:
- CLUSTER_NAME: Nama cluster.
- REGION: Region Compute Engine.
- CATALOG_NAME: Nama katalog Iceberg.
- BUCKET dan FOLDER: Lokasi katalog Iceberg di Cloud Storage.
spark-shell
Untuk mengonfigurasi sesi Spark untuk Iceberg menggunakan REPL spark-shell
di
cluster Dataproc, selesaikan langkah-langkah berikut:
Gunakan SSH untuk terhubung ke node master cluster Dataproc.
Jalankan perintah berikut di terminal sesi SSH untuk mengonfigurasi sesi Spark untuk Iceberg.
spark-shell \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \ --conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Ganti kode berikut:
- CLUSTER_NAME: Nama cluster.
- REGION: Region Compute Engine.
- CATALOG_NAME: Nama katalog Iceberg.
- BUCKET dan FOLDER: Lokasi katalog Iceberg di Cloud Storage.
shell pyspark
Untuk mengonfigurasi sesi Spark untuk Iceberg menggunakan REPL pyspark
di
cluster Dataproc, selesaikan langkah-langkah berikut:
Gunakan SSH untuk terhubung ke node master cluster Dataproc.
Jalankan perintah berikut di terminal sesi SSH untuk mengonfigurasi sesi Spark untuk Iceberg:
pyspark \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \ --conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Ganti kode berikut:
- CLUSTER_NAME: Nama cluster.
- REGION: Region Compute Engine.
- CATALOG_NAME: Nama katalog Iceberg.
- BUCKET dan FOLDER: Lokasi katalog Iceberg di Cloud Storage.
Menulis data ke Tabel Iceberg
Anda dapat menulis data ke tabel Iceberg menggunakan Spark. Cuplikan kode berikut membuat DataFrame
dengan data sampel, membuat tabel Iceberg di Cloud Storage, lalu menulis data ke tabel Iceberg.
PySpark
# Create a DataFrame with sample data. data = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"]) # Create an Iceberg table in Cloud Storage. spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME ( id integer, name string) USING iceberg LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""") # Write the DataFrame to the Iceberg table in Cloud Storage. data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Scala
// Create a DataFrame with sample data. val data = Seq((1, "Alice"), (2, "Bob")).toDF("id", "name") // Create an Iceberg table in Cloud Storage. spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME ( id integer, name string) USING iceberg LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""") // Write the DataFrame to the Iceberg table in Cloud Storage. data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Membaca data dari Tabel Iceberg
Anda dapat membaca data dari tabel Iceberg menggunakan Spark. Cuplikan kode berikut membaca tabel, lalu menampilkan kontennya.
PySpark
# Read Iceberg table data into a DataFrame. df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME") # Display the data. df.show()
Scala
// Read Iceberg table data into a DataFrame. val df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME") // Display the data. df.show()
Spark SQL
SELECT * FROM CATALOG_NAME.NAMESPACE.TABLE_NAME
Hive
Membuat Tabel Iceberg di Hive
Cluster Dataproc mengonfigurasi Hive sebelumnya agar berfungsi dengan Iceberg.
Untuk menjalankan cuplikan kode di bagian ini, selesaikan langkah-langkah berikut;
Gunakan SSH untuk terhubung ke node master cluster Dataproc Anda.
Tampilkan
beeline
di jendela terminal SSH.beeline -u jdbc:hive2://
Anda dapat membuat tabel Iceberg yang tidak dipartisi atau dipartisi di Hive.
Tabel yang tidak dipartisi
Buat tabel Iceberg yang tidak dipartisi di Hive.
CREATE TABLE my_table ( id INT, name STRING, created_at TIMESTAMP ) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Tabel berpartisi
Buat tabel Iceberg berpartisi di Hive dengan menentukan kolom partisi dalam klausa PARTITIONED BY
.
CREATE TABLE my_partitioned_table ( id INT, name STRING ) PARTITIONED BY (date_sk INT) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Menyisipkan data ke dalam Tabel Iceberg di Hive
Anda dapat menyisipkan data ke dalam tabel Iceberg menggunakan pernyataan INSERT
Hive standar.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Batasan
- Mesin eksekusi MR (MapReduce) hanya didukung untuk operasi DML (bahasa pengolahan data).
- Eksekusi MR tidak digunakan lagi di Hive
3.1.3
.
Membaca data dari Tabel Iceberg di Hive
Untuk membaca data dari tabel Iceberg, gunakan pernyataan SELECT
.
SELECT * FROM my_table;
Menempatkan tabel Iceberg di Hive.
Untuk menghapus tabel Iceberg di Hive, gunakan pernyataan DROP TABLE
.
DROP TABLE my_table;