Menggunakan metastore BigQuery dengan Dataproc Serverless

Dokumen ini menjelaskan cara menggunakan metastore BigQuery dengan Dataproc Serverless.

Sebelum memulai

  1. Aktifkan penagihan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan pada project.
  2. Aktifkan BigQuery dan Dataproc API.

    Aktifkan API

  3. Opsional: Pahami cara kerja metastore BigQuery dan alasan Anda harus menggunakannya.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menggunakan Spark dan Dataproc Serverless dengan metastore BigQuery sebagai penyimpanan metadata, minta administrator untuk memberi Anda peran IAM berikut:

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 BigQuery dengan Dataproc Serverless, Anda harus mengikuti langkah-langkah umum berikut:

  1. Buat file dengan perintah yang ingin Anda jalankan di metastore BigQuery.
  2. Hubungkan ke mesin software open source pilihan Anda.
  3. Kirim tugas batch menggunakan metode pilihan Anda, seperti Spark SQL atau PySpark.

Menghubungkan metastore BigQuery dengan Spark

Petunjuk berikut menunjukkan cara menghubungkan Dataproc Serverless ke metastore BigQuery:

SparkSQL

Untuk mengirimkan tugas batch Spark SQL, selesaikan langkah-langkah berikut.

  1. Buat file SQL dengan perintah Spark SQL yang ingin Anda jalankan di metastore BigQuery. Misalnya, perintah ini membuat namespace dan tabel.

    CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME;
    CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';

    Ganti kode berikut:

    • CATALOG_NAME: nama katalog yang mereferensikan tabel Spark Anda.
    • NAMESPACE_NAME: nama namespace yang mereferensikan tabel Spark Anda.
    • TABLE_NAME: nama tabel untuk tabel Spark Anda.
    • WAREHOUSE_DIRECTORY: URI folder Cloud Storage tempat data warehouse Anda disimpan.
  2. Kirim tugas batch Spark SQL, dengan menjalankan perintah gcloud CLI gcloud dataproc batches submit spark-sql berikut:

    gcloud dataproc batches submit spark-sql SQL_SCRIPT_PATH \
    --project=PROJECT_ID \
    --region=REGION \
    --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --deps-bucket=BUCKET_PATH \
    --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"

    Ganti kode berikut:

    • SQL_SCRIPT_PATH: jalur ke file SQL yang digunakan oleh tugas batch.
    • PROJECT_ID: ID project Google Cloud tempat menjalankan tugas batch.
    • REGION: region tempat workload Anda berjalan.
    • SUBNET_NAME: opsional: Nama subnet VPC di REGION yang telah mengaktifkan Akses Google Pribadi dan memenuhi persyaratan subnet sesi lainnya.
    • LOCATION: lokasi untuk menjalankan tugas batch.
    • BUCKET_PATH: lokasi bucket Cloud Storage untuk mengupload dependensi beban kerja. WAREHOUSE_FOLDER berada di bucket ini. Awalan URI gs:// bucket tidak diperlukan. Anda dapat menentukan jalur bucket atau nama bucket, misalnya, mybucketname1.

    Untuk mengetahui informasi selengkapnya tentang cara mengirimkan tugas batch Spark, lihat Menjalankan workload batch Spark.

PySpark

Untuk mengirimkan tugas batch PySpark, selesaikan langkah-langkah berikut.

  1. Buat file python dengan perintah PySpark yang ingin Anda jalankan di metastore BigQuery.

    Misalnya, perintah berikut menyiapkan lingkungan Spark untuk berinteraksi dengan tabel Iceberg yang disimpan di metastore BigQuery. Perintah ini kemudian membuat namespace baru dan tabel Iceberg dalam namespace tersebut.

    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("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 LOCATION 'WAREHOUSE_DIRECTORY';")

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud tempat menjalankan tugas batch.
    • LOCATION: lokasi tempat resource BigQuery berada.
    • CATALOG_NAME: nama katalog yang mereferensikan tabel Spark Anda.
    • TABLE_NAME: nama tabel untuk tabel Spark Anda.
    • WAREHOUSE_DIRECTORY: URI folder Cloud Storage tempat data warehouse Anda disimpan.
    • NAMESPACE_NAME: nama namespace yang mereferensikan tabel Spark Anda.
  2. Kirim tugas batch menggunakan perintah gcloud dataproc batches submit pyspark berikut.

    gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \
     --version=2.2 \
     --project=PROJECT_ID \
     --region=REGION \
     --deps-bucket=BUCKET_PATH \
     --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"

    Ganti kode berikut:

    • PYTHON_SCRIPT_PATH: jalur ke skrip Python yang digunakan tugas batch.
    • PROJECT_ID: ID project Google Cloud tempat menjalankan tugas batch.
    • REGION: region tempat workload Anda berjalan.
    • BUCKET_PATH: lokasi bucket Cloud Storage untuk mengupload dependensi beban kerja. Awalan URI gs:// bucket tidak diperlukan. Anda dapat menentukan jalur bucket atau nama bucket, misalnya, mybucketname1.

    Untuk mengetahui informasi selengkapnya tentang cara mengirimkan tugas batch PySpark, lihat referensi gcloud PySpark.

Langkah selanjutnya