

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

# Perbedaan dan pertimbangan untuk Hive di Amazon EMR
<a name="emr-hive-differences"></a>

## Perbedaan antara Apache Hive di Amazon EMR dan Apache Hive
<a name="emr-hive-apache-diff"></a>

[Bagian ini menjelaskan perbedaan antara Hive di Amazon EMR dan versi default Hive yang tersedia di http://svn.apache. org/viewvc/hive/branches](http://svn.apache.org/viewvc/hive/branches/)/. 

### Otorisasi hive
<a name="emr-hive-authorization"></a>

 Dukungan Amazon EMR [Otorisasi hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization) untuk HDFS tetapi tidak untuk EMRFS dan Amazon S3. kluster Amazon EMR berjalan dengan otorisasi dinonaktifkan secara default.

### Perilaku penggabungan file hive dengan Amazon S3
<a name="emr-hive-filemerge"></a>

Apache Hive menggabungkan file kecil di akhir pekerjaan peta saja jika `hive.merge.mapfiles` benar dan penggabungan dipicu hanya jika ukuran output rata-rata pekerjaan kurang dari `hive.merge.smallfiles.avgsize` Pengaturan. Amazon EMR Hive memiliki persis perilaku yang sama jika jalan output akhir di HDFS. Jika path keluaran berada di Amazon S3, parameter `hive.merge.smallfiles.avgsize` akan diabaikan. Dalam situasi itu, tugas gabungan selalu dipicu jika `hive.merge.mapfiles` diatur ke `true`.

### Transaksi ACID dan Amazon S3
<a name="emr-hive-acid"></a>

Amazon EMR 6.1.0 dan kemudian mendukung Hive ACID (Atomicity, Consistency, Isolation, Durability) transaksi sehingga sesuai dengan sifat ACID database. Dengan fitur ini, Anda dapat menjalankan operasi INSERT, UPDATE, DELETE, dan MERGE di Hive dikelola tabel dengan data di Amazon Simple Storage Service (Amazon S3).

### Hive Hidup Panjang dan Proses (LLAP)
<a name="emr-hive-LLAP"></a>

[Fungsi LLAP](https://cwiki.apache.org/confluence/display/Hive/LLAP) yang ditambahkan ke dalam versi 2.0 Apache Hive default tidak didukung di Hive 2.1.0 di Amazon EMR rilis 5.0.

Amazon EMR versi 6.0.0 dan kemudian mendukung fungsi Live Long dan proses (LLAP) untuk Hive. Untuk informasi selengkapnya, lihat [Menggunakan Hive LLAP](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-llap.html). 

## Perbedaan Hive antara Amazon EMR rilis versi 4.x dan 5.x
<a name="emr-hive-diff"></a>

Bagian ini mencakup perbedaan untuk dipertimbangkan sebelum Anda bermigrasi implementasi Hive dari Hive versi 1.0.0 di Amazon EMR rilis 4.x ke Hive 2.x pada Amazon EMR rilis 5.x.

### Perbedaan operasional dan pertimbangan
<a name="emr-hive-diffs-ops"></a>
+ **Support ditambahkan untuk [ACID (atomicity, konsistensi, isolasi, dan daya tahan) transaksi](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions):** Perbedaan antara Hive 1.0.0 di Amazon EMR 4.x dan default Apache Hive telah dihilangkan.
+ **Langsung menulis ke Amazon S3 dihilangkan:** Perbedaan antara Hive 1.0.0 di Amazon EMR dan default Apache Hive telah dihilangkan. Hive 2.1.0 di Amazon EMR rilis 5.x sekarang menciptakan, membaca dari, dan menulis ke file sementara yang disimpan di Amazon S3. Sebagai hasilnya, untuk membaca dari dan menulis ke tabel yang sama Anda tidak lagi harus membuat tabel sementara di kluster lokal HDFS file sistem sebagai solusi. Jika Anda menggunakan bucket berversi, pastikan untuk mengelola file-file sementara ini seperti yang dijelaskan di bawah ini.
+ **Mengelola file temp saat menggunakan Amazon S3 ember berversi:** Ketika Anda menjalankan query Hive di mana tujuan data yang dihasilkan adalah Amazon S3, banyak file sementara dan direktori dibuat. Ini adalah perilaku baru seperti yang dijelaskan sebelumnya. Jika Anda menggunakan ember S3 berversi, file sementara ini mengacaukan Amazon S3 dan dikenakan biaya jika tidak dihapus. Sesuaikan aturan siklus hidup Anda sehingga data dengan `/_tmp` dihapus setelah waktu singkat, seperti lima hari. Lihat [Menetapkan konfigurasi siklus hidup](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) untuk informasi selengkapnya.
+ **Log4j diperbarui untuk log4j 2:** Jika Anda menggunakan log4j, Anda mungkin perlu mengubah konfigurasi logging Anda karena upgrade ini. Lihat [Apache log4j 2](http://logging.apache.org/log4j/2.x/) Untuk rincian.

### Perbedaan kinerja dan pertimbangan
<a name="emr-hive-diffs-perf"></a>
+ **Perbedaan kinerja dengan Tez:** Dengan Amazon EMR rilis 5.x, Tez adalah mesin eksekusi default untuk Hive, bukan. MapReduce Tez memberikan peningkatan kinerja untuk sebagian besar alur kerja.
+ **Tabel dengan banyak partisi:** Permintaan yang menghasilkan sejumlah besar partisi dinamis mungkin gagal, dan permintaan yang memilih dari tabel dengan banyak partisi mungkin memakan waktu lebih lama dari yang diharapkan untuk mengeksekusi. Misalnya, pilih dari 100.000 partisi dapat memakan waktu 10 menit atau lebih.

## Fitur tambahan dari Hive di Amazon EMR
<a name="emr-hive-additional-features"></a>

Amazon EMR memperluas Hive dengan fitur-fitur baru yang mendukung integrasi Hive dengan AWS layanan lain, seperti kemampuan membaca dan menulis ke Amazon Simple Storage Service (Amazon S3) dan DynamoDB.

### Variabel di Hive
<a name="emr-hive-variables"></a>

 Anda dapat menyertakan variabel dalam skrip Anda dengan menggunakan tanda dolar dan kurung kurawal. 

```
add jar ${LIB}/jsonserde.jar
```

 Anda melewati nilai variabel ini untuk Hive pada baris perintah menggunakan parameter `-d`, seperti pada contoh berikut: 

```
-d LIB=s3://elasticmapreduce/samples/hive-ads/lib
```

 Anda juga dapat lulus nilai-nilai ke dalam langkah-langkah yang mengeksekusi skrip Hive. 

**Untuk lulus nilai variabel ke langkah-langkah Hive menggunakan konsol**

1. [Buka konsol EMR Amazon di https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. Pilih **Buat kluster**.

1. Di bagian **Langkah**, untuk **Tambahkan Langkah**, pilih **Program Hive** dari daftar dan **Konfigurasi dan tambahkan**.

1.  Di **Tambahkan Langkah** dialog, menentukan parameter menggunakan tabel berikut sebagai panduan, dan kemudian pilih **Tambahkan**.     
[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/emr/latest/ReleaseGuide/emr-hive-differences.html)

1. Pilih nilai yang diperlukan dan pilih **Buat Cluster**.

**Untuk meneruskan nilai variabel ke langkah-langkah Hive menggunakan AWS CLI**

Untuk meneruskan nilai variabel ke langkah-langkah Hive menggunakan AWS CLI, gunakan `--steps` parameter dan sertakan daftar argumen.
+ 
**catatan**  
Karakter lanjutan baris Linux (\\) disertakan agar mudah dibaca Karakter ini bisa dihapus atau digunakan dalam perintah Linux. Untuk Windows, hapus atau ganti dengan tanda sisipan (^).

  ```
  aws emr create-cluster --name "{{Test cluster}}" --release-label {{emr-7.13.0}} \
  --applications Name={{Hive}} Name={{Pig}} --use-default-roles --ec2-attributes KeyName={{myKey}} --instance-type {{m5.xlarge}} --instance-count {{3}} \
  --steps Type={{Hive}},Name="{{Hive Program}}",ActionOnFailure={{CONTINUE}},Args=[-f,{{s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q}},-d,INPUT={{s3://elasticmapreduce/samples/hive-ads/tables}},-d,OUTPUT={{s3://amzn-s3-demo-bucket/hive-ads/output/}},-d,{{SAMPLE}}={{s3://elasticmapreduce/samples/hive-ads/}}]
  ```

  Untuk informasi selengkapnya tentang penggunaan perintah EMR Amazon di AWS CLI, lihat. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

**Untuk lulus nilai variabel ke langkah-langkah Hive menggunakan Java SDK**
+ Contoh berikut menunjukkan cara melewati variabel ke dalam langkah-langkah menggunakan SDK. Untuk informasi selengkapnya, lihat [Kelas StepFactory](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/util/StepFactory.html) di *Referensi AWS SDK untuk Java API*. 

  ```
  StepFactory stepFactory = new StepFactory();
  
     StepConfig runHive = new StepConfig()
       .withName("Run Hive Script")
       .withActionOnFailure("TERMINATE_JOB_FLOW")
       .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://amzn-s3-demo-bucket/script.q”,
        Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hive-ads/lib”));
  ```

### Amazon EMR Hive query untuk mengakomodasi skema DynamoDB parsial
<a name="emr-hive-partial-schema"></a>

Hive Amazon EMR memberikan fleksibilitas maksimum saat melakukan kueri tabel DynamoDB dengan memungkinkan Anda untuk menentukan subset kolom di mana Anda dapat menyaring data, daripada mewajibkan kueri untuk menyertakan semua kolom. Teknik kueri skema parsial ini efektif bila Anda memiliki skema basis data yang jarang dan ingin menyaring data berdasarkan beberapa kolom, seperti penyaringan pada stempel waktu. 

 Contoh berikut menunjukkan cara menggunakan query Hive untuk: 
+ Buat tabel DynamoDB.
+ Pilih subset item (baris) di DynamoDB dan selanjutnya mempersempit data ke kolom tertentu.
+ Menyalin data yang dihasilkan ke Amazon S3. 

```
DROP TABLE dynamodb; 
DROP TABLE s3;

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); 

CREATE EXTERNAL TABLE s3(map<String, String>)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
     LOCATION 's3://bucketname/path/subpath/';

INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01";
```

Tabel berikut menunjukkan sintaks query untuk memilih kombinasi item dari DynamoDB.


| Contoh kueri | Deskripsi hasil | 
| --- | --- | 
| PILIH\* DARI{{table\_name}}; | Memilih semua item (baris) dari tabel tertentu dan termasuk data dari semua kolom yang tersedia untuk item-item. | 
| PILIH \* DARI {{table\_name}} MANA {{field\_name}} ={{value}}; | Memilih beberapa item (baris) dari tabel tertentu dan termasuk data dari semua kolom yang tersedia untuk item-item. | 
| PILIH{{column1\_name}},{{column2\_name}}, {{column3\_name}} DARI{{table\_name}}; | Memilih semua item (baris) dari tabel tertentu dan termasuk data dari beberapa kolom yang tersedia untuk item-item. | 
| PILIH{{column1\_name}},{{column2\_name}}, {{column3\_name}} DARI {{table\_name}} MANA {{field\_name}} ={{value}}; | Memilih beberapa item (baris) dari tabel tertentu dan termasuk data dari beberapa kolom yang tersedia untuk item-item. | 

### Salin data antara tabel DynamoDB di Wilayah yang berbeda AWS
<a name="emr-hive-cross-region-ddb-copy"></a>

Amazon EMR Hive menyediakan `dynamodb.region` properti Anda dapat mengatur per tabel DynamoDB. Saat `dynamodb.region` diatur berbeda pada dua tabel, setiap data yang Anda salin antara tabel secara otomatis terjadi antara daerah tertentu.

 Contoh berikut menunjukkan kepada Anda cara membuat tabel DynamoDB dengan skrip Hive yang menetapkan `dynamodb.region` Properti:

**catatan**  
Per-tabel properti wilayah menimpa properti Hive global.

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.region" = "eu-west-1", 
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```

### Menetapkan nilai throughput DynamoDB per tabel
<a name="emr-hive-set-ddb-throughput"></a>

Amazon EMR Hive memungkinkan Anda untuk mengatur DynamoDB readThroughputPercent dan writeThroughputPercent pengaturan pada basis per tabel dalam definisi tabel. Berikut script Amazon EMR Hive menunjukkan bagaimana untuk mengatur nilai-nilai throughput. Untuk informasi selengkapnya tentang DynamoDB nilai throughput, lihat [Menentukan membaca dan menulis persyaratan untuk tabel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithDDTables.html#ProvisionedThroughput). 

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".4",
     "dynamodb.throughput.write.percent" = "1.0",
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```