

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

# Hudi
<a name="emr-hudi"></a>

[Apache Hudi](https://hudi.apache.org/) adalah kerangka manajemen data sumber terbuka yang digunakan untuk menyederhanakan pengolahan data tambahan dan pengembangan data pipelin dengan menyediakan kemampuan menyisipkan, memperbarui, menambahkan, dan menghapus tingkat rekor. *Menambahkan* mengacu pada kemampuan untuk menyisipkan catatan ke dalam set data yang ada jika belum tersedia atau untuk memperbaruinya jika tersedia. Dengan mengelola peletakan data di Amazon S3 secara efisien, Hudi memungkinkan data untuk diserap dan diperbarui dalam waktu dekat secara lansgung. Hudi mempertahankan metadata dari tindakan yang dilakukan pada set data secara hati-hati untuk membantu memastikan bahwa tindakan bersifat atom dan konsisten.

Hudi terintegrasi dengan [Apache percikan](https://aws.amazon.com/emr/features/spark/), [Apache Hive](https://hive.apache.org/), dan [Presto](https://prestodb.github.io). Di Amazon EMR rilis versi 6.1.0 dan yang lebih baru, Hudi juga terintegrasi dengan [Trino (PrestoSQL)](https://trino.io/). 

Dengan versi rilis Amazon EMR 5.28.0 dan yang lebih baru, EMR menginstal komponen Hudi secara default saat Spark, Hive, Presto, atau Flink diinstal. Anda dapat menggunakan Spark atau DeltaStreamer utilitas Hudi untuk membuat atau memperbarui kumpulan data Hudi. *Anda dapat menggunakan Hive, Spark, Presto, atau Flink untuk menanyakan dataset Hudi secara interaktif atau membangun pipeline pemrosesan data menggunakan incremental pull.* Tarikan tambahan mengacu pada kemampuan untuk hanya menarik data yang berubah antara dua tindakan.

Fitur-fitur ini membuat Hudi cocok untuk kasus penggunaan berikut:
+ Bekerja dengan data streaming dari sensor dan perangkat Internet untuk Segala (IoT) lainnya yang memerlukan penyisipan data dan pembaruan peristiwa tertentu.
+ Mematuhi peraturan privasi data dalam aplikasi di mana pengguna mungkin memilih untuk dilupakan atau mengubah persetujuan tentang bagaimana data mereka dapat digunakan.
+ Menerapkan [ubah sistem penangkapan data (CDC)](https://en.wikipedia.org/wiki/Change_data_capture) yang memungkinkan Anda untuk menerapkan perubahan pada set data dari waktu ke waktu.

Tabel berikut mencantumkan versi Hudi yang termasuk dalam rilis terbaru seri Amazon EMR 7.x, bersama dengan komponen yang dipasang Amazon EMR dengan Hudi.

Untuk versi komponen yang diinstal dengan Hudi dalam rilis ini, lihat [Rilis 7.12.0](emr-7120-release.md) Versi Komponen.


**Informasi versi Hudi untuk emr-7.12.0**  

| Label Rilis Amazon EMR | Versi Hudi | Komponen Dipasang Dengan Hudi | 
| --- | --- | --- | 
| emr-7.12.0 | Hudi 1.0.2-amzn-1 | Not available. | 

Tabel berikut mencantumkan versi Hudi yang termasuk dalam rilis terbaru seri Amazon EMR 6.x, bersama dengan komponen yang dipasang Amazon EMR dengan Hudi.

Untuk versi komponen yang diinstal dengan Hudi dalam rilis ini, lihat Rilis Versi Komponen [6.15.0](emr-6150-release.md).


**Informasi versi Hudi untuk emr-6.15.0**  

| Label Rilis Amazon EMR | Versi Hudi | Komponen Dipasang Dengan Hudi | 
| --- | --- | --- | 
| emr-6.15.0 | Hudi 0.14.0-amzn-0 | Not available. | 

**catatan**  
Amazon EMR rilis 6.8.0 hadir dengan [Apache Hudi 0.11.1](https://hudi.apache.org/); Namun, Amazon EMR 6.8.0 cluster juga kompatibel dengan open-source dari Hudi 0.12.0. `hudi-spark3.3-bundle_2.12`

Tabel berikut mencantumkan versi Hudi yang termasuk dalam rilis terbaru seri Amazon EMR 5.x, bersama dengan komponen yang dipasang Amazon EMR dengan Hudi.

Untuk versi komponen yang diinstal dengan Hudi dalam rilis ini, lihat [Rilis 5.36.2](emr-5362-release.md) Versi Komponen.


**Informasi versi Hudi untuk emr-5.36.2**  

| Label Rilis Amazon EMR | Versi Hudi | Komponen Dipasang Dengan Hudi | 
| --- | --- | --- | 
| emr-5.36.2 | Hudi 0.10.1-amzn-1 | Not available. | 

**Topics**
+ [Cara kerja Hudi](emr-hudi-how-it-works.md)
+ [Pertimbangan dan batasan untuk menggunakan Hudi di Amazon EMR](emr-hudi-considerations.md)
+ [Buat sebuah klaster dengan Hudi terinstal](emr-hudi-installation-and-configuration.md)
+ [Bekerja dengan set data Hudi](emr-hudi-work-with-dataset.md)
+ [Gunakan Hudi CLI](emr-hudi-cli.md)
+ [Sejarah rilis Hudi](Hudi-release-history.md)

# Cara kerja Hudi
<a name="emr-hudi-how-it-works"></a>

Saat menggunakan Hudi dengan Amazon EMR, Anda dapat menulis data ke kumpulan data menggunakan Spark Data Source API atau utilitas Hudi. DeltaStreamer Hudi mengatur set data ke dalam struktur direktori yang dipartisi di bawah `basepath` yang mirip dengan tabel Hive tradisional. Spesifik tentang bagaimana data ditata sebagai file dalam direktori ini tergantung pada jenis set data yang Anda pilih. Anda dapat memilih Copy on Write (CoW) atau Merge on Read (MoR).

Terlepas dari jenis set data, setiap partisi dalam set data secara unik diidentifikasi oleh `partitionpath` relatif terhadap `basepath`. Dalam setiap partisi, catatan didistribusikan ke beberapa file data. Untuk informasi selengkapnya, lihat [Manajemen file](https://hudi.apache.org/docs/concepts.html#file-management) dalam dokumentasi Apache Hudi.

Setiap tindakan di Hudi memiliki komit yang sesuai, yang diidentifikasi oleh stempel waktu yang meningkat secara monoton yang dikenal sebagai *Instant*. Hudi menyimpan serangkaian semua tindakan yang dilakukan pada set data sebagai garis waktu. Hudi mengandalkan timeline untuk memberikan isolasi snapshot antara pembaca dan penulis, dan untuk mengaktifkan pemutaran kembali ke titik waktu sebelumnya. Untuk informasi lebih lanjut tentang tindakan yang dicatat Hudi dan keadaan tindakan, lihat [Timeline](https://hudi.apache.org/docs/concepts.html#timeline) dalam dokumentasi Apache Hudi.

## Memahami jenis penyimpanan set data: Copy on write vs. merge on read
<a name="emr-hudi-data-files"></a>

Ketika Anda membuat set data Hudi, Anda menentukan bahwa set data adalah antara Copy on write vs. merge on read.
+ **Copy on Write (CoW)** – Data disimpan dalam format kolumnar (Parket), dan setiap pembaruan menciptakan versi file baru selama penulisan. CoW adalah jenis penyimpanan default. 
+ **Merge on Read (MoR)** – Data disimpan menggunakan kombinasi kolumnar (Parket) dan format berbasis baris (Avro). Pembaruan dicatat ke file *delta* berbasis baris dan dipadatkan sesuai kebutuhan untuk membuat file kolumnar versi baru.

Dengan set data CoW, setiap kali ada pembaruan ke catatan, file yang berisi catatan ditulis ulang dengan nilai yang diperbarui. Dengan set data MoR, setiap kali ada pembaruan, Hudi hanya menulis baris untuk catatan yang berubah. MoR lebih cocok untuk beban kerja tulis atau perubahan berat dengan lebih sedikit pembacaan. CoW lebih cocok untuk beban kerja pembacaan berat pada data yang jarang berubah.

Hudi menyediakan tiga pandangan logis untuk mengakses data:
+ **Tampilan yang dioptimalkan untuk membaca** – Menyediakan set data berkomitmen terbaru dari tabel CoW dan set data kompak terbaru dari tabel MoR.
+ **Tampilan tambahan** — Menyediakan aliran perubahan antara dua tindakan dari set data CoW untuk memberi makan menyediakan tugas hilir dan mengekstrak, mengubah, memuat alur kerja (ETL).
+ **Tampilan waktu nyata** – Menyediakan data berkomitmen terbaru dari tabel MoR dengan menggabungkan file berbasis kolom dan baris secara inline.

Ketika Anda mengkueri tampilan yang dioptimalkan untuk membaca, kueri mengembalikan semua data yang dipadatkan tetapi tidak menyertakan komit delta terbaru. Mengkueri data ini memberikan performa baca yang baik tetapi menghilangkan data terbaru. Ketika Anda mengkueri tampilan waktu nyata, Hudi menggabungkan data yang dipadatkan dengan komit delta saat dibaca. Data terbaru tersedia untuk dikueri, tapi overhead komputasi penggabungan membuat kueri kurang berperforma. Kemampuan untuk mengkueri data yang dipadatkan atau data waktu nyata memungkinkan Anda untuk memilih antara performa dan fleksibilitas ketika Anda mengkueri.

Untuk informasi selengkapnya tentang jenis penyimpanan, lihat [Jenis & tampilan penyimpanan](https://hudi.apache.org/docs/concepts.html#storage-types--views) dalam dokumentasi Apache Hudi.

Hudi menciptakan dua tabel di metastore Hive untuk MoR: tabel dengan nama yang Anda tentukan, yang merupakan tampilan yang dioptimalkan untuk membaca, dan tabel dengan nama yang sama ditambahkan dengan `_rt`, yang merupakan tampilan waktu nyata. Anda dapat mengkueri kedua tabel.

## Mendaftarkan set data Hudi dengan metastore Anda
<a name="emr-hudi-hive-metastore"></a>

Ketika Anda mendaftarkan tabel Hudi dengan metastore Hive, Anda dapat mengkueri tabel Hudi menggunakan Hive, Spark SQL atau Presto seperti yang Anda lakukan untuk tabel lainnya. Selain itu, Anda dapat mengintegrasikan Hudi dengan AWS Glue dengan mengonfigurasi Hive dan Spark untuk menggunakan AWS Glue Data Catalog sebagai metastore. Untuk tabel MoR, Hudi mendaftarkan set data sebagai dua tabel di Metastore: tabel dengan nama yang Anda tentukan, yang merupakan tampilan yang dioptimalkan untuk membaca, dan tabel dengan nama yang sama ditambahkan dengan `_rt`, yang merupakan tampilan waktu nyata.

Anda mendaftarkan tabel Hudi dengan metastore Hive ketika Anda menggunakan Spark untuk membuat set data Hudi dengan mengatur `HIVE_SYNC_ENABLED_OPT_KEY` opsi untuk `"true"` dan menyediakan properti lain yang diperlukan. Untuk informasi selengkapnya, lihat [Bekerja dengan set data Hudi](emr-hudi-work-with-dataset.md). Selain itu, Anda dapat menggunakan utilitas baris perintah hive\$1sync\$1tool untuk mendaftarkan set data Hudi sebagai tabel di metastore Anda secara terpisah. 

# 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"
          }
        }
      ]
      ```
+ **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\$1/ Hudi 0.15\$1, pelanggan disarankan untuk mengatur konfigurasi ini untuk mengurangi overhead serialisasi Kryo: 

  ```
  --conf 'spark.kryo.registrator=org.apache.spark.HoodieKryoRegistrar'
  ```
**catatan**  
Jika Anda menggunakan kontrol akses halus (FGAC) di EMR Tanpa Server, konfigurasi ini tidak diperlukan, karena pengguna harus menggunakan bukan. JavaSerializer KryoSerializer

# Buat sebuah klaster dengan Hudi terinstal
<a name="emr-hudi-installation-and-configuration"></a>

Dengan Amazon EMR rilis versi 5.28.0 dan yang lebih baru, Amazon EMR menginstal komponen Hudi secara default ketika Spark, Hive, atau Presto diinstal. Untuk menggunakan Hudi di Amazon EMR, buat cluster dengan satu atau beberapa aplikasi berikut yang diinstal:
+ Hadoop
+ Hive
+ Spark
+ Presto
+ Flink

Anda dapat membuat cluster menggunakan API EMR Amazon AWS CLI, atau Amazon EMR. Konsol Manajemen AWS

## Untuk membuat cluster dengan Hudi menggunakan Konsol Manajemen AWS
<a name="emr-hudi-create-cluster-console"></a>

1. Arahkan ke konsol EMR Amazon baru dan pilih **Beralih ke konsol lama** dari navigasi samping. Untuk informasi selengkapnya tentang apa yang diharapkan saat beralih ke konsol lama, lihat [Menggunakan konsol lama](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in).

1. Pilih **Buat klaster**, **Buka opsi lanjutan**.

1. Dalam Konfigurasi Perangkat Lunak, pilih **emr-5.28.0** atau versi lebih baru untuk **Rilis** dan pilih **Hadoop**, **Hive**, **Spark**, **Presto**, dan **Tez** bersama dengan aplikasi lain yang diminta klaster Anda.

1. Konfigurasikan pilihan lain yang diperlukan untuk aplikasi Anda, dan kemudian pilih **Selanjutnya**.

1. Konfigurasikan opsi untuk **Perangkat keras** dan **Pengaturan klaster umum** seperti yang diinginkan.

1. Untuk **Opsi keamanan**, kami menyarankan Anda untuk memilih **pasangan kunci EC2** yang dapat Anda gunakan untuk terhubung ke baris perintah simpul utama menggunakan SSH. Hal ini memungkinkan Anda untuk menjalankan perintah Spark shell, perintah Hive CLI, dan perintah Hudi CLI yang dijelaskan dalam panduan ini.

1. Pilih opsi keamanan lain seperti yang diinginkan, dan kemudian pilih **Buat kluster**.

# Bekerja dengan set data Hudi
<a name="emr-hudi-work-with-dataset"></a>

Hudi mendukung penyisipan, perbaruan, dan penghapusan data dalam set data Hudi melalui Spark. Untuk informasi selengkapnya, lihat [Menulis tabel Hudi](https://hudi.apache.org/docs/writing_data.html) dalam dokumentasi Apache Hudi.

Contoh berikut menunjukkan cara meluncurkan shell Spark interaktif, gunakan Spark kirim, atau gunakan Amazon EMR Notebooks untuk bekerja dengan Hudi di Amazon EMR. Anda juga dapat menggunakan DeltaStreamer utilitas Hudi atau alat lain untuk menulis ke kumpulan data. Sepanjang bagian ini, contoh menunjukkan bekerja dengan set data menggunakan shell Spark saat terhubung ke simpul utama menggunakan SSH sebagai default `hadoop` pengguna.

## Luncurkan shell Spark menggunakan Amazon EMR 6.7 dan yang lebih baru
<a name="hudi-datasets-67"></a>

Saat menjalankan`spark-shell`,`spark-submit`, atau `spark-sql` menggunakan Amazon EMR 6.7.0 atau yang lebih baru, teruskan perintah berikut.

**catatan**  
Amazon EMR 6.7.0 menggunakan [Apache Hudi 0.11.0-amzn-0, yang berisi peningkatan signifikan dibandingkan versi Hudi](https://hudi.apache.org/) sebelumnya. Untuk informasi selengkapnya, lihat Panduan Migrasi [Apache Hudi 0.11.0](https://hudi.apache.org/releases/release-0.11.0/#migration-guide). Contoh pada tab ini mencerminkan perubahan ini.

**Untuk membuka shell Spark pada simpul utama**

1. Connect ke node utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke node utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Amazon EMR Management Guide*.

1. Masukkan perintah berikut untuk meluncurkan shell Spark. Untuk menggunakan PySpark shell, ganti *spark-shell* dengan*pyspark*.

   ```
   spark-shell --jars /usr/lib/hudi/hudi-spark-bundle.jar \
   --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \    
   --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog"  \
   --conf "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension"
   ```

## Luncurkan shell Spark menggunakan Amazon EMR 6.6 dan sebelumnya
<a name="hudi-datasets-67"></a>

Saat menjalankan`spark-shell`,`spark-submit`, atau `spark-sql` menggunakan Amazon EMR 6.6.x atau yang lebih lama, teruskan perintah berikut.

**catatan**  
Amazon EMR 6.2 dan 5.31 dan yang lebih baru (Hudi 0.6.x dan yang lebih baru) dapat menghilangkan dari konfigurasi. `spark-avro.jar`
Amazon EMR 6.5 dan 5.35 dan yang lebih baru (Hudi 0.9.x dan yang lebih baru) dapat menghilangkan dari konfigurasi. `spark.sql.hive.convertMetastoreParquet=false`
[Amazon EMR 6.6 dan 5.36 dan yang lebih baru (Hudi 0.10.x dan yang lebih baru) harus menyertakan `HoodieSparkSessionExtension` konfigurasi seperti yang dijelaskan dalam Panduan Percikan Versi: 0.10.0:](https://hudi.apache.org/docs/0.10.0/quick-start-guide/)   

  ```
  --conf  "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension" \
  ```

**Untuk membuka shell Spark pada simpul utama**

1. Connect ke node utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke node utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Amazon EMR Management Guide*.

1. Masukkan perintah berikut untuk meluncurkan shell Spark. Untuk menggunakan PySpark shell, ganti *spark-shell* dengan*pyspark*.

   ```
   spark-shell \
   --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \
   --conf "spark.sql.hive.convertMetastoreParquet=false" \
   --jars /usr/lib/hudi/hudi-spark-bundle.jar,/usr/lib/spark/external/lib/spark-avro.jar
   ```

## Gunakan Hudi dengan Amazon EMR Notebooks menggunakan Amazon EMR 6.7 dan yang lebih baru
<a name="hudi-datasets-notebooks"></a>

Untuk menggunakan Hudi dengan Amazon EMR Notebooks, Anda harus terlebih dahulu menyalin file jar Hudi dari sistem file lokal untuk HDFS pada simpul utama klaster notebook. Anda kemudian menggunakan editor notebook untuk mengonfigurasi notebook EMR Anda untuk menggunakan Hudi.

**Untuk menggunakan Hudi dengan Amazon EMR Notebooks**

1. Buat dan luncurkan sebuah klaster untuk Amazon EMR Notebooks. Untuk informasi lebih lanjut, lihat [Membuat klaster Amazon EMR untuk Notebooks](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-cluster.html) di *Panduan Pengelolaan Amazon EMR*.

1. Connect ke simpul utama klaster menggunakan SSH dan kemudian salin file jar dari filesystem lokal untuk HDFS seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, kita membuat direktori di HDFS untuk kejelasan manajemen file. Anda dapat memilih tujuan Anda sendiri dalam HDFS, jika diinginkan.

   ```
   hdfs dfs -mkdir -p /apps/hudi/lib
   ```

   ```
   hdfs dfs -copyFromLocal /usr/lib/hudi/hudi-spark-bundle.jar /apps/hudi/lib/hudi-spark-bundle.jar
   ```

1. Buka editor notebook, masukkan kode dari contoh berikut, dan jalankan.

   ```
   %%configure
   { "conf": {
               "spark.jars":"hdfs:///apps/hudi/lib/hudi-spark-bundle.jar",
               "spark.serializer":"org.apache.spark.serializer.KryoSerializer",
               "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog",
               "spark.sql.extensions":"org.apache.spark.sql.hudi.HoodieSparkSessionExtension"
             }}
   ```

## Gunakan Hudi dengan Amazon EMR Notebooks menggunakan Amazon EMR 6.6 dan yang lebih lama
<a name="hudi-datasets-notebooks-66"></a>

Untuk menggunakan Hudi dengan Amazon EMR Notebooks, Anda harus terlebih dahulu menyalin file jar Hudi dari sistem file lokal untuk HDFS pada simpul utama klaster notebook. Anda kemudian menggunakan editor notebook untuk mengonfigurasi notebook EMR Anda untuk menggunakan Hudi.

**Untuk menggunakan Hudi dengan Amazon EMR Notebooks**

1. Buat dan luncurkan sebuah klaster untuk Amazon EMR Notebooks. Untuk informasi lebih lanjut, lihat [Membuat klaster Amazon EMR untuk Notebooks](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-cluster.html) di *Panduan Pengelolaan Amazon EMR*.

1. Connect ke simpul utama klaster menggunakan SSH dan kemudian salin file jar dari filesystem lokal untuk HDFS seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, kita membuat direktori di HDFS untuk kejelasan manajemen file. Anda dapat memilih tujuan Anda sendiri dalam HDFS, jika diinginkan.

   ```
   hdfs dfs -mkdir -p /apps/hudi/lib
   ```

   ```
   hdfs dfs -copyFromLocal /usr/lib/hudi/hudi-spark-bundle.jar /apps/hudi/lib/hudi-spark-bundle.jar
   ```

   ```
   hdfs dfs -copyFromLocal /usr/lib/spark/external/lib/spark-avro.jar /apps/hudi/lib/spark-avro.jar
   ```

1. Buka editor notebook, masukkan kode dari contoh berikut, dan jalankan.

   ```
   { "conf": {
               "spark.jars":"hdfs:///apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-avro.jar",
               "spark.serializer":"org.apache.spark.serializer.KryoSerializer",
               "spark.sql.hive.convertMetastoreParquet":"false"
             }}
   ```

## Inisialisasi sesi Spark untuk Hudi
<a name="emr-hudi-initialize-session"></a>

Bila Anda menggunakan Scala, Anda harus mengimpor kelas berikut di sesi Spark Anda. Hal ini perlu dilakukan sekali per sesi Spark.

```
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.functions._
import org.apache.hudi.DataSourceWriteOptions
import org.apache.hudi.DataSourceReadOptions
import org.apache.hudi.config.HoodieWriteConfig
import org.apache.hudi.hive.MultiPartKeysValueExtractor
import org.apache.hudi.hive.HiveSyncConfig
import org.apache.hudi.sync.common.HoodieSyncConfig
```

## Tulis ke set data Hudi
<a name="emr-hudi-dataframe"></a>

Contoh berikut menunjukkan cara membuat DataFrame dan menulisnya sebagai kumpulan data Hudi.

**catatan**  
Untuk menyisipkan contoh kode ke shell Spark, ketik **:paste** pada prompt, tempel contoh, dan kemudian tekan **CTRL** \$1 **D**.

Setiap kali Anda menulis DataFrame ke kumpulan data Hudi, Anda harus menentukan. `DataSourceWriteOptions` Banyak dari opsi ini cenderung identik antara operasi tulis. Contoh berikut menentukan pilihan umum menggunakan `hudiOptions` variabel, yang digunakan contoh berikutnya.

### Menulis menggunakan Scala dengan Amazon EMR 6.7 dan yang lebih baru
<a name="scala-examples-67"></a>

**catatan**  
Amazon EMR 6.7.0 menggunakan [Apache Hudi 0.11.0-amzn-0, yang berisi peningkatan signifikan dibandingkan versi Hudi](https://hudi.apache.org/) sebelumnya. Untuk informasi selengkapnya, lihat Panduan Migrasi [Apache Hudi 0.11.0](https://hudi.apache.org/releases/release-0.11.0/#migration-guide). Contoh pada tab ini mencerminkan perubahan ini.

```
// Create a DataFrame
val inputDF = Seq(
 ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"),
 ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"),
 ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"),
 ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z"),
 ("104", "2015-01-02", "2015-01-01T12:15:00.512679Z"),
 ("105", "2015-01-02", "2015-01-01T13:51:42.248818Z")
 ).toDF("id", "creation_date", "last_update_time")

//Specify common DataSourceWriteOptions in the single hudiOptions variable 
val hudiOptions = Map[String,String](
  HoodieWriteConfig.TBL_NAME.key -> "tableName",
  DataSourceWriteOptions.TABLE_TYPE.key -> "COPY_ON_WRITE", 
  DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY -> "id",
  DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY -> "creation_date",
  DataSourceWriteOptions.PRECOMBINE_FIELD_OPT_KEY -> "last_update_time",
  DataSourceWriteOptions.HIVE_SYNC_ENABLED_OPT_KEY -> "true",
  DataSourceWriteOptions.HIVE_TABLE_OPT_KEY -> "tableName",
  DataSourceWriteOptions.HIVE_PARTITION_FIELDS_OPT_KEY -> "creation_date",
  HoodieSyncConfig.META_SYNC_PARTITION_EXTRACTOR_CLASS.key -> "org.apache.hudi.hive.MultiPartKeysValueExtractor",
  HoodieSyncConfig.META_SYNC_ENABLED.key -> "true",
  HiveSyncConfig.HIVE_SYNC_MODE.key -> "hms",
  HoodieSyncConfig.META_SYNC_TABLE_NAME.key -> "tableName",
  HoodieSyncConfig.META_SYNC_PARTITION_FIELDS.key -> "creation_date"
)

// Write the DataFrame as a Hudi dataset
(inputDF.write
    .format("hudi")
    .options(hudiOptions)
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY,"insert")
    .mode(SaveMode.Overwrite)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Menulis menggunakan Scala dengan Amazon EMR 6.6 dan sebelumnya
<a name="scala-examples-66"></a>

```
// Create a DataFrame
val inputDF = Seq(
 ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"),
 ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"),
 ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"),
 ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z"),
 ("104", "2015-01-02", "2015-01-01T12:15:00.512679Z"),
 ("105", "2015-01-02", "2015-01-01T13:51:42.248818Z")
 ).toDF("id", "creation_date", "last_update_time")

//Specify common DataSourceWriteOptions in the single hudiOptions variable 
val hudiOptions = Map[String,String](
  HoodieWriteConfig.TABLE_NAME -> "tableName",
  DataSourceWriteOptions.TABLE_TYPE_OPT_KEY -> "COPY_ON_WRITE", 
  DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY -> "id",
  DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY -> "creation_date",
  DataSourceWriteOptions.PRECOMBINE_FIELD_OPT_KEY -> "last_update_time",
  DataSourceWriteOptions.HIVE_SYNC_ENABLED_OPT_KEY -> "true",
  DataSourceWriteOptions.HIVE_TABLE_OPT_KEY -> "tableName",
  DataSourceWriteOptions.HIVE_PARTITION_FIELDS_OPT_KEY -> "creation_date",
  DataSourceWriteOptions.HIVE_PARTITION_EXTRACTOR_CLASS_OPT_KEY -> classOf[MultiPartKeysValueExtractor].getName
)

// Write the DataFrame as a Hudi dataset
(inputDF.write
    .format("org.apache.hudi")
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY, DataSourceWriteOptions.INSERT_OPERATION_OPT_VAL)
    .options(hudiOptions)
    .mode(SaveMode.Overwrite)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Menulis menggunakan PySpark
<a name="pyspark-examples"></a>

```
# Create a DataFrame
inputDF = spark.createDataFrame(
    [
        ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"),
        ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"),
        ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"),
        ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z"),
        ("104", "2015-01-02", "2015-01-01T12:15:00.512679Z"),
        ("105", "2015-01-02", "2015-01-01T13:51:42.248818Z"),
    ],
    ["id", "creation_date", "last_update_time"]
)

# Specify common DataSourceWriteOptions in the single hudiOptions variable
hudiOptions = {
'hoodie.table.name': 'tableName',
'hoodie.datasource.write.recordkey.field': 'id',
'hoodie.datasource.write.partitionpath.field': 'creation_date',
'hoodie.datasource.write.precombine.field': 'last_update_time',
'hoodie.datasource.hive_sync.enable': 'true',
'hoodie.datasource.hive_sync.table': 'tableName',
'hoodie.datasource.hive_sync.partition_fields': 'creation_date',
'hoodie.datasource.hive_sync.partition_extractor_class': 'org.apache.hudi.hive.MultiPartKeysValueExtractor'
}

# Write a DataFrame as a Hudi dataset
inputDF.write \
.format('org.apache.hudi') \
.option('hoodie.datasource.write.operation', 'insert') \
.options(**hudiOptions) \
.mode('overwrite') \
.save('s3://amzn-s3-demo-bucket/myhudidataset/')
```

**catatan**  
Anda mungkin melihat "hoodie" alih-alih Hudi dalam contoh kode dan pemberitahuan. Basis kode Hudi secara luas menggunakan ejaan "hoodie" lama.


**DataSourceWriteOptions Referensi untuk Hudi**  

| Opsi | Deskripsi | 
| --- | --- | 
|  TABLE\$1NAME  |  Nama tabel untuk mendaftarkan set data.  | 
|  TABLE\$1TYPE\$1OPT\$1KEY  |  Opsional. Menentukan apakah set data dibuat sebagai `"COPY_ON_WRITE"` atau `"MERGE_ON_READ"`. Nilai default-nya `"COPY_ON_WRITE"`.  | 
|  RECORDKEY\$1FIELD\$1OPT\$1KEY  |  Bidang kunci rekam yang nilainya akan digunakan sebagai `recordKey` komponen`HoodieKey`. Nilai aktual akan diperoleh dengan meminta `.toString()` pada nilai bidang. Bidang bersarang dapat ditentukan menggunakan notasi titik, misalnya,. `a.b.c`   | 
|  PARTITIONPATH\$1FIELD\$1OPT\$1KEY  |  Bidang jalur partisi yang nilainya akan digunakan sebagai `partitionPath` komponen dari`HoodieKey`. Nilai aktual akan diperoleh dengan meminta `.toString()` pada nilai bidang.  | 
|  PRECOMBINE\$1FIELD\$1OPT\$1KEY  |  Bidang yang digunakan dalam pra-menggabungkan sebelum penulisan yang sebenarnya. Ketika dua catatan memiliki nilai kunci yang sama, Hudi memilih tyang memiliki nilai terbesar untuk bidang penggabungan sebagaimana ditentukan oleh `Object.compareTo(..)`.  | 

Opsi berikut diperlukan hanya untuk mendaftarkan tabel set data Hudi metastore Anda. Jika Anda tidak mendaftar set data Hudi Anda sebagai tabel di metastore Hive, pilihan ini tidak diperlukan.


**DataSourceWriteOptions referensi untuk Hive**  

| Opsi | Deskripsi | 
| --- | --- | 
|  HIVE\$1DATABASE\$1OPT\$1KEY  |  Basis data Hive untuk disinkronkan ke. Nilai default-nya `"default"`.  | 
|  HIVE\$1PARTITION\$1EXTRACTOR\$1CLASS\$1OPT\$1KEY  |  Kelas yang digunakan untuk mengekstrak nilai bidang ke kolom partisi Hive.   | 
|  HIVE\$1PARTITION\$1FIELDS\$1OPT\$1KEY  |  Bidang dalam set data yang digunakan untuk menentukan kolom partisi Hive.  | 
|  HIVE\$1SYNC\$1ENABLED\$1OPT\$1KEY  |  Ketika diatur ke `"true"`, daftarkan set data dengan metastore Apache Hive. Nilai default-nya `"false"`.  | 
|  HIVE\$1TABLE\$1OPT\$1KEY  |  Diperlukan. Nama tabel di Hive untuk disinkronkan ke. Misalnya, `"my_hudi_table_cow"`.  | 
|  HIVE\$1USER\$1OPT\$1KEY  |  Opsional. Nama pengguna Hive untuk digunakan saat sinkronisasi. Misalnya, `"hadoop"`.  | 
|  HIVE\$1PASS\$1OPT\$1KEY  |  Opsional. Kata sandi Hive untuk pengguna yang ditentukan oleh `HIVE_USER_OPT_KEY`.  | 
|  HIVE\$1URL\$1OPT\$1KEY  |  URL metastore Hive.  | 

## Tambahkan data
<a name="emr-hudi-upsert-to-datasets"></a>

Contoh berikut menunjukkan bagaimana untuk meningkatkan data dengan menulis. DataFrame Berbeda dengan contoh penyisipan sebelumnya, nilai `OPERATION_OPT_KEY` diatur ke `UPSERT_OPERATION_OPT_VAL`. Selain itu, `.mode(SaveMode.Append)` ditentukan untuk menunjukkan bahwa catatan harus ditambahkan.

### Upsert menggunakan Scala dengan Amazon EMR 6.7 dan yang lebih baru
<a name="scala-upsert-67"></a>

**catatan**  
Amazon EMR 6.7.0 menggunakan [Apache Hudi 0.11.0-amzn-0, yang berisi peningkatan signifikan dibandingkan versi Hudi](https://hudi.apache.org/) sebelumnya. Untuk informasi selengkapnya, lihat Panduan Migrasi [Apache Hudi 0.11.0](https://hudi.apache.org/releases/release-0.11.0/#migration-guide). Contoh pada tab ini mencerminkan perubahan ini.

```
// Create a new DataFrame from the first row of inputDF with a different creation_date value
val updateDF = inputDF.limit(1).withColumn("creation_date", lit("new_value"))

(updateDF.write
    .format("hudi")
    .options(hudiOptions)
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY, "upsert")
    .mode(SaveMode.Append)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Upsert menggunakan Scala dengan Amazon EMR 6.6 dan sebelumnya
<a name="scala-upsert-66"></a>

```
// Create a new DataFrame from the first row of inputDF with a different creation_date value
val updateDF = inputDF.limit(1).withColumn("creation_date", lit("new_value"))

(updateDF.write
    .format("org.apache.hudi")
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY, DataSourceWriteOptions.UPSERT_OPERATION_OPT_VAL)
    .options(hudiOptions)
    .mode(SaveMode.Append)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Upsert menggunakan PySpark
<a name="pyspark-upsert"></a>

```
from pyspark.sql.functions import lit

# Create a new DataFrame from the first row of inputDF with a different creation_date value
updateDF = inputDF.limit(1).withColumn('creation_date', lit('new_value'))

updateDF.write \
    .format('org.apache.hudi') \
    .option('hoodie.datasource.write.operation', 'upsert') \
    .options(**hudiOptions) \
    .mode('append') \
    .save('s3://amzn-s3-demo-bucket/myhudidataset/')
```

## Hapus catatan
<a name="emr-hudi-delete-from-datasets"></a>

Untuk menghapus catatan, Anda dapat menambahkan muatan kosong. Dalam hal ini, pilihan `PAYLOAD_CLASS_OPT_KEY` menentukan `EmptyHoodieRecordPayload` kelas. Contoh menggunakan yang sama DataFrame,`updateDF`, digunakan dalam contoh upsert untuk menentukan catatan yang sama.

### Hapus menggunakan Scala dengan Amazon EMR 6.7 dan yang lebih baru
<a name="scala-delete-67"></a>

**catatan**  
Amazon EMR 6.7.0 menggunakan [Apache Hudi 0.11.0-amzn-0, yang berisi peningkatan signifikan dibandingkan versi Hudi](https://hudi.apache.org/) sebelumnya. Untuk informasi selengkapnya, lihat Panduan Migrasi [Apache Hudi 0.11.0](https://hudi.apache.org/releases/release-0.11.0/#migration-guide). Contoh pada tab ini mencerminkan perubahan ini.

```
(updateDF.write
    .format("hudi")
    .options(hudiOptions)
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY, "delete")
    .mode(SaveMode.Append)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Hapus menggunakan Scala dengan Amazon EMR 6.6 dan yang lebih lama
<a name="scala-delete-66"></a>

```
(updateDF.write
    .format("org.apache.hudi")
    .option(DataSourceWriteOptions.OPERATION_OPT_KEY, DataSourceWriteOptions.UPSERT_OPERATION_OPT_VAL)
    .option(DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY, "org.apache.hudi.common.model.EmptyHoodieRecordPayload")
    .mode(SaveMode.Append)
    .save("s3://amzn-s3-demo-bucket/myhudidataset/"))
```

### Hapus menggunakan PySpark
<a name="pyspark-delete"></a>

```
updateDF.write \
    .format('org.apache.hudi') \
    .option('hoodie.datasource.write.operation', 'upsert') \
    .option('hoodie.datasource.write.payload.class', 'org.apache.hudi.common.model.EmptyHoodieRecordPayload') \
    .options(**hudiOptions) \
    .mode('append') \
    .save('s3://amzn-s3-demo-bucket/myhudidataset/')
```

Anda juga dapat menghapus data dengan menyetel `OPERATION_OPT_KEY `ke `DELETE_OPERATION_OPT_VAL` untuk menghapus semua catatan dalam set data yang Anda kirimkan. Untuk petunjuk tentang melakukan penghapusan secara halus, dan untuk informasi lebih lanjut tentang menghapus data yang disimpan dalam tabel Hudi, lihat [Menghapus](https://hudi.apache.org/docs/writing_data.html#deletes) dalam dokumentasi Apache Hudi.

## Baca dari set data Hudi
<a name="emr-hudi-read-dataset"></a>

Untuk mengambil data pada saat ini, Hudi melakukan kueri snapshot secara default. Berikut ini adalah contoh mengkueri set data yang ditulis ke S3 di [Tulis ke set data Hudi](#emr-hudi-dataframe). Ganti *s3://amzn-s3-demo-bucket/myhudidataset* dengan jalur tabel Anda, dan tambahkan tanda bintang wildcard untuk setiap tingkat partisi, *ditambah satu* tanda bintang tambahan. Dalam contoh ini, ada satu tingkat partisi, jadi kami telah menambahkan dua simbol wildcard.

### Baca menggunakan Scala dengan Amazon EMR 6.7 dan yang lebih baru
<a name="scala-read-67"></a>

**catatan**  
Amazon EMR 6.7.0 menggunakan [Apache Hudi 0.11.0-amzn-0, yang berisi peningkatan signifikan dibandingkan versi Hudi](https://hudi.apache.org/) sebelumnya. Untuk informasi selengkapnya, lihat Panduan Migrasi [Apache Hudi 0.11.0](https://hudi.apache.org/releases/release-0.11.0/#migration-guide). Contoh pada tab ini mencerminkan perubahan ini.

```
val snapshotQueryDF = spark.read
    .format("hudi")
    .load("s3://amzn-s3-demo-bucket/myhudidataset") 
    .show()
```

### Baca menggunakan Scala dengan Amazon EMR 6.6 dan sebelumnya
<a name="scala-read-66"></a>

```
(val snapshotQueryDF = spark.read
    .format("org.apache.hudi")
    .load("s3://amzn-s3-demo-bucket/myhudidataset" + "/*/*"))

snapshotQueryDF.show()
```

### Baca menggunakan PySpark
<a name="pyspark-read"></a>

```
snapshotQueryDF = spark.read \
    .format('org.apache.hudi') \
    .load('s3://amzn-s3-demo-bucket/myhudidataset' + '/*/*')
    
snapshotQueryDF.show()
```

### Kueri tambahan
<a name="emr-hudi-incremental-query"></a>

Anda juga dapat melakukan kueri tambahan dengan Hudi untuk mendapatkan aliran catatan yang telah berubah sejak stempel waktu komit diberikan. Untuk melakukannya, atur `QUERY_TYPE_OPT_KEY` bidang ke `QUERY_TYPE_INCREMENTAL_OPT_VAL`. Kemudian, tambahkan nilai `BEGIN_INSTANTTIME_OPT_KEY` untuk mendapatkan semua catatan yang ditulis sejak waktu yang ditentukan. Permintaan tambahan biasanya sepuluh kali lebih efisien daripada rekan batch mereka karena hanya memproses catatan yang berubah.

Ketika Anda melakukan kueri tambahan, gunakan jalur tabel akar (dasar) tanpa tanda bintang wildcard yang digunakan untuk kueri Snapshot.

**catatan**  
Presto tidak mendukung kueri tambahan.

#### Kueri tambahan menggunakan Scala
<a name="scala-incremental-queries"></a>

```
val incQueryDF = spark.read
    .format("org.apache.hudi")
    .option(DataSourceReadOptions.QUERY_TYPE_OPT_KEY, DataSourceReadOptions.QUERY_TYPE_INCREMENTAL_OPT_VAL)
    .option(DataSourceReadOptions.BEGIN_INSTANTTIME_OPT_KEY, <beginInstantTime>)
    .load("s3://amzn-s3-demo-bucket/myhudidataset")
     
incQueryDF.show()
```

#### Kueri tambahan menggunakan PySpark
<a name="pyspark-incremental-queries"></a>

```
readOptions = {
  'hoodie.datasource.query.type': 'incremental',
  'hoodie.datasource.read.begin.instanttime': <beginInstantTime>,
}

incQueryDF = spark.read \
    .format('org.apache.hudi') \
    .options(**readOptions) \
    .load('s3://amzn-s3-demo-bucket/myhudidataset')
    
incQueryDF.show()
```

Untuk informasi lebih lanjut tentang membaca dari set data Hudi, lihat [Mengkueri tabel Hudi](https://hudi.apache.org/docs/querying_data.html) dalam dokumentasi Apache Hudi.

# Gunakan Hudi CLI
<a name="emr-hudi-cli"></a>

Anda dapat menggunakan Hudi CLI untuk mengelola set data Hudi untuk melihat informasi tentang komit, filesystem, statistik, dan banyak lagi. Anda juga dapat menggunakan CLI untuk melakukan pemadatan, menjadwalkan pemadatan, atau membatalkan pemadatan dijadwalkan secara manual. Untuk informasi lebih lanjut, lihat [Berinteraksi melalui CLI](https://hudi.apache.org/docs/cli/) di dokumentasi Apache Hudi.

**Untuk memulai Hudi CLI dan terhubung ke set data**

1. Connect ke simpul utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke simpul utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Panduan Pengelolaan Amazon EMR*.

1. Pada baris perintah, ketik `/usr/lib/hudi/cli/bin/hudi-cli.sh`.

   Prompt perintah berubah menjadi `hudi->`.

1. Gunakan perintah berikut untuk menyambung ke dataset. Ganti *s3://amzn-s3-demo-bucket/myhudidataset* dengan jalur ke kumpulan data yang ingin Anda kerjakan. Nilai yang kita gunakan adalah sama dengan nilai yang ditetapkan dalam contoh sebelumnya.

   ```
   connect --path s3://amzn-s3-demo-bucket/myhudidataset
   ```

   Perintah akan berubah untuk menyertakan set data yang Anda gunakan, seperti ditunjukkan dalam contoh berikut.

   ```
   hudi:myhudidataset->
   ```

Secara default, `hudi-cli.sh` skrip di Amazon EMR rilis 7.3.0 ke 7.8.0 menggunakan. `hudi-cli-bundle.jar` Jika Anda mengalami masalah, Anda dapat beralih kembali ke CLI Hudi klasik dengan perintah berikut:

```
/usr/lib/hudi/cli/bin/hudi-cli.sh --cliBundle false
```

Perintah ini menjalankan `hudi-cli.sh` skrip, menetapkan `--cliBundle` bendera, dan menginstruksikan CLI untuk menggunakan file JAR individual alih-alih JAR yang dibundel. Secara default, `--cliBundle` disetel ke true, yang berarti CLI menggunakan JAR yang dibundel sebagai gantinya.

## Menggunakan Amazon EMR 7.9.0 dan rilis yang lebih tinggi
<a name="emr-hudi-cli-start"></a>

**catatan**  
 Skrip **hudi-cli.sh** telah usang dalam rilis EMR 7.9.0 dan yang lebih tinggi. **Amazon EMR rilis 7.9.0 dan yang lebih tinggi menggunakan.jar. hudi-cli-bundle** 

**Untuk memulai CLI Hudi dan terhubung ke kumpulan data:**

1. Connect ke simpul utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke simpul utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Panduan Pengelolaan Amazon EMR*.

1. Pada baris perintah, ketik**/usr/lib/hudi/cli-bundle/bin/hudi- cli-with-bundle .sh** atau cukup ketik **hudi-cli-with-bundle**atau **>hudi-cli**.

   Prompt perintah berubah menjadi **hudi- >**.

1. Gunakan perintah berikut untuk menyambung ke dataset. Ganti **s3://amzn-s3-demo-bucket/myhudidataset** dengan jalur ke kumpulan data yang ingin Anda kerjakan. Nilai yang kita gunakan adalah sama dengan nilai yang ditetapkan dalam contoh sebelumnya.

   ```
   connect --path s3://amzn-s3-demo-bucket/myhudidataset
   ```

1. Perintah akan berubah untuk menyertakan set data yang Anda gunakan, seperti ditunjukkan dalam contoh berikut.

   ```
   hudi:myhudidataset->
   ```

# Sejarah rilis Hudi
<a name="Hudi-release-history"></a>

Tabel berikut mencantumkan versi Hudi yang disertakan dalam setiap versi rilis Amazon EMR, bersama dengan komponen yang diinstal dengan aplikasi. Untuk versi komponen di setiap rilis, lihat bagian Versi Komponen untuk rilis Anda di[Amazon EMR 7.x versi rilis](emr-release-7x.md),[Amazon EMR versi rilis 6.x](emr-release-6x.md), atau[Amazon EMR versi rilis 5.x](emr-release-5x.md).


**Informasi versi Hudi**  

| Label Rilis Amazon EMR | Versi Hudi | Komponen Dipasang Dengan Hudi | 
| --- | --- | --- | 
| emr-7.12.0 | 1.0.2-amzn-1 | Not available. | 
| emr-7.11.0 | 1.0.2-amzn-0 | Not available. | 
| emr-7.10.0 | 0.15.0-amzn-7 | Not available. | 
| emr-7.9.0 | 0.15.0-amzn-6 | Not available. | 
| emr-7.8.0 | 0.15.0-amzn-5 | Not available. | 
| emr-7.7.0 | 0.15.0-amzn-4 | Not available. | 
| emr-7.6.0 | 0.15.0-amzn-3 | Not available. | 
| emr-7.5.0 | 0.15.0-amzn-2 | Not available. | 
| emr-7.4.0 | 0.15.0-amzn-1 | Not available. | 
| emr-7.3.0 | 0.15.0-amzn-0 | Not available. | 
| emr-7.2.0 | 0.14.1-amzn-1 | Not available. | 
| emr-5.36.2 | 0.10.1-amzn-1 | Not available. | 
| emr-7.1.0 | 0.14.1-amzn-0 | Not available. | 
| emr-7.0.0 | 0.14.0-amzn-1 | Not available. | 
| emr-6.15.0 | 0.14.0-amzn-0 | Not available. | 
| emr-6.14.0 | 0.13.1-amzn-2 | Not available. | 
| emr-6.13.0 | 0.13.1-amzn-1 | Not available. | 
| emr-6.12.0 | 0.13.1-amzn-0 | Not available. | 
| emr-6.11.1 | 0.13.0-amzn-0 | Not available. | 
| emr-6.11.0 | 0.13.0-amzn-0 | Not available. | 
| emr-6.10.1 | 0.12.2-amzn-0 | Not available. | 
| emr-6.10.0 | 0.12.2-amzn-0 | Not available. | 
| emr-6.9.1 | 0.12.1-amzn-0 | Not available. | 
| emr-6.9.0 | 0.12.1-amzn-0 | Not available. | 
| emr-6.8.1 | 0.11.1-amzn-0 | Not available. | 
| emr-6.8.0 | 0.11.1-amzn-0 | Not available. | 
| emr-6.7.0 | 0.11.0-amzn-0 | Not available. | 
| emr-5.36.1 | 0.10.1-amzn-1 | Not available. | 
| emr-5.36.0 | 0.10.1-amzn-1 | Not available. | 
| emr-6.6.0 | 0.10.1-amzn-0 | Not available. | 
| emr-5.35.0 | 0.9.0-amzn-2 | Not available. | 
| emr-6.5.0 | 0.9.0-amzn-1 | Not available. | 
| emr-6.4.0 | 0.8.0-amzn-0 | Not available. | 
| emr-6.3.1 | 0.7.0-amzn-0 | Not available. | 
| emr-6.3.0 | 0.7.0-amzn-0 | Not available. | 
| emr-6.2.1 | 0.6.0-amzn-1 | Not available. | 
| emr-6.2.0 | 0.6.0-amzn-1 | Not available. | 
| emr-6.1.1 | 0.5.2-incubating-amzn-2 | Not available. | 
| emr-6.1.0 | 0.5.2-incubating-amzn-2 | Not available. | 
| emr-6.0.1 | 0.5.0-incubating-amzn-1 | Not available. | 
| emr-6.0.0 | 0.5.0-incubating-amzn-1 | Not available. | 
| emr-5.34.0 | 0.9.0-amzn-0 | Not available. | 
| emr-5.33.1 | 0.7.0-amzn-1 | Not available. | 
| emr-5.33.0 | 0.7.0-amzn-1 | Not available. | 
| emr-5.32.1 | 0.6.0-amzn-0 | Not available. | 
| emr-5.32.0 | 0.6.0-amzn-0 | Not available. | 
| emr-5.31.1 | 0.6.0-amzn-0 | Not available. | 
| emr-5.31.0 | 0.6.0-amzn-0 | Not available. | 
| emr-5.30.2 | 0.5.2-incubating | Not available. | 
| emr-5.30.1 | 0.5.2-incubating | Not available. | 
| emr-5.30.0 | 0.5.2-incubating | Not available. | 
| emr-5.29.0 | 0.5.0-incubating | Not available. | 
| emr-5.28.1 | 0.5.0-incubating | Not available. | 
| emr-5.28.0 | 0.5.0-incubating | Not available. | 