Konektor Hive memungkinkan Anda menjalankan kueri dan menganalisis data yang disimpan di gudang data Hive.
Latar Belakang
- File data dalam berbagai format, biasanya disimpan di Hadoop Distributed File System (HDFS) atau sistem penyimpanan objek seperti Alibaba Cloud OSS.
- Metadata yang memetakan file data ke skema dan tabel, disimpan di database seperti MySQL, dan diakses melalui Hive Metastore Service (HMS).
- Bahasa kueri bernama HiveQL, yang berjalan di atas kerangka kerja komputasi terdistribusi seperti MapReduce atau Tez.
Prasyarat
Anda telah membuat kluster DataLake atau kluster Hadoop dan memilih layanan Presto. Untuk petunjuknya, lihat Buat kluster.
Batasan
- Konektor Hive memerlukan Hive Metastore Service agar dikonfigurasi.
- Konektor Hive mendukung berbagai sistem penyimpanan terdistribusi, termasuk HDFS, Alibaba Cloud OSS, dan sistem lain yang kompatibel dengan OSS. Node koordinator dan semua node pekerja harus memiliki akses jaringan ke Hive Metastore maupun sistem penyimpanan dasarnya. Secara default, Hive Metastore berkomunikasi melalui protokol Thrift pada port 9083.
Memodifikasi konfigurasi konektor Hive
Untuk memodifikasi konfigurasi konektor Hive, lihat Konfigurasikan konektor.
Konfigurasi konektor default
| Parameter | Deskripsi |
| hive.recursive-directories | Mengaktifkan pembacaan data dari subdirektori lokasi tabel atau partisi. Ini mirip dengan properti hive.mapred.supports.subdirectories di Hive. |
| hive.metastore.uri | URI untuk menghubungkan ke Hive Metastore menggunakan protokol Thrift. Nilai default berformat |
| hive.config.resources | Daftar file konfigurasi HDFS yang dipisahkan koma. File-file ini harus ada di semua host Presto. Penting Konfigurasikan parameter ini hanya jika diperlukan akses ke HDFS. |
| hive.delta-table-enabled | Menentukan apakah Presto dapat membaca tabel Delta Lake. Nilai yang valid adalah:
|
| hive.delta-compatible-mode-enabled | Menentukan apakah mode kompatibilitas untuk tabel Delta Lake diaktifkan. Nilai yang valid adalah:
|
| hive.hdfs.impersonation.enabled | Menentukan apakah impersonasi pengguna diaktifkan. Nilai yang valid adalah:
|
Konfigurasi untuk beberapa kluster Hive
Jika Anda memiliki beberapa kluster Hive, Anda dapat menambahkan beberapa file katalog ke direktori etc/catalog. Pastikan setiap file memiliki ekstensi .properties.
Sebagai contoh, jika file properties bernama sales.properties, Presto menggunakan konfigurasi konektor dalam file tersebut untuk membuat katalog bernama sales.
Konfigurasi HDFS
hive.config.resources untuk mereferensikan file konfigurasi HDFS yang diperlukan.- Sertakan hanya himpunan minimum properti yang diperlukan dalam file untuk mencegah ketidakcocokan.
- File konfigurasi harus tersedia di semua host Presto. Jika Anda mereferensikan file konfigurasi Hadoop yang sudah ada, pastikan untuk menyalinnya ke semua node Presto yang tidak menjalankan Hadoop.
Username dan izin HDFS
Sebelum menjalankan pernyataan CREATE TABLE atau CREATE TABLE AS apa pun untuk tabel Hive di Presto, pastikan pengguna yang digunakan Presto untuk mengakses HDFS memiliki izin ke direktori warehouse Hive. Direktori warehouse Hive ditentukan oleh variabel konfigurasi hive.metastore.warehouse.dir dalam file hive-site.xml. Nilai default-nya adalah /user/hive/warehouse.
Tipe file yang didukung
| Tipe file | Catatan |
| ORC | Tidak ada |
| Parquet | Tidak ada |
| Avro | Tidak ada |
| RCText | RCFile yang menggunakan ColumnarSerDe. |
| RCBinary | RCFile yang menggunakan LazyBinaryColumnarSerDe. |
| SequenceFile | Tidak ada |
| JSON | Menggunakan org.apache.hive.hcatalog.data.JsonSerDe. |
| CSV | Menggunakan org.apache.hadoop.hive.serde2.OpenCSVSerde. |
| TextFile | Tidak ada |
Tipe tabel yang didukung
| Tipe | Deskripsi |
| Tabel ACID | Saat terhubung ke Hive Metastore versi 3.x, konektor Hive dapat membaca dan menulis ke tabel insert-only dan tabel ACID. Konektor ini sepenuhnya mendukung partisi dan bucket. Konektor ini mendukung operasi DELETE dan UPDATE tingkat baris untuk tabel ACID. Namun, tidak mendukung operasi UPDATE pada kolom kunci partisi dan kolom bucket. Konektor ini tidak mendukung kueri terhadap tabel ACID yang dibuat oleh Hive Streaming Ingest. Untuk informasi lebih lanjut, lihat Streaming Data Ingest. |
| materialized view | Konektor Hive dapat membaca data dari materialized view Hive. Di Presto, tampilan ini disajikan sebagai tabel reguler yang read-only. |
Tampilan Hive
Tampilan Hive didefinisikan dalam HiveQL dan disimpan di Hive Metastore Service.
| Mode | Deskripsi |
| Disabled | Logika bisnis dan data yang dikodekan dalam tampilan tidak terlihat di Presto. Secara default, Presto mengabaikan tampilan Hive. |
| Legacy | Implementasi sederhana yang memungkinkan Presto membaca data dari tampilan Hive. Untuk mengaktifkan mode ini, atur Untuk mengaktifkan akses legacy sementara untuk katalog tertentu, atur properti session katalog Karena HiveQL sangat mirip dengan SQL, mode legacy menginterpretasikan kueri HiveQL tampilan sebagai SQL standar tanpa translasi. Pendekatan ini berfungsi untuk tampilan Hive sederhana tetapi dapat menyebabkan masalah pada kueri kompleks. Misalnya, jika fungsi HiveQL memiliki signature yang sama dengan fungsi SQL tetapi perilaku berbeda, hasilnya mungkin berbeda. Dalam kasus ekstrem, kueri mungkin gagal diurai atau dieksekusi. |
| Experimental | Mode ini menganalisis, memproses, dan menulis ulang tampilan Hive, termasuk ekspresi dan pernyataannya. Untuk mengaktifkan mode ini, atur Mode ini belum mendukung fitur-fitur berikut:
|
Properti konfigurasi
Properti konfigurasi Hive
Konektor Hive mendukung akselerasi dengan JindoTable. Kluster EMR menyertakan dua konektor Hive bawaan: hive.properties dan hive-acc.properties. File hive-acc.properties mencakup JindoTable Native Engine untuk mengoptimalkan dan mempercepat file dalam format ORC atau Parquet. Lihat dokumentasi untuk versi SmartData Anda. Untuk detailnya, lihat Aktifkan akselerasi kueri native.
| Parameter | Deskripsi |
| hive.config.resources | Daftar file konfigurasi HDFS yang dipisahkan koma. File-file ini harus ada di semua host Presto. Catatan Konfigurasikan properti ini hanya jika diperlukan akses ke HDFS. |
| hive.recursive-directories | Mengizinkan pembacaan data dari subdirektori lokasi tabel atau partisi, mirip dengan properti Hive hive.mapred.supports.subdirectories. |
| hive.ignore-absent-partitions | Mengabaikan partisi jika lokasi sistem file-nya tidak ada, alih-alih menggagalkan kueri. Hal ini dapat menyebabkan data dilewatkan. Nilai default adalah false. |
| hive.storage-format | Menentukan format file default untuk tabel baru. Nilai default adalah ORC. |
| hive.compression-codec | Menentukan kodek kompresi yang digunakan saat menulis file. Nilai yang valid: NONE, SNAPPY, LZ4, ZSTD, atau GZIP. Nilai default adalah GZIP. |
| hive.force-local-scheduling | Memaksa split dijadwalkan pada node yang sama dengan Hadoop DataNode. Konfigurasi ini meningkatkan efisiensi untuk instalasi tempat Presto berada di node yang sama dengan setiap DataNode. Nilai default adalah false. |
| hive.respect-table-format | Mengontrol apakah partisi baru menggunakan format tabel yang sudah ada atau format Presto. Nilai yang valid:
|
| hive.immutable-partitions | Mengontrol apakah data baru dapat dimasukkan ke partisi yang sudah ada. Jika diatur ke true, Nilai default adalah false. |
| hive.insert-existing-partitions-behavior | Menentukan perilaku saat memasukkan data ke partisi yang sudah ada. Nilai yang valid:
|
| hive.create-empty-bucket-files | Mengontrol apakah file kosong dibuat untuk bucket kosong. Nilai yang valid:
|
| hive.max-partitions-per-writers | Jumlah maksimum partisi per penulis. Nilai default adalah 100. |
| hive.max-partitions-per-scan | Jumlah maksimum partisi untuk satu pemindaian tabel. Nilai default adalah 100.000. |
| hive.hdfs.authentication.type | Menentukan tipe autentikasi HDFS. Nilai yang valid:
|
| hive.hdfs.impersonation.enabled | Mengaktifkan impersonasi pengguna HDFS. Nilai yang valid:
|
| hive.hdfs.trino.principal | Principal Kerberos yang digunakan Presto untuk menghubungkan ke HDFS. |
| hive.hdfs.trino.keytab | Lokasi file keytab klien HDFS. |
| hive.dfs.replication | Faktor replikasi HDFS. |
| hive.security | Nilai default adalah legacy. Untuk informasi lebih lanjut, lihat Konfigurasi keamanan konektor Hive. |
| security.config-file | Menentukan path ke file konfigurasi yang digunakan saat hive.security=file diatur. |
| hive.non-managed-table-writes-enabled | Mengaktifkan penulisan ke tabel Hive non-managed (eksternal). Nilai default adalah false. |
| hive.non-managed-table-creates-enabled | Mengaktifkan pembuatan tabel Hive non-managed (eksternal). Nilai default adalah true. |
| hive.collect-column-statistics-on-write | Mengaktifkan pengumpulan statistik tingkat kolom secara otomatis saat menulis. Untuk informasi lebih lanjut, lihat Statistik tabel. Nilai default adalah true. |
| hive.file-status-cache-tables | Daftar tabel yang status file-nya akan di-cache. Misalnya, |
| hive.file-status-cache-size | Jumlah total maksimum entri status file yang di-cache. Nilai default adalah 1.000.000. |
| hive.file-status-cache-expire-time | Durasi validitas status file yang di-cache. Nilai default adalah 1m. |
| hive.rcfile.time-zone | Menyesuaikan nilai timestamp yang dikodekan biner ke zona waktu yang ditentukan. Default-nya adalah zona waktu default JVM. Catatan Untuk Hive 3.1 dan versi setelahnya, nilai ini harus diatur ke UTC. |
| hive.timestamp-precision | Menentukan presisi untuk kolom timestamp di Hive. Nilai yang valid:
Nilai default adalah MILLISECONDS. Catatan Nilai dengan presisi lebih tinggi daripada nilai yang dikonfigurasi akan dibulatkan. |
| hive.temporary-staging-directory-enabled | Mengontrol apakah direktori staging sementara yang dikonfigurasi di hive.temporary-staging-directory-path digunakan untuk operasi tulis. Direktori staging sementara tidak digunakan saat menulis ke OSS, HDFS terenkripsi, atau tabel unsorted di lokasi eksternal. Saat menulis ke tabel sorted, path ini digunakan untuk menampung file sementara selama operasi sorting. Jika dinonaktifkan, penyimpanan target digunakan untuk staging saat menulis ke tabel sorted, yang bisa menjadi tidak efisien untuk penyimpanan objek.Nilai default adalah true. |
| hive.temporary-staging-directory-path | Menentukan lokasi direktori staging sementara untuk operasi tulis. Nilai default adalah
/tmp/presto-${USER}.Catatan Placeholder ${USER} dapat digunakan untuk menetapkan lokasi berbeda untuk setiap pengguna. |
| hive.translate-hive-views | Mengaktifkan translasi tampilan Hive. Nilai default adalah false. |
| hive.legacy-hive-view-translation | Menggunakan algoritma legacy untuk menerjemahkan tampilan Hive. Properti session katalog legacy_hive_view_translation dapat digunakan untuk katalog tertentu.Nilai default adalah false. |
| hive.parallel-partitioned-bucketed-writes | Meningkatkan paralelisme tulis untuk tabel yang dipartisi dan dibucket. Nilai default adalah true. Catatan Jika properti ini dinonaktifkan, jumlah thread penulis dibatasi sesuai jumlah bucket. |
Properti konfigurasi format ORC
| Parameter | Deskripsi |
| hive.orc.time-zone | Menetapkan zona waktu default untuk file ORC lama yang tidak mendeklarasikan zona waktu. Default-nya adalah zona waktu default JVM. |
| hive.orc.use-columns-names | Mengontrol apakah kolom ORC diakses berdasarkan nama. Secara default, kolom dalam file ORC diakses berdasarkan posisi ordinalnya dalam definisi tabel Hive. Perilaku ini juga dapat dikontrol dengan properti Nilai default adalah false. |
Properti konfigurasi format Parquet
| Parameter | Deskripsi |
| hive.parquet.time-zone | Menyesuaikan nilai timestamp ke zona waktu yang ditentukan. Default-nya adalah zona waktu default JVM. Catatan Untuk Hive 3.1 dan versi setelahnya, nilai ini harus diatur ke UTC. |
| hive.parquet.use-columns-names | Mengontrol cara kolom Parquet diakses. Nilai yang valid:
parquet_use_column_names. |
Properti konfigurasi metastore
| Parameter | Deskripsi |
| hive.metastore | Menentukan jenis Hive metastore yang digunakan. Presto mendukung Hive Thrift metastore default (thrift) dan turunannya. Nilai default adalah thrift. |
| hive.metastore-cache-ttl | Menentukan durasi validitas data metastore dalam cache Hive metastore. Nilai default adalah 0s. |
| hive.metastore-cache-maximum-size | Jumlah maksimum objek data metastore yang di-cache. Nilai default adalah 10000. |
| hive.metastore-refresh-interval | Menentukan seberapa sering data metastore yang di-cache diperbarui secara asinkron setelah diakses. Jika data yang di-cache sudah usang tetapi belum kedaluwarsa, akses berikutnya dapat melihat data yang telah diperbarui. |
| hive.metastore-refresh-max-threads | Jumlah maksimum thread yang digunakan untuk merefresh cache metastore. Nilai default adalah 10. |
| hive.metastore-timeout | Timeout untuk permintaan Hive metastore. Nilai default adalah 10s. |
Properti konfigurasi metastore Thrift
| Parameter | Deskripsi |
| hive.metastore.uri | URI untuk menghubungkan ke Hive metastore menggunakan protokol Thrift. Jika Anda memberikan beberapa URI, URI pertama digunakan secara default, dan URI lainnya digunakan sebagai metastore cadangan. Properti ini wajib diisi. Contoh: |
| hive.metastore.username | Username yang digunakan Presto untuk mengakses Hive metastore. |
| hive.metastore.authentication.type | Menentukan tipe autentikasi Hive metastore. Nilai yang valid:
|
| hive.metastore.thrift.impersonation.enabled | Mengaktifkan impersonasi pengguna Hive metastore. |
| hive.metastore.thrift.delegation-token.cache-ttl | Waktu kedaluwarsa untuk cache token delegasi metastore. Nilai default adalah 1h. |
| hive.metastore.thrift.delegation-token.cache-maximum-size | Ukuran maksimum cache token delegasi. Nilai default adalah 1000. |
| hive.metastore.thrift.client.ssl.enabled | Mengaktifkan atau menonaktifkan SSL saat menghubungkan ke metastore. Nilai yang valid:
|
| hive.metastore.thrift.client.ssl.key | Path ke kunci privat dan sertifikat klien (keystore). |
| hive.metastore.thrift.client.ssl.key-password | Password untuk kunci privat. |
| hive.metastore.thrift.client.ssl.trust-certificate | Path ke rantai sertifikat server (truststore). Catatan Properti ini wajib diisi saat SSL diaktifkan. |
| hive.metastore.thrift.client.ssl.trust-certificate-password | Password untuk rantai sertifikat server. |
| hive.metastore.service.principal | Principal Kerberos untuk layanan Hive metastore. |
| hive.metastore.client.principal | Principal Kerberos yang digunakan Presto untuk menghubungkan ke layanan Hive metastore. |
| hive.metastore.client.keytab | Lokasi file keytab klien Hive metastore. |
Properti tuning performa
| Parameter | Deskripsi |
| hive.max-outstanding-splits | Jumlah target split yang dibuffer per pemindaian tabel dalam kueri sebelum penjadwal menghentikan sementara proses discovery. Nilai default adalah 1000. |
| hive.max-splits-per-second | Jumlah maksimum split yang dihasilkan per detik untuk setiap pemindaian tabel. Pengaturan ini dapat mengurangi beban pada sistem penyimpanan. Secara default, tidak ada batasan, dan Presto memaksimalkan paralelisme akses data. |
| hive.max-initial-splits | Untuk setiap pemindaian tabel, koordinator mengalokasikan sejumlah split awal, hingga batas ini. Split awal berukuran hingga max-initial-split-size. Split berikutnya berukuran hingga max-split-size. Nilai default adalah 200. |
| hive.max-initial-split-size | Ukuran setiap split awal, digunakan hingga jumlah split mencapai max-initial-splits. Split yang lebih kecil meningkatkan paralelisme dan dapat mempercepat kueri kecil. Nilai default adalah 32MB. |
| hive.max-split-size | Ukuran maksimum satu split yang dialokasikan ke worker. Split yang lebih kecil menghasilkan paralelisme lebih tinggi, yang dapat mengurangi latensi tetapi juga meningkatkan overhead dan beban sistem. Nilai default adalah 64MB. |
Statistik tabel
Konektor Hive mendukung pengumpulan dan pengelolaan statistik tabel untuk meningkatkan performa kueri.
| Tipe kolom | Statistik yang dikumpulkan |
| TINYINT | Jumlah null, jumlah nilai unik, nilai min/maks |
| SMALLINT | Jumlah null, jumlah nilai unik, nilai min/maks |
| INTEGER | Jumlah null, jumlah nilai unik, nilai min/maks |
| BIGINT | Jumlah null, jumlah nilai unik, nilai min/maks |
| DOUBLE | Jumlah null, jumlah nilai unik, nilai min/maks |
| REAL | Jumlah null, jumlah nilai unik, nilai min/maks |
| DECIMAL | Jumlah null, jumlah nilai unik, nilai min/maks |
| DATE | Jumlah null, jumlah nilai unik, nilai min/maks |
| TIMESTAMP | Jumlah null, jumlah nilai unik, nilai min/maks |
| VARCHAR | Jumlah null, jumlah nilai unik |
| CHAR | Jumlah null, jumlah nilai unik |
| VARBINARY | Jumlah null |
| BOOLEAN | Jumlah null, jumlah nilai true/false |