搭配 Dataproc Serverless 使用 BigLake Metastore
本文說明如何搭配使用 BigLake 元資料庫和 Dataproc Serverless。
事前準備
- 為 Google Cloud 專案啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
啟用 BigQuery 和 Dataproc API。
選用:瞭解 BigLake 元資料庫的運作方式,以及為何應使用這項服務。
必要的角色
如要取得使用 Spark 和 Dataproc Serverless 時所需的權限,並將 BigLake 元資料儲存庫用作資料格式儲存庫,請要求管理員授予您下列 IAM 角色:
-
在 Spark 中建立 BigLake 中繼資料表:
-
專案中 Dataproc Serverless 服務帳戶的 Dataproc 工作站 (
roles/dataproc.worker
) -
專案中 Dataproc Serverless 服務帳戶的 BigQuery 資料編輯者 (
roles/bigquery.dataEditor
) -
專案中 Dataproc Serverless 服務帳戶的 Storage Object Admin (
roles/storage.objectAdmin
)
-
專案中 Dataproc Serverless 服務帳戶的 Dataproc 工作站 (
-
在 BigQuery 中查詢 BigLake 元資料表:
-
專案中的 BigQuery 資料檢視者 (
roles/bigquery.dataViewer
) -
專案中的 BigQuery 使用者 (
roles/bigquery.user
) -
專案的 Storage 物件檢視器 (
roles/storage.objectViewer
)
-
專案中的 BigQuery 資料檢視者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
一般工作流程
如要將 BigQuery 與 Dataproc Serverless 搭配使用,請按照下列一般步驟操作:
- 建立檔案,並加入要在 BigLake 元資料庫中執行的指令。
- 連結至所選的開放原始碼軟體引擎。
- 使用您選擇的方法提交批次工作,例如 Spark SQL 或 PySpark。
將 BigLake Metastore 連結至 Spark
下列操作說明將說明如何將 Dataproc Serverless 連結至 BigLake 中繼資料庫:
SparkSQL
如要提交 Spark SQL 批次工作,請完成下列步驟。
請使用要在 BigLake 中繼存放區中執行的 Spark SQL 指令建立 SQL 檔案。例如,以下指令會建立命名空間和資料表。
CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME; CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
更改下列內容:
CATALOG_NAME
:參照 Spark 資料表的目錄名稱。NAMESPACE_NAME
:參照 Spark 資料表的命名空間名稱。TABLE_NAME
:Spark 資料表的資料表名稱。WAREHOUSE_DIRECTORY
:資料倉儲儲存位置的 Cloud Storage 資料夾 URI。
執行下列
gcloud dataproc batches submit spark-sql
gcloud CLI 指令,提交 Spark SQL 批次工作: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"
更改下列內容:
SQL_SCRIPT_PATH
:批次工作使用的 SQL 檔案路徑。PROJECT_ID
:要執行批次作業的 Google Cloud 專案 ID。REGION
:工作負載執行的區域。SUBNET_NAME
:選用:REGION
中已啟用私人 Google 存取權且符合其他工作階段子網路要求的虛擬私有雲子網路名稱。LOCATION
:執行批次作業的位置。BUCKET_PATH
:上傳工作負載依附元件的 Cloud Storage 值區位置。WAREHOUSE_FOLDER
位於這個桶中。不需要提供儲存桶的gs://
URI 前置字串。您可以指定值區路徑或值區名稱,例如mybucketname1
。
如要進一步瞭解如何提交 Spark 批次工作,請參閱「執行 Spark 批次工作負載」。
PySpark
如要提交 PySpark 批次工作,請完成下列步驟。
建立 Python 檔案,其中包含要在 BigLake 元資料庫中執行的 PySpark 指令。
舉例來說,下列指令會設定 Spark 環境,以便與 BigLake 元資料庫中儲存的 Iceberg 資料表互動。接著,指令會在該命名空間中建立新的命名空間和 Iceberg 資料表。
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("BigLake 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';")
更改下列內容:
PROJECT_ID
:要執行批次作業的 Google Cloud 專案 ID。LOCATION
:BigQuery 資源所在的位置。CATALOG_NAME
:參照 Spark 資料表的目錄名稱。TABLE_NAME
:Spark 資料表的資料表名稱。WAREHOUSE_DIRECTORY
:資料倉儲儲存位置的 Cloud Storage 資料夾 URI。NAMESPACE_NAME
:參照 Spark 資料表的命名空間名稱。
使用下列
gcloud dataproc batches submit pyspark
指令提交批次工作。gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --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"
更改下列內容:
PYTHON_SCRIPT_PATH
:批次工作使用的 Python 指令碼路徑。PROJECT_ID
:要執行批次作業的 Google Cloud 專案 ID。REGION
:工作負載執行的區域。BUCKET_PATH
:上傳工作負載依附元件的 Cloud Storage 值區位置。不需要提供儲存桶的gs://
URI 前置字串。您可以指定值區路徑或值區名稱,例如mybucketname1
。
如要進一步瞭解如何提交 PySpark 批次工作,請參閱 PySpark gcloud 參考資料。