Mengatur tabel Hive untuk menjalankan perintah Hive - Amazon EMR

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

Mengatur tabel Hive untuk menjalankan perintah Hive

Apache Hive adalah aplikasi gudang data yang dapat Anda gunakan untuk menanyakan data yang terdapat dalam EMR kluster Amazon menggunakan bahasa -like. SQL Untuk informasi selengkapnya tentang Hive, lihat http://hive.apache.org/.

Prosedur berikut mengasumsikan Anda telah membuat cluster dan menentukan Amazon EC2 key pair. Untuk mempelajari cara mulai membuat cluster, lihat Memulai Amazon EMR di Panduan EMR Manajemen Amazon.

Konfigurasikan Hive untuk digunakan MapReduce

Saat Anda menggunakan Hive di Amazon EMR untuk menanyakan tabel DynamoDB, kesalahan dapat terjadi jika Hive menggunakan mesin eksekusi default, misalnya. Untuk alasan ini, saat Anda membuat klaster dengan Hive yang terintegrasi dengan DynamoDB seperti yang dijelaskan di bagian ini, sebaiknya gunakan klasifikasi konfigurasi yang menetapkan Hive untuk digunakan. MapReduce Untuk informasi selengkapnya, lihat Konfigurasikan aplikasi.

Cuplikan berikut menunjukkan klasifikasi konfigurasi dan properti yang akan digunakan untuk disetel MapReduce sebagai mesin eksekusi untuk Hive:

[ { "Classification": "hive-site", "Properties": { "hive.execution.engine": "mr" } } ]
Untuk menjalankan perintah Hive secara interaktif
  1. Connect ke simpul utama. Untuk informasi selengkapnya, lihat Connect ke master node menggunakan SSH Panduan EMR Manajemen Amazon.

  2. Pada prompt perintah untuk simpul utama saat ini, ketik hive.

    Anda akan melihat prompt Hive: hive>

  3. Masukkan perintah Hive yang memetakan tabel dalam aplikasi Hive ke data di DynamoDB. Tabel ini bertindak sebagai referensi ke data yang disimpan di Amazon DynamoDB; data tidak disimpan secara lokal di Hive dan setiap kueri yang menggunakan tabel ini berjalan berlawanan data langsung di DynamoDB, menghabiskan kapasitas baca atau tulis tabel setiap kali perintah dijalankan. Jika Anda berharap untuk menjalankan beberapa perintah Hive atas set data yang sama, pertimbangkan untuk mengekspornya terlebih dahulu.

    Berikut ini menunjukkan sintaks untuk pemetaan tabel Hive ke tabel DynamoDB.

    CREATE EXTERNAL TABLE hive_tablename (hive_column1_name column1_datatype, hive_column2_name column2_datatype...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodb_tablename", "dynamodb.column.mapping" = "hive_column1_name:dynamodb_attribute1_name,hive_column2_name:dynamodb_attribute2_name...");

    Bila Anda membuat tabel di Hive dari DynamoDB, Anda harus membuatnya sebagai tabel eksternal menggunakan kata kunci EXTERNAL. Perbedaan antara tabel eksternal dan internal adalah bahwa data dalam tabel internal dihapus ketika tabel internal dibuang. Ini bukan perilaku yang diinginkan ketika terhubung ke Amazon DynamoDB, dan dengan demikian hanya tabel eksternal yang didukung.

    Misalnya, perintah Hive berikut membuat tabel bernama hivetable1 di Hive yang melakukan referensi pada tabel DynamoDB bernama dynamodbtable1. Tabel DynamoDB dynamodbtable1 memiliki skema kunci primer. hash-and-range Elemen kunci hash adalah name (tipe string), elemen kunci range adalah year (tipe numerik), dan setiap item memiliki nilai atribut untuk holidays (tipe set string).

    CREATE EXTERNAL TABLE hivetable1 (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays");

    Baris 1 menggunakan pernyataan CREATE EXTERNAL TABLE HiveQL. Untuk hivetable1, Anda perlu menetapkan kolom untuk setiap pasangan atribut nama-nilai dalam tabel DynamoDB, dan memberikan tipe data. Nilai-nilai ini tidak peka huruf besar kecil, dan Anda dapat memberikan kolom ini nama apapun (kecuali kata-kata yang tersimpan).

    Baris 2 menggunakan pernyataan STORED BY. Nilai dari STORED BY adalah nama kelas yang menangani hubungan antara Hive dan DynamoDB. Ia harus diatur ke 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'.

    Baris 3 menggunakan pernyataan TBLPROPERTIES untuk mengasosiasikan "hivetable1" dengan tabel dan skema yang benar di DynamoDB. Berikan TBLPROPERTIES nilai-nilai untuk parameter dynamodb.table.name dan parameter dynamodb.column.mapping. Nilai ini adalah peka huruf besar kecil.

    catatan

    Semua nama atribut DynamoDB untuk tabel harus memiliki kolom yang sesuai dalam tabel Hive. Bergantung pada EMR versi Amazon Anda, skenario berikut terjadi jika one-to-one pemetaan tidak ada:

    • Di Amazon EMR versi 5.27.0 dan yang lebih baru, konektor memiliki validasi yang memastikan pemetaan one-to-one antara nama atribut DynamoDB dan kolom dalam tabel Hive. Kesalahan akan terjadi jika one-to-one pemetaan tidak ada.

    • Di Amazon EMR versi 5.26.0 dan sebelumnya, tabel Hive tidak akan berisi pasangan nama-nilai dari DynamoDB. Jika Anda tidak memetakan atribut kunci utama DynamoDB, maka Hive akan menghasilkan kesalahan. Jika Anda tidak memetakan atribut kunci non-utama, tidak ada kesalahan yang dihasilkan, tetapi Anda tidak akan melihat data dalam tabel Hive. Jika tipe data tidak cocok, nilainya nol.

Kemudian Anda dapat mulai menjalankan operasi Hive pada hivetable1. Kueri berjalan terhadap hivetable1 secara internal dijalankan terhadap tabel DynamoDB dynamodbtable1 akun DynamoDB Anda, menghabiskan unit baca atau tulis dengan setiap eksekusi.

Ketika Anda menjalankan kueri Hive terhadap tabel DynamoDB, Anda perlu memastikan bahwa Anda telah menetapkan unit kapasitas baca dengan jumlah yang cukup.

Misalnya, anggaplah bahwa Anda telah menetapkan 100 unit kapasitas baca untuk tabel DynamoDB Anda. Ini akan memungkinkan Anda melakukan 100 baca, atau 409,600 byte, per detik. Jika tabel yang berisi 20GB data (21.474.836.480 byte), dan kueri Hive Anda melakukan pindai tabel penuh, Anda dapat memperkirakan berapa lama kueri dijalankan:

21.474.836.480 / 409.600 = 52.429 detik = 14,56 jam

Satu-satunya cara untuk mengurangi waktu yang diperlukan adalah menyesuaikan unit kapasitas baca pada tabel DynamoDB sumber. Menambahkan lebih banyak EMR node Amazon tidak akan membantu.

Dalam output Hive, persentase penyelesaian diperbarui ketika satu proses pemeta atau lebih telah selesai. Untuk tabel DynamoDB besar dengan pengaturan kapasitas baca ditetapkan yang rendah, output persentase penyelesaian mungkin tidak diperbarui dalam waktu yang lama; dalam kasus di atas, tugas akan muncul menjadi selesai 0% dalam beberapa jam. Untuk status lebih rinci tentang kemajuan pekerjaan Anda, buka EMR konsol Amazon; Anda akan dapat melihat status tugas mapper individual, dan statistik untuk pembacaan data. Anda juga dapat masuk ke antarmuka Hadoop pada simpul utama dan melihat statistik Hadoop. Ini akan menunjukkan status tugas peta masing-masing dan beberapa statistik baca data. Untuk informasi selengkapnya, lihat topik berikut:

Untuk informasi lebih lanjut tentang pernyataan HiveQL contoh untuk melakukan tugas-tugas seperti mengekspor atau mengimpor data dari DynamoDB dan menggabungkan tabel, lihat Contoh perintah Hive untuk mengekspor, mengimpor, dan membuat kueri data di DynamoDB.

Untuk membatalkan permintaan Hive

Ketika Anda menjalankan kueri Hive, respon awal dari server termasuk perintah untuk membatalkan permintaan. Untuk membatalkan permintaan kapan saja dalam proses, gunakan Perintah Bunuh dari respon server.

  1. Masukkan Ctrl+C untuk keluar dari klien baris perintah.

  2. Pada shell prompt, masukkan Perintah Bunuh dari respon server awal untuk permintaan Anda.

    Atau, Anda dapat menjalankan perintah berikut dari baris perintah node master untuk membunuh pekerjaan Hadoop, di mana job-id adalah pengidentifikasi pekerjaan Hadoop dan dapat diambil dari antarmuka pengguna Hadoop.

    hadoop job -kill job-id

Jenis data untuk Hive dan DynamoDB

Tabel berikut menunjukkan tipe data Hive yang tersedia, tipe DynamoDB default yang sesuai dengannya, dan tipe DynamoDB alternatif yang juga dapat dipetakan kepadanya.

Tipe Hive Tipe DynamoDB default Tipe DynamoDB alternatif
string

string (S)

bigint atau ganda

nomor (N)

biner

biner (B)

boolean

boolean () BOOL

array daftar (L)

set nomor (NS), set string (SS), atau set biner (BS)

peta<string,string> Item

peta (M)

peta<string,? > peta (M)
nol () NULL

Jika Anda ingin menulis data Hive Anda sebagai tipe DynamoDB alternatif yang sesuai, atau jika data DynamoDB Anda berisi nilai atribut dari tipe DynamoDB alternatif, maka Anda dapat menentukan kolom dan tipe DynamoDB dengan parameter dynamodb.type.mapping. Contoh berikut menunjukkan sintaks untuk menentukan pemetaan tipe alternatif.

CREATE EXTERNAL TABLE hive_tablename (hive_column1_name column1_datatype, hive_column2_name column2_datatype...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodb_tablename", "dynamodb.column.mapping" = "hive_column1_name:dynamodb_attribute1_name,hive_column2_name:dynamodb_attribute2_name...", "dynamodb.type.mapping" = "hive_column1_name:dynamodb_attribute1_datatype");

Tipe pemetaan parameter bersifat opsional, dan hanya harus ditentukan untuk kolom yang menggunakan tipe alternatif.

Misalnya, perintah Hive berikut membuat tabel bernama hivetable2 yang membuat referensi pada tabel DynamoDB dynamodbtable2. Hal ini mirip dengan hivetable1, kecuali bahwa ia memetakan kolom col3 ke tipe set string (SS).

CREATE EXTERNAL TABLE hivetable2 (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable2", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays", "dynamodb.type.mapping" = "col3:SS");

Di Hive, hivetable1 dan hivetable2 bersifat identik. Namun, ketika data dari tabel tersebut ditulis ke tabel DynamoDB yang sesuai, dynamodbtable1 akan berisi daftar, sementara dynamodbtable2 akan berisi set string.

Jika Anda ingin menulis nilai null Hive sebagai atribut tipe null DynamoDB, maka Anda dapat melakukannya dengan parameter dynamodb.null.serialization. Contoh berikut menunjukkan sintaks untuk menentukan serialisasi null.

CREATE EXTERNAL TABLE hive_tablename (hive_column1_name column1_datatype, hive_column2_name column2_datatype...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodb_tablename", "dynamodb.column.mapping" = "hive_column1_name:dynamodb_attribute1_name,hive_column2_name:dynamodb_attribute2_name...", "dynamodb.null.serialization" = "true");

Parameter serialisasi nol bersifal opsional, dan diatur menjadi false jika tidak ditentukan. Perhatikan bahwa atribut null DynamoDB dibaca sebagai nilai null dalam Hive terlepas dari pengaturan parameternya. Koleksi Hive dengan nilai null dapat ditulis ke DynamoDB hanya jika parameter serialisasi nol ditentukan sebagai true. Jika tidak, muncul kesalahan Hive.

Tipe bigint di Hive adalah sama dengan tipe panjang Java, dan tipe ganda Hive adalah sama dengan tipe ganda Java dalam hal presisi. Ini berarti bahwa jika Anda memiliki data numerik yang disimpan dalam DynamoDB yang memiliki presisi lebih tinggi daripada yang tersedia dalam tipe data Hive, dengan menggunakan Hive untuk mengekspor, impor, atau referensi data DynamoDB dapat menyebabkan kehilangan presisi atau kegagalan kueri Hive.

Ekspor tipe biner dari DynamoDB ke Amazon Simple Storage Service (Amazon S3) Simple Storage Service S3) atau disimpan sebagai string yang HDFS dienkode Base64. Jika Anda mengimpor data dari Amazon S3 HDFS atau ke tipe biner DynamoDB, itu harus dikodekan sebagai string Base64.

Pilihan Hive

Anda dapat mengatur pilihan Hive berikut untuk mengelola transfer data dari Amazon DynamoDB. Pilihan ini hanya bertahan untuk sesi Hive saat ini. Jika Anda menutup prompt perintah Hive dan membukanya kembali nanti pada klaster, pengaturan ini akan kembali ke nilai default.

Pilihan Hive Deskripsi
dynamodb.throughput.read.percent

Atur tingkat operasi baca untuk menjaga tingkat tingkat throughput ditetapkan DynamoDB Anda berada dalam kisaran dialokasikan untuk tabel Anda. Nilainya adalah antara 0.1 dan 1.5, secara inklusif.

Nilai 0,5 adalah tingkat baca default, yang berarti bahwa Hive akan mencoba untuk menggunakan setengah dari baca yang ditetapkan di seluruh sumber daya dalam tabel. Menaikkan nilai ini di atas 0,5 akan meningkatkan tingkat permintaan baca. Menurunkannya di bawah 0,5 akan menurunkan tingkat permintaan baca. Tingkat baca ini hanya perkiraan. Tingkat baca sebenarnya akan tergantung pada faktor-faktor seperti apakah ada distribusi kunci yang seragam dalam DynamoDB.

Jika Anda menemukan throughput ditetapkan Anda sering dilampaui oleh operasi Hive, atau jika lalu lintas baca langsung yang di-throttling terlalu banyak, maka kurangi nilainya menjadi kurang dari 0.5. Jika Anda memiliki kapasitas yang cukup dan ingin operasi Hive lebih cepat, atur nilai ini di atas 0.5. Anda juga dapat melakukan oversubscribe dengan mengaturnya hingga 1,5 jika Anda yakin ada operasi input/output yang tidak terpakai yang tersedia.

dynamodb.throughput.write.percent

Atur tingkat operasi tulis untuk menjaga tingkat throughput ditetapkan DynamoDB Anda berada dalam kisaran yang dialokasikan untuk tabel Anda. Nilainya adalah antara 0.1 dan 1.5, secara inklusif.

Nilai 0,5 adalah tingkat tulis default, yang berarti bahwa Hive akan mencoba untuk menggunakan setengah dari tulis yang ditetapkan di seluruh sumber daya dalam tabel. Menaikkan nilai ini di atas 0,5 akan meningkatkan tingkat permintaan tulis. Menurunkannya di bawah 0,5 akan menurunkan tingkat permintaan tulis. Tingkat tulis ini hanya perkiraan. Tingkat tulis sebenarnya akan tergantung pada faktor-faktor seperti apakah ada distribusi kunci yang seragam dalam DynamoDB

Jika Anda menemukan throughput ditetapkan Anda sering dilampaui oleh operasi Hive, atau jika lalu lintas tulis langsung yang di-throttling terlalu banyak, maka kurangi nilainya menjadi kurang dari 0.5. Jika Anda memiliki kapasitas yang cukup dan ingin operasi Hive lebih cepat, atur nilai ini di atas 0.5. Anda juga dapat melakukan oversubscribe dengan mengaturnya hingga 1,5 jika Anda yakin ada operasi input/output yang tidak terpakai yang tersedia atau ini adalah data awal yang diunggah ke tabel dan belum ada lalu lintas langsung.

dynamodb.endpoint

Tentukan titik akhir untuk layanan DynamoDB. Untuk informasi selengkapnya tentang titik akhir DynamoDB yang tersedia, lihat Wilayah dan titik akhir.

dynamodb.max.map.tasks

Tentukan jumlah maksimum tugas peta saat membaca data dari DynamoDB. Nilai ini harus sama dengan atau lebih besar dari 1.

dynamodb.retry.duration

Tentukan jumlah menit yang akan digunakan sebagai durasi batas waktu untuk mencoba kembali perintah Hive. Nilai ini harus integer yang sama dengan atau lebih besar dari 0. Durasi batas waktu default adalah dua menit.

Pilihan ini diatur menggunakan perintah SET seperti yang ditunjukkan dalam contoh berikut.

SET dynamodb.throughput.read.percent=1.0; INSERT OVERWRITE TABLE s3_export SELECT * FROM hiveTableName;