全部产品
Search
文档中心

E-MapReduce:Menggunakan Hudi Metastore

更新时间:Jun 24, 2025

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.

ParameterDeskripsi
hoodie.metastore.typeMode implementasi metadata Hudi. Nilai yang valid:
  • LOCAL: menggunakan tabel metadata asli di Hudi.
  • METASTORE: menggunakan tabel metadata Hudi Metastore di EMR.
hoodie.metadata.enableMenentukan apakah akan menggunakan tabel metadata asli di Hudi. Nilai yang valid:
  • false: tidak menggunakan tabel metadata asli di Hudi.
    null Anda hanya dapat menggunakan tabel metadata Hudi Metastore di EMR jika parameter ini disetel ke false.
  • true: menggunakan tabel metadata asli di Hudi.
Anda dapat menyetel parameter ke nilai yang berbeda sesuai dengan kebutuhan bisnis Anda.
  • 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.

  1. Masuk ke kluster EMR Anda dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.
  2. 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>
  3. 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';
  4. Jalankan perintah berikut untuk menyisipkan data ke dalam tabel:
    insert into h0 select 1, 'a1', 10;
  5. Jalankan perintah berikut untuk keluar dari Spark SQL CLI:
    exit;
  6. Jalankan perintah berikut untuk melihat file hoodie.properties di direktori .hoodie dari tabel Hudi:
    hdfs dfs -cat /tmp/hudi_cases/h0/.hoodie/hoodie.properties
    Jika output berisi hoodie.metastore.type=METASTORE dan hoodie.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"]}]}