Dokumen ini menjelaskan cara men-deploy arsitektur dalam Menggunakan Apache Hive di Dataproc.
Dokumen ini ditujukan untuk para arsitek cloud dan data engineer yang tertarik untuk men-deploy Apache Hive di Dataproc dan Hive Metastore di Cloud SQL.
Arsitektur
Dalam panduan deployment ini, Anda akan men-deploy semua layanan komputasi dan penyimpanan di region Google Cloud yang sama untuk meminimalkan latensi jaringan dan biaya transportasi jaringan.
Diagram berikut menunjukkan siklus proses kueri Hive.
Pada diagram, klien Hive mengirim kueri yang diproses, diambil, dan ditampilkan. Proses berlangsung di server Hive. Data diminta dan dikembalikan dari warehouse Hive yang disimpan dalam bucket regional di Cloud Storage.
Tujuan
- Membuat instance MySQL di Cloud SQL untuk metastore Hive.
- Men-deploy server Hive di Dataproc.
- Instal Proxy Cloud SQL pada instance cluster Dataproc.
- Mengupload data Hive ke Cloud Storage.
- Menjalankan kueri Hive di beberapa cluster Dataproc.
Biaya
Deployment ini menggunakan komponen Google Cloud yang ditagihkan berikut:
- Dataproc
- Cloud Storage
- Cloud SQL
Anda dapat menggunakan kalkulator harga untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan.
Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.
Setelah deployment ini selesai, tagihan berkelanjutan dapat Anda hindari dengan menghapus resource yang dibuat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan di project.
Menginisialisasi lingkungan
Memulai instance Cloud Shell:
Di Cloud Shell, tetapkan zona Compute Engine default ke zona tempat cluster Dataproc akan Anda buat.
export PROJECT=$(gcloud info --format='value(config.project)') export REGION=REGION export ZONE=ZONE gcloud config set compute/zone ${ZONE}
Ganti kode berikut:
REGION
: Region tempat Anda ingin membuat cluster, sepertius-central1
.ZONE
: Zona tempat Anda ingin membuat cluster, sepertius-central1-a
.
Aktifkan Dataproc dan Cloud SQL Admin API dengan menjalankan perintah berikut di Cloud Shell:
gcloud services enable dataproc.googleapis.com sqladmin.googleapis.com
(Opsional) Membuat bucket warehouse
Jika Anda tidak memiliki bucket Cloud Storage untuk menyimpan data Hive, buat bucket warehouse (Anda dapat menjalankan perintah berikut di Cloud Shell) dan ganti BUCKET_NAME
dengan nama bucket yang unik:
export WAREHOUSE_BUCKET=BUCKET_NAME gcloud storage buckets create gs://${WAREHOUSE_BUCKET} --location=${REGION}
Membuat instance Cloud SQL
Di bagian ini, Anda akan membuat instance Cloud SQL baru yang nantinya digunakan untuk menghosting metastore Hive.
Di Cloud Shell, buat instance Cloud SQL baru:
gcloud sql instances create hive-metastore \ --database-version="MYSQL_5_7" \ --activation-policy=ALWAYS \ --zone ${ZONE}
Pemrosesan perintah ini mungkin membutuhkan waktu beberapa menit.
Membuat cluster Dataproc
Buat cluster Dataproc pertama, dengan mengganti CLUSTER_NAME
dengan nama seperti hive-cluster
:
gcloud dataproc clusters create CLUSTER_NAME \ --scopes sql-admin \ --region ${REGION} \ --initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/cloud-sql-proxy/cloud-sql-proxy.sh \ --properties "hive:hive.metastore.warehouse.dir=gs://${WAREHOUSE_BUCKET}/datasets" \ --metadata "hive-metastore-instance=${PROJECT}:${REGION}:hive-metastore" \ --metadata "enable-cloud-sql-proxy-on-workers=false"
Catatan:
- Anda memberikan
sql-admin
cakupan akses agar instance cluster dapat mengakses Cloud SQL Admin API. - Anda tempatkan tindak inisialisasi dalam skrip yang disimpan di bucket Cloud Storage, dan mereferensikan bucket tersebut dengan flag
--initialization-actions
. Lihat Tindakan inisialisasi - Pertimbangan dan panduan penting untuk informasi selengkapnya. - Anda memberikan URI ke bucket Hive warehouse di properti
hive:hive.metastore.warehouse.dir
. Tindakan ini mengonfigurasi server Hive untuk membaca dan menulis ke lokasi yang benar. Properti ini harus berisi setidaknya satu direktori (misalnya,gs://my-bucket/my-directory
); Hive tidak akan berfungsi dengan baik jika properti ini ditetapkan ke nama bucket tanpa direktori (misalnya,gs://my-bucket
). - Anda menentukan
enable-cloud-sql-proxy-on-workers=false
untuk memastikan bahwa Proxy Cloud SQL hanya berjalan pada node master yang cukup agar layanan metastore Hive dapat berfungsi dan menghindari beban yang tidak diperlukan di Cloud SQL. Anda memberikan tindakan inisialisasi Proxy Cloud SQL yang dijalankan Dataproc secara otomatis pada semua instance cluster. Tindakan tersebut akan melakukan:
- Menginstal Proxy Cloud SQL.
- Membuat koneksi yang aman ke instance Cloud SQL yang ditentukan dalam parameter metadata
hive-metastore-instance
. - Membuat pengguna
hive
dan database metastore Hive.
Anda dapat melihat kode lengkap untuk tindakan inisialisasi Proxy Cloud SQL di GitHub.
Deployment ini menggunakan instance Cloud SQL dengan alamat IP publik. Jika Anda menggunakan instance yang hanya memiliki alamat IP pribadi, Anda dapat memaksa proxy untuk menggunakan alamat IP pribadi dengan meneruskan parameter
--metadata "use-cloud-sql-private-ip=true"
.
Membuat tabel Hive
Di bagian ini, Anda akan mengupload contoh set data ke bucket warehouse, membuat tabel Hive baru, dan menjalankan beberapa kueri HiveQL di set data tersebut.
Salin set data sampel ke bucket warehouse Anda:
gcloud storage cp gs://hive-solution/part-00000.parquet \ gs://${WAREHOUSE_BUCKET}/datasets/transactions/part-00000.parquet
Set data sampel dikompresi dalam format Parquet dan berisi ribuan catatan transaksi bank fiktif dengan tiga kolom: tanggal, jumlah, dan jenis transaksi.
Buat tabel Hive eksternal untuk set data:
gcloud dataproc jobs submit hive \ --cluster CLUSTER_NAME \ --region ${REGION} \ --execute " CREATE EXTERNAL TABLE transactions (SubmissionDate DATE, TransactionAmount DOUBLE, TransactionType STRING) STORED AS PARQUET LOCATION 'gs://${WAREHOUSE_BUCKET}/datasets/transactions';"
Menjalankan kueri Hive
Anda dapat menggunakan berbagai alat di dalam Dataproc untuk menjalankan kueri Hive. Di bagian ini, Anda akan mempelajari cara menjalankan kueri menggunakan alat berikut:
- Hive jobs API Dataproc.
- Beeline, klien command line populer yang didasarkan pada SQLLine.
- SparkSQL, API Apache Spark untuk mengkueri data terstruktur.
Di setiap bagian, Anda akan menjalankan contoh kueri.
Membuat kueri Hive dengan Dataproc Jobs API
Jalankan kueri HiveQL sederhana berikut untuk memverifikasi bahwa file parquet ditautkan dengan benar ke tabel Hive:
gcloud dataproc jobs submit hive \ --cluster CLUSTER_NAME \ --region ${REGION} \ --execute " SELECT * FROM transactions LIMIT 10;"
Menghasilkan output yang mencakup:
+-----------------+--------------------+------------------+ | submissiondate | transactionamount | transactiontype | +-----------------+--------------------+------------------+ | 2017-12-03 | 1167.39 | debit | | 2017-09-23 | 2567.87 | debit | | 2017-12-22 | 1074.73 | credit | | 2018-01-21 | 5718.58 | debit | | 2017-10-21 | 333.26 | debit | | 2017-09-12 | 2439.62 | debit | | 2017-08-06 | 5885.08 | debit | | 2017-12-05 | 7353.92 | authorization | | 2017-09-12 | 4710.29 | authorization | | 2018-01-05 | 9115.27 | debit | +-----------------+--------------------+------------------+
Membuat kueri Hive dengan Beeline
Buka sesi SSH dengan instance master Dataproc(
CLUSTER_NAME
-m):gcloud compute ssh CLUSTER_NAME-m
Pada command prompt instance master, buka sesi Beeline:
beeline -u "jdbc:hive2://localhost:10000"
Catatan:
Anda juga dapat merujuk nama instance master sebagai host, bukan
localhost
:beeline -u "jdbc:hive2://CLUSTER_NAME-m:10000"
Jika menggunakan mode ketersediaan tinggi dengan 3 master, Anda harus menggunakan perintah berikut:
beeline -u "jdbc:hive2://CLUSTER_NAME-m-0:2181,CLUSTER_NAME-m-1:2181,CLUSTER_NAME-m-2:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"
Saat perintah Beeline muncul, jalankan kueri HiveQL berikut:
SELECT TransactionType, AVG(TransactionAmount) AS AverageAmount FROM transactions WHERE SubmissionDate = '2017-12-22' GROUP BY TransactionType;
Menghasilkan output yang mencakup:
+------------------+--------------------+ | transactiontype | averageamount | +------------------+--------------------+ | authorization | 4890.092525252529 | | credit | 4863.769269565219 | | debit | 4982.781458176331 | +------------------+--------------------+
Tutup sesi Beeline:
!quit
Tutup koneksi SSH:
exit
Membuat kueri Hive dengan SparkSQL
Buka sesi SSH dengan instance master Dataproc:
gcloud compute ssh CLUSTER_NAME-m
Pada command prompt instance master, buka sesi shell PySpark yang baru:
pyspark
Saat perintah shell PySpark muncul, ketik kode Python berikut:
from pyspark.sql import HiveContext hc = HiveContext(sc) hc.sql(""" SELECT SubmissionDate, AVG(TransactionAmount) as AvgDebit FROM transactions WHERE TransactionType = 'debit' GROUP BY SubmissionDate HAVING SubmissionDate >= '2017-10-01' AND SubmissionDate < '2017-10-06' ORDER BY SubmissionDate """).show()
Menghasilkan output yang mencakup:
+-----------------+--------------------+ | submissiondate | avgdebit | +-----------------+--------------------+ | 2017-10-01 | 4963.114920399849 | | 2017-10-02 | 5021.493300510582 | | 2017-10-03 | 4982.382279569891 | | 2017-10-04 | 4873.302702503676 | | 2017-10-05 | 4967.696333583777 | +-----------------+--------------------+
Tutup sesi PySpark:
exit()
Tutup koneksi SSH:
exit
Memeriksa metastore Hive
Sekarang Anda memverifikasi bahwa metastore Hive di Cloud SQL berisi informasi tentang tabel transactions
.
Di Cloud Shell, mulai sesi MySQL baru di instance Cloud SQL:
gcloud sql connect hive-metastore --user=root
Saat diminta memasukkan sandi pengguna
root
, jangan ketik apa pun dan cukup tekan tombolRETURN
. Untuk memudahkan deployment ini, Anda tidak membuat password apa pun untuk penggunaroot
. Untuk mengetahui informasi tentang cara menyetel password guna melindungi database metastore lebih lanjut, baca dokumentasi Cloud SQL. Tindakan inisialisasi Proxy Cloud SQL juga menyediakan mekanisme untuk melindungi password melalui enkripsi. Untuk mengetahui informasi selengkapnya, lihat repositori kode tindakan.Di command prompt MySQL, jadikan
hive_metastore
sebagai database default untuk sesi yang lainnya:USE hive_metastore;
Pastikan lokasi bucket warehouse dicatat dalam metastore:
SELECT DB_LOCATION_URI FROM DBS;
Outputnya akan terlihat seperti ini:
+-------------------------------------+ | DB_LOCATION_URI | +-------------------------------------+ | gs://[WAREHOUSE_BUCKET]/datasets | +-------------------------------------+
Verifikasi bahwa referensi tabel sudah sesuai di metastore:
SELECT TBL_NAME, TBL_TYPE FROM TBLS;
Outputnya akan terlihat seperti ini:
+--------------+----------------+ | TBL_NAME | TBL_TYPE | +--------------+----------------+ | transactions | EXTERNAL_TABLE | +--------------+----------------+
Pastikan juga referensi kolom tabel sudah benar:
SELECT COLUMN_NAME, TYPE_NAME FROM COLUMNS_V2 c, TBLS t WHERE c.CD_ID = t.SD_ID AND t.TBL_NAME = 'transactions';
Outputnya akan terlihat seperti ini:
+-------------------+-----------+ | COLUMN_NAME | TYPE_NAME | +-------------------+-----------+ | submissiondate | date | | transactionamount | double | | transactiontype | string | +-------------------+-----------+
Pastikan juga format input dan lokasi direferensikan dengan benar:
SELECT INPUT_FORMAT, LOCATION FROM SDS s, TBLS t WHERE s.SD_ID = t.SD_ID AND t.TBL_NAME = 'transactions';
Outputnya akan terlihat seperti ini:
+---------------------------------------------------------------+------------------------------------------------+ | INPUT_FORMAT | LOCATION | +---------------------------------------------------------------+------------------------------------------------+ | org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat | gs://[WAREHOUSE_BUCKET]/datasets/transactions | +---------------------------------------------------------------+------------------------------------------------+
Tutup sesi MySQL:
exit
Membuat cluster Dataproc lain
Di bagian ini, Anda akan membuat cluster Dataproc lain untuk memverifikasi bahwa data Hive dan metastore Hive dapat dibagikan ke beberapa cluster.
Buat cluster Dataproc baru:
gcloud dataproc clusters create other-CLUSTER_NAME \ --scopes cloud-platform \ --image-version 2.0 \ --region ${REGION} \ --initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/cloud-sql-proxy/cloud-sql-proxy.sh \ --properties "hive:hive.metastore.warehouse.dir=gs://${WAREHOUSE_BUCKET}/datasets" \ --metadata "hive-metastore-instance=${PROJECT}:${REGION}:hive-metastore"\ --metadata "enable-cloud-sql-proxy-on-workers=false"
Verifikasi bahwa cluster baru dapat mengakses data:
gcloud dataproc jobs submit hive \ --cluster other-CLUSTER_NAME \ --region ${REGION} \ --execute " SELECT TransactionType, COUNT(TransactionType) as Count FROM transactions WHERE SubmissionDate = '2017-08-22' GROUP BY TransactionType;"
Menghasilkan output yang mencakup:
+------------------+--------+ | transactiontype | count | +------------------+--------+ | authorization | 696 | | credit | 1722 | | debit | 2599 | +------------------+--------+
Selamat, Anda telah menyelesaikan langkah-langkah dalam deployment.
Pembersihan
Bagian berikut menjelaskan cara menghindari tagihan di masa mendatang untuk project Google Cloud serta resource Apache Hive dan Dataproc yang digunakan dalam deployment.
Menghapus project Google Cloud
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam deployment ini, Anda dapat menghapus project Google Cloud.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource satu per satu
Jalankan perintah berikut di Cloud Shell untuk menghapus resource satu per satu, bukan seluruh project:
gcloud dataproc clusters delete CLUSTER_NAME --region ${REGION} --quiet gcloud dataproc clusters delete other-CLUSTER_NAME --region ${REGION} --quiet gcloud sql instances delete hive-metastore --quiet gcloud storage rm gs://${WAREHOUSE_BUCKET}/datasets --recursive
Langkah berikutnya
- Coba BigQuery, data warehouse perusahaan yang serverless, sangat skalabel, dan murah dari Google.
- Lihat panduan tentang memigrasikan workload Hadoop ke Google Cloud.
- Lihat tindakan inisialisasi ini untuk mengetahui detail selengkapnya tentang cara menggunakan Hive HCatalog di Dataproc.
- Pelajari cara mengonfigurasi Cloud SQL untuk ketersediaan tinggi guna meningkatkan keandalan layanan.
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.