連線至 Apache Spark
身為 BigQuery 管理員,您可以建立連線,讓資料分析師執行 Apache Spark 的已儲存程序。
事前準備
啟用 BigQuery Connection API。
-
如要取得建立 Spark 連線所需的權限,請要求管理員為您授予專案的 BigQuery 連線管理員 (
roles/bigquery.connectionAdmin
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。 - 選用:如要使用 Dataproc Metastore 管理中繼資料,請務必建立 Dataproc Metastore 服務。
- 選用:如要使用 Spark 記錄伺服器網頁介面查看工作記錄,請務必建立 Dataproc 永久記錄伺服器 (PHS)。
位置注意事項
選擇資料的位置時,請考慮下列事項:
多區域
您必須指定位於相同大地理區域的 Google Cloud 資源:
BigQuery US 多區域中的連線可以參照美國地理區域中任何單一區域的 Spark 記錄伺服器 或 Dataproc Metastore,例如
us-central1
、us-east4
或us-west2
。BigQuery 歐盟多區域中的連線可以參照歐盟成員國 (例如
europe-north1
或europe-west3
) 中的 Spark 記錄伺服器或 Dataproc Metastore。
單一地區
單一區域中的連線只能參照同區域的 Google Cloud資源。舉例來說,單一區域 us-east4
中的連線只能參照 us-east4
中的 Spark History Server 或 Dataproc Metastore。
建立連線
選取下列選項之一:
控制台
前往「BigQuery」頁面
在「Explorer」窗格中,按一下
「Add data」。「Add data」對話方塊隨即開啟。
在「Filter By」窗格中的「Data Source Type」部分,選取「Databases」。
或者,您也可以在「Search for data sources」欄位中輸入
Spark
。在「精選資料來源」部分,按一下「Apache Spark」。
按一下「Apache Spark: BigQuery Federation」解決方案資訊卡。
在「外部資料來源」窗格中,輸入以下資訊:
在「Connection type」清單中,選取「Apache Spark」。
在「連線 ID」欄位中,輸入連線的名稱,例如
spark_connection
。在「資料位置」清單中選取區域。
您可以在支援 BigQuery 的地區和多區域中建立連線。詳情請參閱「位置注意事項」。
選用:從「Metastore 服務」清單中選取 Dataproc Metastore。
選用:在「記錄伺服器叢集」欄位中輸入 Dataproc 永久記錄伺服器。
點選「建立連線」。
按一下「前往連線」。
在「連線資訊」窗格中,複製服務帳戶 ID,以便在後續步驟中使用。
bq
在指令列環境中,使用
bq mk
指令建立連線:bq mk --connection --connection_type='SPARK' \ --properties=PROPERTIES \ --project_id=PROJECT_ID \ --location=LOCATION CONNECTION_ID
更改下列內容:
PROPERTIES
:鍵/值組合,可用 JSON 格式提供連線專屬參數例如:
--properties='{ "metastoreServiceConfig": {"metastoreService": "METASTORE_SERVICE_NAME"}, "sparkHistoryServerConfig": {"dataprocCluster": "DATAPROC_CLUSTER_NAME"} }'
更改下列內容:
METASTORE_SERVICE_NAME
:使用 gRPC 網路設定的 Dataproc 中繼存放區,例如projects/my-project-id/locations/us-central1/services/my-service
如需更多資訊,請參閱如何使用端點通訊協定存取儲存的 Hive 中繼資料中繼資料。
DATAPROC_CLUSTER_NAME
:Spark 記錄伺服器設定,例如projects/my-project-id/regions/us-central1/clusters/my-cluster
詳情請參閱「建立永久記錄伺服器叢集」。
PROJECT_ID
:您的 Google Cloud 專案 IDLOCATION
:要儲存連線的位置,例如US
CONNECTION_ID
:連線 ID,例如myconnection
在 Google Cloud 控制台查看連線詳細資料時,連線 ID 是 連線 ID 中顯示的完整連線 ID 最後一節的值,例如
projects/.../locations/.../connections/myconnection
。
請擷取並複製服務帳戶 ID,因為您在其他步驟中會用到這個 ID:
bq show --location=LOCATION --connection PROJECT_ID.LOCATION.CONNECTION_ID
輸出結果會與下列內容相似:
Connection myproject.us.myconnection name type properties ---------------------- ------- --------------------------------------------------- myproject.us.myconnection SPARK {"serviceAccountId": "bqserver@example.iam.gserviceaccount.com"}
如要瞭解如何管理連線,請參閱「管理連線」。
將存取權授予服務帳戶
如要讓 Apache Spark 的已儲存程序存取您的 Google Cloud資源,您必須將必要的 IAM 權限授予與已儲存程序連線相關聯的服務帳戶。或者,您也可以使用自訂服務帳戶存取資料。
如要讀取及寫入 BigQuery 資料,您必須為服務帳戶授予下列 IAM 權限:
- 在 BigQuery 資料表上使用
bigquery.tables.*
- 專案的
bigquery.readsessions.*
roles/bigquery.admin
IAM 角色包含服務帳戶需要的權限,才能讀取及寫入 BigQuery 的資料。- 在 BigQuery 資料表上使用
如要讀取及寫入 Cloud Storage 中的資料,您必須授予服務帳戶 Cloud Storage 物件的
storage.objects.*
權限。roles/storage.objectAdmin
IAM 角色包含服務帳戶需要的權限,以便讀取及寫入 Cloud Storage 的資料。如果您在建立連線時指定 Dataproc Metastore,則需要為服務帳戶授予 Dataproc Metastore 的
metastore.services.get
權限,才能讓 BigQuery 擷取中繼資料庫設定的詳細資料。預先定義的
roles/metastore.metadataViewer
角色包含服務帳戶需要的權限,才能擷取元資料儲存庫設定的詳細資料。您還需要授予服務帳戶 Cloud Storage 值區的
roles/storage.objectAdmin
角色,讓儲存程序可以存取 Dataproc Metastore (hive.metastore.warehouse.dir
) 的 Hive 倉庫目錄。如果儲存程序在元資料庫上執行作業,您可能需要提供額外權限。如要進一步瞭解 Dataproc Metastore 中的身分與存取權管理角色和權限,請參閱「Dataproc Metastore 預先定義的角色和權限」。如果您在建立連線時指定 Dataproc 永久記錄伺服器,則需要將下列角色授予服務帳戶:
- Dataproc 永久記錄伺服器上的
roles/dataproc.viewer
角色,包含dataproc.clusters.get
權限。 - 建立 Dataproc 永久記錄伺服器時,您為屬性
spark:spark.history.fs.logDirectory
指定的 Cloud Storage 值區的roles/storage.objectAdmin
角色。
詳情請參閱「Dataproc 永久記錄伺服器」和「Dataproc 角色和權限」。
- Dataproc 永久記錄伺服器上的
與使用者分享連線
您可以授予下列角色,讓使用者查詢資料及管理連線:
roles/bigquery.connectionUser
:可讓使用者使用連線連結外部資料來源,並對這些資料來源執行查詢。roles/bigquery.connectionAdmin
:讓使用者管理連線。
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「預先定義的角色與權限」一文。
選取下列選項之一:
主控台
前往「BigQuery」頁面
連線會列在專案中,位於名為「External connections」的群組中。
在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」>「連線」。
在「Details」窗格中,按一下「Share」,即可分享連線。接著,按照下列步驟操作:
在「Connection permissions」對話方塊中,新增或編輯主體,與其他主體共用連線。
按一下 [儲存]。
bq
您無法透過 bq 指令列工具共用連線。如要分享連線,請使用 Google Cloud 主控台或 BigQuery Connections API 方法。
API
請使用 BigQuery Connections REST API 參考資料部分的 projects.locations.connections.setIAM
方法,並提供 policy
資源的例項。
Java
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
後續步驟
- 瞭解不同的連線類型。
- 瞭解如何管理連線。
- 瞭解如何建立 Apache Spark 預存程序。
- 瞭解如何管理儲存程序。