Men-deploy Apache Hive di Dataproc

Last reviewed 2023-05-08 UTC

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 meminimalisir latensi jaringan dan biaya transportasi jaringan.

Diagram berikut menunjukkan siklus proses kueri Hive.

Diagram arsitektur satu region.

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 Anda.

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

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan di project.

Menginisialisasi lingkungan

  1. Memulai instance Cloud Shell:

    Buka Cloud Shell

  2. 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, seperti us-central1.
    • ZONE: Zona tempat Anda ingin membuat cluster, seperti us-central1-a.
  3. 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 Cloud Shell) dan mengganti BUCKET_NAME dengan nama bucket yang unik:

export WAREHOUSE_BUCKET=BUCKET_NAME
gsutil mb -l ${REGION} gs://${WAREHOUSE_BUCKET}

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.

  1. Salin set data sampel ke bucket warehouse Anda:

    gsutil 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.

  2. 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:

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

  1. Buka sesi SSH dengan instance master Dataproc(CLUSTER_NAME-m):

    gcloud compute ssh CLUSTER_NAME-m
  2. 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"
  3. 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  |
    +------------------+--------------------+
  4. Tutup sesi Beeline:

    !quit
  5. Tutup koneksi SSH:

    exit

Membuat kueri Hive dengan SparkSQL

  1. Buka sesi SSH dengan instance master Dataproc:

    gcloud compute ssh CLUSTER_NAME-m
  2. Pada command prompt instance master, buka sesi shell PySpark yang baru:

    pyspark
  3. 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  |
    +-----------------+--------------------+
  4. Tutup sesi PySpark:

    exit()
  5. Tutup koneksi SSH:

    exit

Memeriksa metastore Hive

Sekarang Anda memverifikasi bahwa metastore Hive di Cloud SQL berisi informasi tentang tabel transactions.

  1. 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 tombol RETURN. Untuk memudahkan deployment ini, Anda tidak membuat password apa pun untuk pengguna root. 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.

  2. Di command prompt MySQL, jadikan hive_metastore sebagai database default untuk sesi yang lainnya:

    USE hive_metastore;
  3. 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   |
    +-------------------------------------+
  4. 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 |
    +--------------+----------------+
  5. 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    |
    +-------------------+-----------+
  6. 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 |
    +---------------------------------------------------------------+------------------------------------------------+
    
  7. 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.

  1. 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"
  2. 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.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus 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
gsutil rm -r gs://${WAREHOUSE_BUCKET}/datasets

Langkah selanjutnya

  • 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 untuk mengetahui detail selengkapnya tentang cara menggunakan Hive HCatalog di Dataproc.
  • Pelajari cara mengonfigurasi Cloud SQL untuk ketersediaan tinggi guna meningkatkan keandalan layanan.
  • Untuk arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.