Pertimbangan dan batasan untuk menggunakan Hudi di Amazon EMR - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pertimbangan dan batasan untuk menggunakan Hudi di Amazon EMR

  • Bidang kunci catatan tidak boleh null atau kosong – Bidang yang Anda tentukan sebagai bidang kunci catatan tidak dapat memiliki null atau nilai kosong.

  • Skema diperbarui secara default pada upsert dan insert - Hudi menyediakan antarmuka, HoodieRecordPayload yang menentukan bagaimana input DataFrame dan dataset Hudi yang ada digabungkan untuk menghasilkan dataset baru yang diperbarui. Hudi menyediakan implementasi default dari kelas ini,OverwriteWithLatestAvroPayload, yang menimpa catatan yang ada dan memperbarui skema seperti yang ditentukan dalam input. DataFrame Untuk menyesuaikan logika ini gun menerapkan gabungan dan pembaruan parsial, Anda dapat memberikan implementasi HoodieRecordPayload antarmuka menggunakan DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY parameter.

  • Penghapusan membutuhkan skema — Saat menghapus, Anda harus menentukan kunci catatan, kunci partisi, dan bidang kunci pra-gabungkan. Kolom lainnya dapat dibuat null atau kosong, tapi skema penuh diperlukan.

  • Batasan tabel MOR — MoR tabel tidak mendukung savepointing. Anda dapat mengkueri tabel MOR menggunakan tampilan yang dioptimalkan untuk membaca atau tampilan waktu nyata (tableName_rt) dari Spark SQL, Presto, atau Hive. Menggunakan tampilan yang dioptimalkan untuk membaca hanya mengekspos data file dasar, dan tidak mengekspos tampilan gabungan data dasar dan log.

  • Sarang

    • Untuk mendaftarkan tabel di metastore Hive, Hudi mengharapkan server Hive Thrift akan berjalan pada port default 10000. Jika Anda mengganti port ini dengan port kustom, lewati pilihan HIVE_URL_OPT_KEY seperti yang ditunjukkan dalam contoh berikut.

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • Jenis timestamp data di Spark adalah terdaftar sebagai long jenis data di Hive, dan bukan sebagai jenis timestamp Hive.

  • Presto

    • Presto tidak mendukung pembacaan tabel waktu nyata MoR dalam versi Hudi di bawah 0.6.0.

    • Presto hanya mendukung kueri snapshot.

    • Untuk Presto agar benar dalam menafsirkan kolom set data Hudi, atur hive.parquet_use_column_names nilai ke true.

      • Untuk mengatur nilai sesi, di shell Presto, jalankan perintah berikut:

        set session hive.parquet_use_column_names=true
      • Untuk mengatur nilai pada tingkat klaster, gunakan presto-connector-hive klasifikasi konfigurasi untuk mengatur hive.parquet.use_column_names ke true, seperti yang ditunjukkan dalam contoh berikut. Untuk informasi selengkapnya, lihat Konfigurasikan aplikasi.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • HBase Indeks

    • HBase Versi yang digunakan untuk membangun Hudi mungkin berbeda dari yang tercantum dalam Panduan Rilis EMR. Untuk menarik dependensi yang benar untuk sesi Spark Anda, jalankan perintah berikut.

      spark-shell \ --jars /usr/lib/spark/external/lib/spark-avro.jar,/usr/lib/hudi/cli/lib/*.jar \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.hive.convertMetastoreParquet=false"
  • Pengaturan untuk kinerja terbaik — Untuk EMR 7.3+/ Hudi 0.15+, pelanggan disarankan untuk mengatur konfigurasi ini untuk mengurangi overhead serialisasi Kryo:

    --conf 'spark.kryo.registrator=org.apache.spark.HoodieKryoRegistrar'
    catatan

    Jika Anda menggunakan fine-grained access controle (FGAC) pada EMR Serverless, konfigurasi ini tidak diperlukan, karena pengguna harus menggunakan bukan. JavaSerializer KryoSerializer