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 yang tersedia di http://svn.apache. org/viewvc/hive/branches/.

Otorisasi Hive

Amazon EMR mendukung otorisasi Hive untuk HDFS tetapi tidak untuk EMRFS dan Amazon S3. EMRCluster Amazon 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 perilaku yang persis sama jika jalur keluaran akhir masukHDFS. 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.

ACIDtransaksi dan Amazon S3

Amazon EMR 6.1.0 dan yang lebih baru mendukung transaksi Hive ACID (Atomicity, Consistency, Isolation, Durability) sehingga sesuai dengan ACID properti database. Dengan fitur ini, Anda dapat menjalankanINSERT,, UPDATEDELETE, dan MERGE operasi di tabel terkelola Hive dengan data di Amazon Simple Storage Service (Amazon S3).

Hive Hidup Panjang dan Proses () LLAP

LLAPfungsionalitas yang ditambahkan dalam versi 2.0 dari Apache Hive default tidak didukung di Hive 2.1.0 pada Amazon EMR rilis 5.0.

Amazon EMR versi 6.0.0 dan yang lebih baru mendukung fungsionalitas Live Long and Process (LLAP) untuk Hive. Untuk informasi selengkapnya, lihat Menggunakan Sarang LLAP.

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

Bagian ini mencakup perbedaan yang perlu dipertimbangkan sebelum Anda memigrasikan implementasi Hive dari Hive versi 1.0.0 di Amazon rilis 4.x ke Hive 2.x di EMR Amazon rilis 5.x. EMR

Perbedaan operasional dan pertimbangan

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

  • Penulisan langsung ke Amazon S3 dihilangkan: Perbedaan antara Hive 1.0.0 di EMR Amazon dan Apache Hive default telah dihilangkan. Hive 2.1.0 di Amazon EMR rilis 5.x sekarang membuat, membaca dari, dan menulis ke file sementara yang disimpan di Amazon S3. Akibatnya, untuk membaca dari dan menulis ke tabel yang sama Anda tidak lagi harus membuat tabel sementara di sistem HDFS file lokal cluster sebagai solusinya. 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 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 EMR rilis Amazon 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 Hive di Amazon EMR

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

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 EMR konsol Amazon 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 tempat skrip Anda berada di Amazon S3. Nilai harus dalam bentuk BucketName/path/ScriptName. Misalnya:s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q.
    Masukan lokasi S3 Secara opsional, tentukan URI tempat file input Anda berada di Amazon S3. Nilai harus dalam bentuk BucketName/path/. Jika ditentukan, ini akan diteruskan ke skrip Hive sebagai parameter bernamaINPUT. Sebagai contoh: s3://elasticmapreduce/samples/hive-ads/tables/.
    Lokasi Output S3 Secara opsional, tentukan di URI mana Anda ingin output disimpan di Amazon S3. Nilai harus dalam bentuk BucketName/path. Jika ditentukan, ini akan diteruskan ke skrip Hive sebagai parameter bernamaOUTPUT. Sebagai contoh: s3://amzn-s3-demo-bucket/hive-ads/output/.
    Pendapat Opsional, masukkan daftar argumen (string dipisahkan spasi) untuk lulus ke Hive. Jika Anda mendefinisikan variabel jalur dalam skrip Hive Anda bernama $ {SAMPLE}, 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:

    • Akhiri Gugus: Jika langkah gagal, mengakhiri gugus. Jika klaster memiliki perlindungan terminasi yang diaktifkan AND 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 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.3.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 menggunakan EMR perintah Amazon di AWS CLI, lihathttps://docs.aws.amazon.com/cli/latest/reference/emr.

Untuk meneruskan nilai variabel ke langkah-langkah Hive menggunakan Java SDK
  • Contoh berikut menunjukkan bagaimana untuk meneruskan variabel ke dalam langkah-langkah menggunakan. SDK Untuk informasi selengkapnya, lihat Kelas StepFactory dalam AWS SDK for Java APIReferensi.

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

Kueri Amazon EMR Hive untuk mengakomodasi sebagian skema DynamoDB

Amazon EMR Hive memberikan fleksibilitas maksimum saat menanyakan tabel DynamoDB dengan memungkinkan Anda menentukan subset kolom tempat Anda dapat memfilter data, daripada meminta 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
SELECT * FROM table_name; Memilih semua item (baris) dari tabel tertentu dan termasuk data dari semua kolom yang tersedia untuk item-item.
SELECT * FROM table_name WHERE field_name =value; Memilih beberapa item (baris) dari tabel tertentu dan termasuk data dari semua kolom yang tersedia untuk item-item.
SELECT column1_name, column2_name, column3_name FROM table_name; Memilih semua item (baris) dari tabel tertentu dan termasuk data dari beberapa kolom yang tersedia untuk item-item.
SELECT column1_name, column2_name, column3_name FROM table_name WHERE field_name =value; 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 yang dapat Anda atur 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 readThroughputPercent DynamoDB writeThroughputPercent dan pengaturan berdasarkan per tabel dalam definisi tabel. Skrip Amazon EMR Hive berikut menunjukkan cara mengatur 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");