

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

# Tingkatkan kinerja Hive
<a name="emr-hive-s3-performance"></a>

Amazon EMR menawarkan fitur untuk membantu mengoptimalkan kinerja saat menggunakan Hive untuk menanyakan, membaca, dan menulis data yang disimpan di Amazon S3.

S3 Select dapat meningkatkan kinerja kueri untuk file CSV dan JSON di beberapa aplikasi dengan “menekan” pemrosesan ke Amazon S3.

Komitter yang dioptimalkan EMRFS S3 adalah alternatif untuk [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)kelas, yang menghilangkan daftar dan mengganti nama operasi untuk meningkatkan kinerja saat menulis file Amazon S3 menggunakan EMRFS.

**Topics**
+ [Mengaktifkan komitmen yang dioptimalkan Hive EMRFS S3](hive-optimized-committer.md)
+ [Menggunakan S3 Select dengan Hive untuk meningkatkan performa](emr-hive-s3select.md)
+ [Optimasi MSCK](emr-msck-optimization.md)

# Mengaktifkan komitmen yang dioptimalkan Hive EMRFS S3
<a name="hive-optimized-committer"></a>

Hive EMRFS S3 Optimized Committer adalah cara alternatif yang menggunakan EMR Hive untuk menulis file untuk menyisipkan kueri saat menggunakan EMRFS. Committer menghilangkan daftar dan mengganti nama operasi yang dilakukan di Amazon S3 dan meningkatkan kinerja aplikasi. Fitur ini tersedia dimulai dengan EMR 5.34 dan EMR 6.5.

## Mengaktifkan committer
<a name="enabling-hive-committer"></a>

Jika Anda ingin mengaktifkan EMR Hive untuk digunakan untuk melakukan data sebagai default `HiveEMRFSOptimizedCommitter` untuk semua tabel terkelola dan eksternal Hive, gunakan konfigurasi berikut `hive-site` di EMR 6.5.0 atau EMR 5.34.0 cluster.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**catatan**  
Jangan aktifkan fitur ini saat `hive.exec.parallel` disetel ke`true`.

## Batasan
<a name="hive-committer-limitations"></a>

Batasan dasar berikut berlaku untuk tag:
+ Mengaktifkan Hive untuk menggabungkan file kecil secara otomatis tidak didukung. Logika komit Hive default akan digunakan bahkan ketika committer yang dioptimalkan diaktifkan.
+ Tabel HIVE ACID tidak didukung. Logika komit Hive default akan digunakan bahkan ketika committer yang dioptimalkan diaktifkan.
+ Nomenklatur penamaan file untuk file yang ditulis diubah dari Hive menjadi. `<task_id>_<attempt_id>_<copy_n>` `<task_id>_<attempt_id>_<copy_n>_<query_id>` Sebagai contoh, sebuah berkas bernama 

  `s3://warehouse/table/partition=1/000000_0`akan diubah menjadi`s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. `query_id`Berikut adalah kombinasi dari nama pengguna, cap waktu, dan UUID.
+ Ketika partisi khusus berada di sistem file yang berbeda (HDFS, S3), fitur ini dinonaktifkan secara otomatis. Logika komit Hive default akan digunakan saat diaktifkan.

# Menggunakan S3 Select dengan Hive untuk meningkatkan performa
<a name="emr-hive-s3select"></a>

**penting**  
Amazon S3 Select tidak lagi tersedia untuk pelanggan baru. Pelanggan Amazon S3 Select yang sudah ada dapat terus menggunakan fitur seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Dengan rilis Amazon EMR versi 5.18.0 dan yang lebih baru, Anda dapat menggunakan [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) dengan Hive di Amazon EMR. S3 Select memungkinkan aplikasi untuk mengambil hanya subset data dari suatu objek. Untuk Amazon EMR, pekerjaan komputasi penyaringan set data besar untuk pengolahan adalah "didorong turun" dari klaster ke Amazon S3, yang dapat meningkatkan performa di beberapa aplikasi dan mengurangi jumlah data yang ditransfer antara Amazon EMR dan Amazon S3.

S3 Select didukung dengan tabel Hive berdasarkan file CSV dan JSON dan dengan menetapkan `s3select.filter` variabel konfigurasi ke `true` selama sesi Hive Anda. Untuk informasi selengkapnya dan contoh tambahan, lihat [Menentukan S3 Select dalam kode Anda](#emr-hive-s3select-specify).

## Apakah S3 Select tepat untuk aplikasi saya?
<a name="emr-hive-s3select-apps"></a>

Kami menyarankan Anda membuat tolok ukur aplikasi dengan dan tanpa S3 Select untuk melihat apakah cocok dengan aplikasi Anda.

Gunakan pedoman berikut untuk menentukan apakah aplikasi Anda adalah kandidat untuk menggunakan S3 Select:
+ Permintaan Anda menyaring lebih dari setengah set data asli.
+ Predikat filter kueri permintaan Anda menggunakan kolom yang memiliki tipe data yang didukung oleh Amazon S3 Select. Untuk informasi selengkapnya, lihat [Jenis data](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.
+ Koneksi jaringan Anda antara Amazon S3 dan klaster Amazon EMR memiliki kecepatan transfer yang baik dan bandwidth yang tersedia. Amazon S3 tidak memampatkan tanggapan HTTP, sehingga ukuran respon kemungkinan akan meningkatkan file input terkompresi.

## Pertimbangan dan batasan
<a name="emr-hive-s3select-considerations"></a>
+ Enkripsi sisi server Amazon S3 dengan kunci enkripsi yang disediakan pelanggan (SSE-C) dan enkripsi di sisi klien tidak didukung. 
+ Properti `AllowQuotedRecordDelimiters` tidak didukung. Jika properti ini ditentukan, kueri akan gagal.
+ Hanya file CSV dan JSON dalam format UTF-8 yang didukung. Multi-line CSVs dan JSON tidak didukung.
+ Hanya file yang tidak terkompresi atau gzip atau bzip2 yang didukung.
+ Karakter komentar di baris terakhir tidak didukung.
+ Baris kosong di akhir file tidak diproses.
+ Hive di Amazon EMR mendukung tipe data primitif yang didukung S3 Select. Untuk informasi selengkapnya, lihat [Jenis data](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.

## Menentukan S3 Select dalam kode Anda
<a name="emr-hive-s3select-specify"></a>

Untuk menggunakan S3 Select dalam tabel Hive Anda, buat tabel dengan menentukan `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` sebagai `INPUTFORMAT` nama kelas, dan tenntukan nilai untuk `s3select.format` properti menggunakan `TBLPROPERTIES` klausul.

Secara default, S3 Select dinonaktifkan saat Anda menjalankan kueri. Aktifkan S3 Select dengan mengatur `s3select.filter` ke `true` di sesi Hive Anda seperti yang ditunjukkan di bawah ini. Contoh di bawah ini menunjukkan bagaimana menentukan S3 Select saat membuat tabel dari CSV yang mendasari dan file JSON dan kemudian mengkueri tabel menggunakan pernyataan pilihan sederhana.

**Example Pernyataan BUAT TABEL untuk tabel berbasis CSV**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example Pernyataan BUAT TABEL untuk tabel berbasis JSON**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example Pernyataan PILIH TABEL**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# Optimasi MSCK
<a name="emr-msck-optimization"></a>

Hive menyimpan daftar partisi untuk setiap tabel di metastore nya. Namun, ketika partisi langsung ditambahkan ke atau dihapus dari sistem file, metastore Hive tidak menyadari perubahan ini. [Perintah MSCK](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) memperbarui metadata partisi di metastore Hive untuk partisi yang langsung ditambahkan atau dihapus dari sistem file. Sintaks untuk perintah tersebut adalah:

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive mengimplementasikan perintah ini sebagai berikut:

1. Hive mengambil semua partisi untuk tabel dari metastore. Dari daftar path partisi yang tidak ada dalam sistem file kemudian membuat daftar partisi untuk drop dari metastore.

1. Hive mengumpulkan jalur partisi yang ada dalam sistem file, membandingkannya dengan daftar partisi dari metastore, dan menghasilkan daftar partisi yang perlu ditambahkan ke metastore.

1. Hive memperbarui metastore menggunakan`ADD`,`DROP`, atau mode. `SYNC`

**catatan**  
Ketika ada banyak partisi di metastore, langkah untuk memeriksa apakah partisi tidak ada dalam sistem file membutuhkan waktu lama untuk dijalankan karena panggilan `exists` API sistem file harus dilakukan untuk setiap partisi.

Di Amazon EMR 6.5.0, Hive memperkenalkan bendera yang disebut. `hive.emr.optimize.msck.fs.check` Saat diaktifkan, flag ini menyebabkan Hive memeriksa keberadaan partisi dari daftar jalur partisi dari sistem file yang dihasilkan pada langkah 2 di atas alih-alih membuat panggilan API sistem file. Di Amazon EMR 6.8.0, Hive mengaktifkan pengoptimalan ini secara default, menghilangkan kebutuhan untuk menyetel bendera. `hive.emr.optimize.msck.fs.check`