Saat membangun gudang data offline menggunakan Hive, solusi penyimpanan tradisional berbasis HDFS mungkin tidak lagi hemat biaya seiring dengan meningkatnya volume data. Dalam situasi ini, Anda dapat menggunakan OSS-HDFS sebagai penyimpanan utama untuk gudang data Hive dan memanfaatkan JindoSDK untuk mencapai kinerja baca-tulis yang lebih baik.
Prasyarat
Sebuah Instance ECS telah dibeli. Panduan ini menggunakan Instance ECS Alibaba Cloud sebagai contoh. Untuk informasi lebih lanjut, lihat Beli Instance ECS.
OSS-HDFS telah diaktifkan untuk sebuah bucket, dan izin telah diberikan kepada Peran RAM untuk mengakses OSS-HDFS. Untuk detail lebih lanjut, lihat Aktifkan OSS-HDFS dan Berikan Izin Akses.
Klien Hive telah diterapkan.
Prosedur
Hubungkan ke Instance ECS. Untuk informasi lebih lanjut, lihat Hubungkan ke Instance.
Konfigurasikan JindoSDK.
Unduh versi terbaru dari paket JAR JindoSDK. Untuk alamat unduhan, lihat GitHub.
Ekstrak paket JAR JindoSDK.
Contoh kode berikut menunjukkan cara mengekstrak paket bernama
jindosdk-x.x.x-linux.tar.gz. Jika Anda menggunakan versi JindoSDK yang berbeda, ganti nama paket sesuai dengan versi yang digunakan.tar zxvf jindosdk-x.x.x-linux.tar.gzCatatanx.x.x menunjukkan nomor versi paket JAR JindoSDK.
Salin paket JAR JindoSDK yang diunduh ke classpath Hive.
cp jindosdk-x.x.x-linux/lib/*.jar $HIVE_HOME/lib/
Konfigurasikan kelas implementasi OSS-HDFS dan Pasangan Kunci Akses.
Konfigurasikan kelas implementasi OSS-HDFS dalam file core-site.xml Hive.
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> </configuration>Konfigurasikan ID AccessKey dan Rahasia AccessKey untuk bucket tempat OSS-HDFS diaktifkan dalam file core-site.xml Hive.
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>LTAI******** </value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>KZo1********</value> </property> </configuration>
Konfigurasikan Titik Akhir OSS-HDFS.
Saat menggunakan OSS-HDFS untuk mengakses Bucket OSS, Anda harus mengonfigurasi titik akhir. Format jalur akses yang direkomendasikan adalah
oss://<Bucket>.<Endpoint>/<Object>, misalnya,oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt. Setelah konfigurasi selesai, JindoSDK akan menggunakan titik akhir dalam jalur akses untuk mengakses Operasi API OSS-HDFS yang sesuai.Anda juga dapat mengonfigurasi titik akhir OSS-HDFS menggunakan metode lain. Prioritas titik akhir yang dikonfigurasi bergantung pada metode yang digunakan. Untuk informasi lebih lanjut, lihat Lampiran 1: Metode Lain untuk Mengonfigurasi Titik Akhir.
PentingSetelah menyelesaikan konfigurasi, Anda harus me-restart Hive agar perubahan berlaku.
Jalankan perintah berikut di terminal untuk terhubung ke Hive.
Untuk informasi lebih lanjut tentang metode koneksi lainnya, lihat Metode Koneksi Hive.
hiveSimpan Data Menggunakan OSS-HDFS.
Saat membuat database atau tabel, Anda dapat menggunakan salah satu dari dua metode berikut untuk menentukan jalur OSS-HDFS guna menyimpan data di OSS-HDFS.
Metode 1: Tentukan Jalur OSS-HDFS dalam Perintah
Tentukan jalur OSS-HDFS saat membuat database.
CREATE DATABASE db_on_oss1 LOCATION 'oss://bucket_name.endpoint_name/path/to/db1';Tentukan jalur OSS-HDFS saat membuat tabel.
CREATE TABLE db2.table_on_oss ( id INT, name STRING, age INT ) LOCATION 'oss://bucket_name.endpoint_name/path/to/db2/tablepath';
Metode 2: Tentukan Jalur OSS-HDFS dalam File Konfigurasi
Anda dapat mengatur hive.metastore.warehouse.dir ke jalur OSS-HDFS dalam file konfigurasi hive-site.xml Hive Metastore, lalu restart Hive Metastore. Secara default, database dan tabel yang dibuat kemudian akan disimpan di jalur OSS-HDFS yang ditentukan.
Contoh kode berikut menunjukkan konfigurasi:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>oss://bucket_name.endpoint_name/path/to/warehouse</value> </property> </configuration>
Tambahkan Partisi ke Tabel yang Ada.
Anda dapat menambahkan partisi ke tabel yang ada untuk membaginya menjadi unit penyimpanan yang lebih kecil. Berdasarkan kondisi kueri, hanya partisi yang memenuhi kondisi yang dipindai, sehingga menghindari pemindaian tabel penuh. Ini secara signifikan meningkatkan kinerja kueri.
Format Perintah
ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...] LOCATION 'location';Tabel berikut menjelaskan parameter.
Parameter
Opsional
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin menambahkan partisi.
IF NOT EXISTS
Opsional
Jika Anda tidak menentukan IF NOT EXISTS, operasi gagal dan kesalahan dikembalikan jika partisi dengan nama yang sama sudah ada.
pt_spec
Wajib
Partisi yang akan ditambahkan. Formatnya adalah
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Dalam format ini,partition_colmenunjukkan bidang partisi, danpartition_col_valuemenunjukkan nilai partisi. Bidang partisi tidak peka huruf besar/kecil, sedangkan nilai partisi peka huruf besar/kecil.location
Wajib
Jalur OSS tempat partisi disimpan.
Contoh
Contoh berikut menunjukkan cara menambahkan partisi ke tabel sale_detail untuk menyimpan catatan penjualan wilayah China (Hangzhou) pada Desember 2021. Partisi disimpan di jalur OSS yang ditentukan.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202112', region='hangzhou') LOCATION 'oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/path/2021/';