

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
<a name="emr-hudi-considerations"></a>
+ **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](emr-configure-apps.md).

      ```
      [
        {
          "Classification": "presto-connector-hive",
          "Properties": {
            "hive.parquet.use-column-names": "true"
          }
        }
      ]
      ```
+ **Indeks HBase**
  + Versi HBase yang digunakan untuk *membangun* Hudi mungkin berbeda dari apa 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.HoodieSparkKryoRegistrar'
  ```
**catatan**  
Jika Anda menggunakan kontrol akses halus (FGAC) di EMR Tanpa Server, konfigurasi ini tidak diperlukan, karena pengguna harus menggunakan bukan. JavaSerializer KryoSerializer