Apache Spark に接続する
BigQuery 管理者は、データ アナリストが Apache Spark 用のストアド プロシージャを実行できるように、接続を作成できます。
準備
BigQuery Connection API を有効にします。
-
Spark 接続の作成に必要な権限を取得するには、プロジェクトに対する BigQuery Connection 管理者(
roles/bigquery.connectionAdmin
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 - 省略可: Dataproc Metastore を使用してメタデータを管理するには、Dataproc Metastore サービスを作成していることを確認します。
- 省略可: Spark History Server ウェブ インターフェースを使用してジョブ履歴を表示するには、Dataproc の永続履歴サーバー(PHS)を作成しておく必要があります。
ロケーションに関する留意事項
データのロケーションを選択するときは、次の点を考慮してください。
マルチリージョン
同じ広い地理的エリアにある Google Cloud リソースを指定する必要があります。
BigQuery US マルチリージョン内の接続は、米国内の任意の地理的領域(
us-central1
、us-east4
、us-west2
など)内の単一リージョン内の Spark History Server または Dataproc Metastore を参照できます。BigQuery EU マルチリージョン内の接続は、EU(
europe-north1
やeurope-west3
)の加盟国にある Dataproc Metastore を参照できます。
単一リージョン
単一リージョン内の接続では、同じリージョン内の Google Cloud リソースのみを参照できます。たとえば、単一リージョン us-east4
の接続は、us-east4
の Spark 履歴サーバーまたは Dataproc Metastore のみを参照できます。
接続を作成する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続を作成するには、[
データを追加] をクリックし、続いて [外部データソースへの接続] をクリックします。[接続タイプ] リストで、[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 形式で接続固有のパラメータを指定する Key-Value ペア次に例を示します。
--properties='{ "metastoreServiceConfig": {"metastoreService": "METASTORE_SERVICE_NAME"}, "sparkHistoryServerConfig": {"dataprocCluster": "DATAPROC_CLUSTER_NAME"} }'
次のように置き換えます。
METASTORE_SERVICE_NAME
: gRPC ネットワーク構成を含む Dataproc Metastore(例:projects/my-project-id/locations/us-central1/services/my-service
)詳細については、保存された Hive メタストア メタデータにエンドポイント プロトコルを使用してアクセスする方法をご覧ください。
DATAPROC_CLUSTER_NAME
: Spark History Server の構成(例: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 を取得してコピーします。
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 を指定し、BigQuery でメタストア構成の詳細を取得する場合、サービス アカウントに Dataproc Metastore に対する
metastore.services.get
権限を付与する必要があります。事前定義の
roles/metastore.metadataViewer
ロールには、サービス アカウントがメタストア構成の詳細を取得するために必要な権限が含まれています。また、サービス アカウントに Cloud Storage バケットに対する
roles/storage.objectAdmin
ロールを付与して、ストアド プロシージャが Dataproc Metastore(hive.metastore.warehouse.dir
)の Hive ウェアハウス ディレクトリにアクセスできるようにする必要があります。ストアド プロシージャがメタストアに対してオペレーションを実行する場合は、さらに権限の付与が必要になることがあります。Dataproc Metastore の IAM ロールと権限の詳細については、Dataproc Metastore の事前定義ロールと権限をご覧ください。接続の作成時に Dataproc 永続履歴サーバーを指定する場合は、サービス アカウントに次のロールを付与する必要があります。
dataproc.clusters.get
権限を含む Dataproc 永続履歴サーバーのroles/dataproc.viewer
ロール。- Dataproc 永続履歴サーバーの作成時にプロパティ
spark:spark.history.fs.logDirectory
に指定した Cloud Storage バケットに対するroles/storage.objectAdmin
ロール。
詳細については、Dataproc 永続履歴サーバーと Dataproc のロールと権限をご覧ください。
ユーザーと接続を共有する
次のロールを付与することで、ユーザーがデータをクエリして接続を管理できます。
roles/bigquery.connectionUser
: ユーザーが接続を使用して外部データソースに接続し、クエリを実行できるようにします。roles/bigquery.connectionAdmin
: ユーザーが接続を管理できるようにします。
BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続は、プロジェクトで外部接続というグループに一覧表示されます。
[エクスプローラ] ペインで、[プロジェクト名] > [外部接続] > [接続] の順にクリックします。
[詳細] ペインで、[共有] をクリックして接続を共有します。次に、以下の操作を行います。
[接続の権限] ダイアログで、プリンシパルを追加または編集して、他のプリンシパルと接続を共有します。
[保存] をクリックします。
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 のストアド プロシージャを作成する方法を確認する。
- ストアド プロシージャの管理方法を確認する。