Menggunakan metastore BigQuery dengan Dataproc
Dokumen ini menjelaskan cara menggunakan metastore BigQuery dengan Dataproc di Compute Engine. Koneksi ini memberi Anda satu metastore bersama yang berfungsi di seluruh mesin software open source, seperti Apache Spark.
Sebelum memulai
- Aktifkan penagihan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan pada project.
Aktifkan BigQuery dan Dataproc API.
Opsional: Pahami cara kerja metastore BigQuery dan alasan Anda harus menggunakannya.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk menggunakan Spark dan Dataproc dengan metastore BigQuery sebagai penyimpanan metadata, minta administrator untuk memberi Anda peran IAM berikut:
-
Buat cluster Dataproc:
Dataproc Worker (
roles/dataproc.worker
) di akun layanan default Compute Engine dalam project -
Buat tabel metastore BigQuery di Spark:
-
Dataproc Worker (
roles/dataproc.worker
) di akun layanan VM Dataproc dalam project -
BigQuery Data Editor (
roles/bigquery.dataEditor
) di akun layanan VM Dataproc dalam project -
Storage Object Admin (
roles/storage.objectAdmin
) di akun layanan VM Dataproc dalam project
-
Dataproc Worker (
-
Buat kueri tabel metastore BigQuery di BigQuery:
-
BigQuery Data Viewer (
roles/bigquery.dataViewer
) di project -
Pengguna BigQuery (
roles/bigquery.user
) di project -
Storage Object Viewer (
roles/storage.objectViewer
) di project
-
BigQuery Data Viewer (
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Alur kerja umum
Untuk menggunakan Dataproc di Compute Engine dengan metastore BigQuery, ikuti langkah-langkah umum berikut:
- Buat cluster Dataproc atau konfigurasikan cluster yang ada.
- Menghubungkan ke mesin software open source pilihan Anda, seperti Spark.
- Gunakan file JAR untuk menginstal plugin katalog Apache Iceberg di cluster.
- Buat dan kelola resource metastore BigQuery sesuai kebutuhan, bergantung pada mesin software open source yang Anda gunakan.
- Di BigQuery, akses dan gunakan resource metastore BigQuery Anda.
Menghubungkan metastore BigQuery ke Spark
Petunjuk berikut menunjukkan cara menghubungkan Dataproc ke metastore BigQuery menggunakan Spark SQL interaktif.
Mendownload plugin katalog Iceberg
Untuk menghubungkan metastore BigQuery dengan Dataproc dan Spark, Anda harus menggunakan file jar plugin katalog Iceberg metastore BigQuery.
File ini disertakan secara default dalam image Dataproc versi 2.2. Jika cluster Dataproc tidak memiliki akses langsung ke internet, Anda harus mendownload plugin dan menguploadnya ke bucket Cloud Storage yang dapat diakses cluster Dataproc.
Download plugin katalog Apache Iceberg metastore BigQuery.
Mengonfigurasi cluster Dataproc
Sebelum terhubung ke metastore BigQuery, Anda harus menyiapkan cluster Dataproc.
Untuk melakukannya, Anda dapat membuat cluster baru atau menggunakan cluster yang ada. Setelah itu, Anda akan menggunakan cluster ini untuk menjalankan Spark SQL interaktif dan mengelola resource metastore BigQuery.
Subnet di region tempat cluster dibuat harus mengaktifkan Akses Google Pribadi (PGA). Secara default, VM cluster Dataproc, yang dibuat dengan versi gambar 2.2 (default) atau yang lebih baru, memiliki hanya alamat IP internal. Agar VM cluster dapat berkomunikasi dengan Google API, aktifkan Akses Google Pribadi di subnet jaringan
default
(atau nama jaringan yang ditentukan pengguna, jika berlaku) di region tempat cluster dibuat.Jika ingin menjalankan contoh antarmuka web Zeppelin dalam panduan ini, Anda harus menggunakan atau membuat cluster Dataproc dengan komponen opsional Zeppelin yang diaktifkan.
Cluster baru
Untuk membuat cluster Dataproc baru, jalankan perintah gcloud
dataproc clusters create
berikut. Konfigurasi ini berisi
setelan yang Anda perlukan untuk menggunakan metastore BigQuery.
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=LOCATION \ --optional-components=ZEPPELIN \ --enable-component-gateway \ --single-node
Ganti kode berikut:
CLUSTER_NAME
: nama untuk cluster Dataproc Anda.PROJECT_ID
: project ID Google Cloud tempat Anda membuat cluster.LOCATION
: region Google Cloud tempat Anda membuat cluster.
Cluster yang ada
Untuk mengonfigurasi cluster yang ada, tambahkan runtime Iceberg Spark berikut ke cluster Anda.
org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2
Anda dapat menambahkan runtime menggunakan salah satu opsi berikut:
Skrip Inisialisasi. Tambahkan dependensi runtime ke skrip inisialisasi kustom yang berjalan saat dibuat.
Setelah menambahkan dependensi runtime ke skrip, ikuti petunjuk untuk membuat ulang dan mengupdate cluster.
Penginstalan Manual. Tambahkan file JAR plugin katalog Iceberg secara manual dan konfigurasikan properti Spark untuk menyertakan runtime di cluster Anda.
Mengirim tugas Spark
Untuk mengirimkan tugas Spark, gunakan salah satu metode berikut:
gcloud CLI
gcloud dataproc jobs submit spark-sql \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --region==REGION \ --jars=https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \ --properties=spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog, \ spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog, \ spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID, \ spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION, \ spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY \ --execute="SPARK_SQL_COMMAND"
Ganti kode berikut:
PROJECT_ID
: ID project Google Cloud yang berisi cluster Dataproc.CLUSTER_NAME
: nama cluster Dataproc yang Anda gunakan untuk menjalankan tugas Spark SQL.REGION
: region Compute Engine tempat cluster Anda berada.LOCATION
: lokasi resource BigQuery.CATALOG_NAME
: nama katalog Spark yang Anda gunakan dengan tugas SQL.WAREHOUSE_DIRECTORY
: folder Cloud Storage yang berisi data warehouse Anda. Nilai ini diawali dengangs://
.SPARK_SQL_COMMAND
: kueri Spark SQL yang ingin Anda jalankan. Kueri ini menyertakan perintah untuk membuat resource Anda. Misalnya, untuk membuat namespace dan tabel.
Spark Interaktif
Menghubungkan ke Spark dan menginstal plugin katalog
Untuk menginstal plugin katalog untuk metastore BigQuery, hubungkan ke cluster Dataproc menggunakan SSH.
- Di konsol Google Cloud , buka halaman VM Instances.
Untuk terhubung ke instance VM Dataproc, klik SSH di daftar instance virtual machine. Outputnya mirip dengan hal berikut ini:
Connected, host fingerprint: ssh-rsa ... Linux cluster-1-m 3.16.0-0.bpo.4-amd64 ... ... example-cluster@cluster-1-m:~$
Di terminal, jalankan perintah inisialisasi metastore BigQuery berikut:
spark-sql \ --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \ --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY
Ganti kode berikut:
CATALOG_NAME
: nama katalog Spark yang Anda gunakan dengan tugas SQL.PROJECT_ID
: ID project Google Cloud dari katalog metastore BigQuery yang ditautkan dengan katalog Spark Anda.LOCATION
: lokasi Google Cloud metastore BigQuery.WAREHOUSE_DIRECTORY
: folder Cloud Storage yang berisi data warehouse Anda. Nilai ini diawali dengangs://
.
Setelah berhasil terhubung ke cluster, terminal Spark akan menampilkan perintah
spark-sql
.spark-sql (default)>
Mengelola resource metastore BigQuery
Anda kini terhubung ke metastore BigQuery. Anda dapat melihat resource yang ada atau membuat resource baru berdasarkan metadata yang disimpan di metastore BigQuery.
Misalnya, coba jalankan perintah berikut dalam sesi Spark SQL interaktif untuk membuat namespace dan tabel Iceberg.
Gunakan katalog Iceberg kustom:
USE `CATALOG_NAME`;
Buat namespace
CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;
Gunakan namespace yang dibuat:
USE NAMESPACE_NAME;
Buat tabel Iceberg:
CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;
Menyisipkan baris tabel:
INSERT INTO TABLE_NAME VALUES (1, "first row");
Tambahkan kolom tabel:
ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double);
Melihat metadata tabel:
DESCRIBE EXTENDED TABLE_NAME;
Mencantumkan tabel dalam namespace:
SHOW TABLES;
Notebook Zeppelin
Di konsol Google Cloud , buka halaman Dataproc Clusters.
Klik nama cluster yang ingin Anda gunakan.
Halaman Cluster Details akan terbuka.
Di menu navigasi, klik Antarmuka web.
Di bagian Gateway komponen, klik Zeppelin. Halaman notebook Zeppelin akan terbuka.
Di menu navigasi, klik Notebook, lalu klik +Create new note.
Dalam dialog, masukkan nama notebook. Biarkan Spark dipilih sebagai interpretor default.
Klik Create. Notebook baru akan dibuat.
Di notebook, klik menu setelan, lalu klik Penafsir.
Di kolom Penafsir penelusuran, telusuri Spark.
Klik Edit.
Di kolom Spark.jars, masukkan URI jar Spark.
https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar
Klik Simpan.
Klik Oke.
Salin kode PySpark berikut ke notebook Zeppelin.
%pyspark from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \ .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \ .getOrCreate() spark.sql("select version()").show() spark.sql("USE `CATALOG_NAME`;") spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;") spark.sql("USE NAMESPACE_NAME;") spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;") spark.sql("DESCRIBE TABLE_NAME;").show()
Ganti kode berikut:
CATALOG_NAME
: nama katalog Spark yang akan digunakan untuk tugas SQL.PROJECT_ID
: ID project Google Cloud yang berisi cluster Dataproc.WAREHOUSE_DIRECTORY
: folder Cloud Storage yang berisi data warehouse Anda. Nilai ini diawali dengangs://
.NAMESPACE_NAME
: nama namespace yang mereferensikan tabel Spark Anda.WAREHOUSE_DIRECTORY
: URI folder Cloud Storage tempat data warehouse Anda disimpan.TABLE_NAME
: nama tabel untuk tabel Spark Anda.
Klik ikon jalankan atau tekan
Shift-Enter
untuk menjalankan kode. Setelah tugas selesai, pesan status akan menampilkan "Spark Job Finished", dan output akan menampilkan konten tabel:
Langkah selanjutnya
- Siapkan fitur metastore BigQuery opsional.
- Melihat dan membuat kueri tabel dari Spark di konsol BigQuery.