Perbedaan dan pertimbangan untuk Hive 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.

Perbedaan dan pertimbangan untuk Hive di Amazon EMR

Perbedaan antara Apache Hive di Amazon EMR dan Apache Hive

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

Otorisasi hive

Dukungan Amazon EMR Otorisasi hive 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

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

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)

Fungsi 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.

Perbedaan Hive antara Amazon EMR rilis versi 4.x dan 5.x

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

  • Support ditambahkan untuk transaksi ACID (atomicity, konsistensi, isolasi, dan daya tahan): Perbedaan antara Hive 1.0.0 di Amazon EMR 4.x dan default Apache Hive telah dihilangkan.

  • Penulisan langsung 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.

  • Kelola file temp saat menggunakan bucket versi Amazon S3: 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 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 Untuk rincian.

Perbedaan kinerja dan pertimbangan

  • 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

Amazon EMR meluas Hive dengan fitur baru yang mendukung integrasi Hive dengan lainnya AWS Layanan, seperti kemampuan membaca dari dan menulis ke Amazon Simple Storage Service (Amazon S3) dan DynamoDB.

Variabel di Hive

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 Amazon EMR di https://console.aws.amazon.com/emr.

  2. Pilih Buat kluster.

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

  4. Di Tambahkan Langkah dialog, menentukan parameter menggunakan tabel berikut sebagai panduan, dan kemudian pilih Tambahkan.

    Bidang Tindakan
    Lokasi Script S3* Tentukan URI di mana script Anda berada di Amazon S3. Nilai harus dalam bentuk BucketName/path/ScriptName. Sebagai contoh: s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q.
    Masukan lokasi S3 Opsional, tentukan URI di mana file input Anda berada di Amazon S3. Nilai harus dalam bentuk BucketName/path /. Jika ditentukan, ini akan diteruskan ke script Hive sebagai parameter bernama INPUT. Sebagai contoh: s3://elasticmapreduce/samples/hive-ads/tables/.
    Lokasi Output S3 Opsional, menentukan URI di mana Anda ingin output disimpan di Amazon S3. Nilai harus dalam BucketNamebentuk/ path. Jika ditentukan, ini akan diteruskan ke script Hive sebagai parameter bernama OUTPUT. Sebagai contoh: s3://mybucket/hive-ads/output/.
    Pendapat Opsional, masukkan daftar argumen (string dipisahkan spasi) untuk lulus ke Hive. Jika Anda mendefinisikan variabel path dalam script Hive Anda bernama $ {SAMPEL}, misalnya:
    CREATE EXTERNAL TABLE logs (requestBeginTime STRING, requestEndTime STRING, hostname STRING) PARTITIONED BY (dt STRING) \ ROW FORMAT serde 'com.amazon.elasticmapreduce.JsonSerde' WITH SERDEPROPERTIES ( 'paths'='requestBeginTime, requestEndTime, hostname' ) LOCATION '${SAMPLE}/tables/impressions';

    Untuk lulus nilai untuk variabel, ketik berikut di PendapatJendela:

    -d SAMPLE=s3://elasticmapreduce/samples/hive-ads/.

    Tindakan pada Kegagalan

    Ini menentukan apa cluster tidak dalam menanggapi kesalahan. Nilai yang mungkin untuk pengaturan ini adalah:

    • Mengakhiri klaster: Jika langkah gagal, mengakhiri gugus. Jika gugus telah penghentian perlindungan diaktifkan dan tetap hidup diaktifkan, itu tidak akan berakhir.

    • Batalkan dan tunggu: Jika langkah gagal, membatalkan langkah-langkah yang tersisa. Jika gugus tetap hidup diaktifkan, gugus tidak akan mengakhiri.

    • Lanjutkan: Jika langkah gagal, lanjutkan ke langkah berikutnya.

  5. Pilih nilai yang diperlukan dan pilih Buat Cluster.

Untuk lulus nilai variabel ke langkah-langkah Hive menggunakan AWS CLI

Untuk lulus nilai variabel ke langkah-langkah Hive menggunakan AWS CLI, gunakan --steps parameter dan termasuk daftar argumen.

  • catatan

    Karakter kelanjutan baris Linux (\) disertakan untuk memudahkan pembacaan. 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-5.36.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://mybucket/hive-ads/output/,-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]

    Untuk informasi selengkapnya tentang cara menggunakan Amazon EMR perintah di AWS CLI, lihat 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 di ReferensiAWS SDK for Java API.

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

Amazon EMR Hive query untuk mengakomodasi skema DynamoDB parsial

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 DI MANA field_name = nilai; 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 DI MANA field_name =nilai; Memilih beberapa item (baris) dari tabel tertentu dan termasuk data dari beberapa kolom yang tersedia untuk item-item.

Menyalin data antara tabel DynamoDB di berbagai AWS Kawasan

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

Amazon EMR Hive memungkinkan Anda untuk mengatur DynamoDB readThroughputPercent dan writeThroughputPercent pengaturan secara 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.

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");