Topik ini menjelaskan cara menggunakan Hudi Metastore di E-MapReduce (EMR).
Informasi latar belakang
Setiap kali Hudi melakukan operasi pada data, sebuah instant ditambahkan. Saat Anda meminta data, metadata dari setiap instant dibaca untuk mendapatkan partisi atau file yang valid terkait dengan instant tersebut. Selama proses pembacaan, sistem menghabiskan waktu yang lama untuk melakukan operasi daftar partisi dan daftar file karena operasi ini menyebabkan beban kerja I/O yang berat.
Danau data memiliki metadata unik, seperti instants dan beberapa versi file. Skema danau data berbeda dari skema tabel tradisional. Oleh karena itu, tim EMR memperkenalkan Hudi Metastore di cloud untuk menampung metadata instant dari tabel Hudi, serta merancang sistem manajemen siklus hidup untuk partisi dan file. Anda dapat mempercepat daftar partisi dan file dengan menggunakan Hudi Metastore.
Prasyarat
Kluster EMR V3.45.0 atau versi minor lebih baru, atau kluster EMR V5.11.0 atau versi minor lebih baru, harus dibuat di wilayah China (Hangzhou), China (Shanghai), atau China (Beijing), dengan DLF Unified Metadata dipilih untuk Metadata.
Parameter
Untuk menggunakan Hudi Metastore, lakukan langkah-langkah berikut: Pada tab Konfigurasi halaman layanan Hudi, klik tab hudi.default.conf. Kemudian, konfigurasikan parameter yang dijelaskan dalam tabel berikut.
| Parameter | Deskripsi |
| hoodie.metastore.type | Mode implementasi metadata Hudi. Nilai yang valid:
|
| hoodie.metadata.enable | Menentukan apakah akan menggunakan tabel metadata asli di Hudi. Nilai yang valid:
|
- Jangan gunakan tabel metadata
hoodie.metastore.type=LOCAL hoodie.metadata.enable=false - Gunakan tabel metadata asli di Hudi
hoodie.metastore.type=LOCAL hoodie.metadata.enable=true - Gunakan tabel metadata Hudi Metastore di EMR (default)
hoodie.metastore.type=METASTORE hoodie.metadata.enable=false
Contoh
Contoh berikut menjelaskan cara menggunakan tabel metadata Hudi Metastore di EMR dan mengaktifkan fitur akselerasi Hudi Metastore dengan menggunakan Spark SQL CLI.
- Masuk ke kluster EMR Anda dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.
- Jalankan perintah berikut untuk membuka Spark SQL CLI. Dalam contoh ini, Spark 3 digunakan.
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, Spark SQL CLI telah dibuka:spark-sql> - Jalankan perintah berikut untuk membuat tabel Hudi:
create table h0( id bigint, name string, price double ) using hudi tblproperties ( primaryKey = 'id', preCombineField = 'id' ) location '/tmp/hudi_cases/h0'; - Jalankan perintah berikut untuk menyisipkan data ke dalam tabel:
insert into h0 select 1, 'a1', 10; - Jalankan perintah berikut untuk keluar dari Spark SQL CLI:
exit; - Jalankan perintah berikut untuk melihat file hoodie.properties di direktori .hoodie dari tabel Hudi:
hdfs dfs -cat /tmp/hudi_cases/h0/.hoodie/hoodie.propertiesJika output berisihoodie.metastore.type=METASTOREdanhoodie.metastore.table.id, Hudi Metastore digunakan.hoodie.metastore.catalog.id= hoodie.table.precombine.field=id hoodie.datasource.write.drop.partition.columns=false hoodie.table.type=COPY_ON_WRITE hoodie.archivelog.folder=archived hoodie.timeline.layout.version=1 hoodie.table.version=5 hoodie.metastore.type=METASTORE hoodie.table.recordkey.fields=id hoodie.datasource.write.partitionpath.urlencode=false hoodie.database.name=test_db hoodie.table.keygenerator.class=org.apache.hudi.keygen.NonpartitionedKeyGenerator hoodie.table.name=h0 hoodie.datasource.write.hive_style_partitioning=true hoodie.metastore.table.id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hoodie.table.checksum=3349919362 hoodie.table.create.schema={"type"\:"record","name"\:"h0_record","namespace"\:"hoodie.h0","fields"\:[{"name"\:"_hoodie_commit_time","type"\:["string","null"]},{"name"\:"_hoodie_commit_seqno","type"\:["string","null"]},{"name"\:"_hoodie_record_key","type"\:["string","null"]},{"name"\:"_hoodie_partition_path","type"\:["string","null"]},{"name"\:"_hoodie_file_name","type"\:["string","null"]},{"name"\:"id","type"\:["long","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"price","type"\:["double","null"]}]}