Hudi adalah kerangka kerja data lake yang memungkinkan Anda untuk memperbarui dan menghapus data di sistem file yang kompatibel dengan Hadoop. Hudi juga mendukung penggunaan data yang telah berubah. E-MapReduce (EMR) Trino mengintegrasikan paket JAR terkait ke dalam komponen Hudi independen. Anda dapat menggunakan konektor EMR Hudi untuk menanyakan data dalam tabel Copy on Write dan Merge on Read.
Informasi Latar Belakang
Untuk informasi lebih lanjut tentang EMR Hudi, lihat Hudi.
Prasyarat
Cluster DataLake atau cluster Hadoop harus dibuat, dan layanan Presto dipilih. Untuk informasi lebih lanjut, lihat Buat Cluster.
Batasan
Hanya cluster DataLake dari semua versi dan cluster Hadoop dari EMR V3.38.0 ke atas yang mendukung konektor Hudi.
Untuk tabel Copy on Write, konektor Hudi hanya dapat menanyakan snapshot dari tabel tersebut.
Untuk tabel Merge on Read, konektor Hudi hanya dapat menanyakan snapshot dan hasil optimasi baca dari tabel tersebut dalam beberapa skenario tertentu. Berhati-hatilah saat menggunakan konektor Hudi untuk kueri dalam lingkungan produksi.
Kueri inkremental tidak didukung.
Konfigurasi Konektor Hudi
Ubah konfigurasi konektor Hudi sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Konektor Bawaan.
Gunakan Metadata Hive
Untuk melihat konfigurasi default konektor Hudi, ikuti langkah-langkah berikut: Di konsol EMR, buka tab Configure pada halaman layanan Trino. Pada tab Configure, klik tab hudi.properties. Sesuaikan parameter dalam tabel berikut sesuai kebutuhan bisnis Anda.
Parameter | Deskripsi |
hive.metastore.uri | Uniform Resource Identifier (URI) yang digunakan untuk mengakses metastore Hive berdasarkan protokol Thrift.
|
hive.config.resources | File konfigurasi Hadoop Distributed File System (HDFS). Pisahkan nama file konfigurasi dengan koma (,). Anda harus memastikan bahwa file konfigurasi ada di semua host tempat Trino berjalan. Penting Anda harus mengonfigurasi parameter ini jika ingin mengakses HDFS.
|
hive.hdfs.impersonation.enabled | Menentukan apakah akan mengaktifkan impersonasi pengguna. Nilai valid:
|
Gunakan Metadata DLF Terpadu
Jika parameter Metadata diatur ke DLF Unified Metadata untuk cluster data Anda, Anda perlu mengonfigurasi konektor seperti Hive, Iceberg, dan Hudi. Dalam hal ini, kueri data tidak lagi bergantung pada cluster data Anda. Anda dapat mengonfigurasi parameter hive.metastore.uri sesuai kebutuhan bisnis Anda. Trino dapat langsung mengakses metadata Data Lake Formation (DLF) dalam akun yang sama.
| Parameter | Deskripsi | Catatan |
| hive.metastore | Jenis metastore Hive. | Parameter ini tetap menjadi DLF. |
| dlf.catalog.region | ID wilayah di mana Data Lake Formation (DLF) diaktifkan. | Untuk informasi lebih lanjut, lihat Wilayah dan Titik Akhir yang Didukung. Catatan Pastikan nilai parameter ini sesuai dengan titik akhir yang ditentukan oleh parameter dlf.catalog.endpoint. |
| dlf.catalog.endpoint | Titik akhir layanan DLF. | Untuk informasi lebih lanjut, lihat Wilayah dan Titik Akhir yang Didukung. Disarankan untuk mengatur parameter dlf.catalog.endpoint ke titik akhir VPC DLF. Misalnya, jika Anda memilih wilayah China (Hangzhou), atur parameter dlf.catalog.endpoint ke dlf-vpc.cn-hangzhou.aliyuncs.com. Catatan Anda juga dapat menggunakan titik akhir publik DLF. Jika Anda memilih wilayah China (Hangzhou), atur parameter dlf.catalog.endpoint ke dlf.cn-hangzhou.aliyuncs.com. |
| dlf.catalog.akMode | Mode AccessKey layanan DLF. | Disarankan untuk mengatur parameter ini ke EMR_AUTO. |
| dlf.catalog.proxyMode | Mode proxy layanan DLF. | Disarankan untuk mengatur parameter ini ke DLF_ONLY. |
| dlf.catalog.uid | ID akun Alibaba Cloud Anda. | Untuk mendapatkan ID akun Alibaba Cloud Anda, kunjungi halaman Pengaturan Keamanan.![]() |
Contoh
Tabel Hudi berfungsi sebagai tabel eksternal Hive. Anda dapat menggunakan konektor Hive untuk menanyakan data dalam tabel Hudi. Untuk informasi lebih lanjut tentang cara membuat tabel Hudi dan menyinkronkan data dari tabel Hudi ke tabel Hive, lihat Integrasi Hudi dengan Spark SQL dan Penggunaan Dasar.
Berikut adalah contoh pembuatan tabel dan penanyakan data dalam tabel:
Masuk ke cluster Anda dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Cluster.
Jalankan perintah berikut untuk memulai CLI Spark SQL:
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'Jika output berisi informasi berikut, CLI Spark SQL telah dimulai:
spark-sql>Jalankan perintah berikut untuk membuat tabel uji bernama emr_test:
create table if not exists emr_test( id bigint, name string, price double ) using hudi options ( type = 'mor', primaryKey = 'id,name' );Jalankan perintah berikut untuk memasukkan data uji ke dalam tabel emr_test:
insert into emr_test select 1, 'a2', 10; insert into emr_test select 1, 'a1', 10; insert into emr_test select 2, 'a1', 20;CatatanEMR Spark SQL secara otomatis menyinkronkan data tabel Hudi ke metastore Hive atau DLF.
Tanyakan data dalam klien Trino.
Jalankan perintah berikut untuk membuka CLI Trino:
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoopJalankan perintah berikut untuk menanyakan data dalam tabel emr_test:
select * from emr_test;Output berikut dikembalikan:
_hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path | _hoodie_file_name | id | name | price ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+------- 20211025145616 | 20211025145616_0_1 | id:1,name:a2 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet | 1 | a2 | 10.0 20211025145629 | 20211025145629_0_1 | id:1,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet | 1 | a1 | 10.0 20211025145640 | 20211025145640_0_2 | id:2,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet | 2 | a1 | 20.0 (3 rows)
Perbarui data dalam CLI Spark SQL.
Jalankan perintah berikut untuk memulai CLI Spark SQL:
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'Jika output berisi informasi berikut, CLI Spark SQL telah dimulai:
spark-sql>Jalankan perintah berikut untuk memperbarui nilai price untuk entri data yang ID-nya 2:
update emr_test set price = price + 20 where id = 2;
Setelah pembaruan selesai, tanyakan data dalam klien Trino.
Jalankan perintah berikut untuk membuka CLI Trino:
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoopJalankan perintah berikut untuk menanyakan data dalam tabel emr_test:
select * from emr_test;Output berikut dikembalikan:
_hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path | _hoodie_file_name | id | name | price ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+------- 20211025145616 | 20211025145616_0_1 | id:1,name:a2 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet | 1 | a2 | 10.0 20211025145629 | 20211025145629_0_1 | id:1,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet | 1 | a1 | 10.0 20211025145640 | 20211025145640_0_2 | id:2,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet | 2 | a1 | 40.0 (3 rows)
