Google Cloud Storage に接続する
この記事では、Google Cloud Storage (GCS) に保存されているテーブルとデータを読み書きするために、Databricks からの接続を構成する方法について説明します。
GCS バケットから読み取りまたは書き込みを行うには、アタッチされたサービス アカウントを作成し、バケットをサービス アカウントに関連付ける必要があります。 バケットには、サービスアカウント用に生成したキーを使用して直接接続します。
Google Cloud サービス アカウント キーを使用して GCS バケットに直接アクセスする
バケットを直接読み取りおよび書き込みするには、 Spark 設定で定義されたキーを設定します。
ステップ 1: Google Cloud Console を使用して Google Cloud サービス アカウントを設定する
Databricks クラスターのサービス アカウントを作成する必要があります。Databricks では、このサービス アカウントに、タスクを実行するために必要な最小限の特権を付与することをお勧めします。
-
左側のナビゲーション・ペインで「 IAMおよび管理 」をクリックします。
-
「サービスアカウント」 をクリックします。
-
[+ CREATE サービス アカウント ] をクリックします。
-
サービスアカウントの名前と説明を入力します。
-
[ 作成 ]をクリックします。
-
「 続行 」をクリックします。
-
[ 完了] をクリックします。
ステップ 2: GCS バケットに直接アクセスするためのキーを作成する
サービス アカウント用に生成する JSON キーは、Google Cloud アカウントのデータセットとリソースへのアクセスを制御するため、許可されたユーザーとのみ共有する必要がある秘密鍵です。
- Google Cloud コンソールのサービス アカウント リストで、新しく作成したアカウントをクリックします。
- [ キー] セクションで、[ キーの追加] > [新しいキーの作成 ] をクリックします。
- JSON キータイプを受け入れます。
- [作成 ] をクリックします。キーファイルがコンピューターにダウンロードされます。
ステップ 3: GCS バケットを設定する
バケットを作成する
バケットがまだない場合は、バケットを作成します。
-
左側のナビゲーション ウィンドウで [ストレージ ] をクリックします。
-
「 バケットを作成 」をクリックします。
-
[ 作成 ]をクリックします。
バケットを構成する
-
バケットの詳細を設定します。
-
「 権限 」タブをクリックします。
-
[アクセス許可 ] ラベルの横にある [ ADD ] をクリックします。
-
Cloud Storage ロールからバケットのサービス アカウントに Storage 管理者権限 を付与します。
-
[ 保存 ]をクリックします。
手順 4: サービス アカウント キーを Databricks シークレットに配置する
Databricks では、すべての資格情報の保存にシークレットスコープを使用することをお勧めします。 キー JSON ファイルの秘密鍵と秘密鍵IDをシークレットスコープに入れることができます Databricks 。 ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。 これにより、サービスアカウントキーが保護され、ユーザーはGCSにアクセスできます。 シークレットスコープを作成するには、「 シークレットの管理」を参照してください。
ステップ 5: Databricks クラスターを構成する
[ Spark Config ] タブで、グローバル設定またはバケットごとの設定を設定します。 次の例では、Databricks シークレットとして保存されている値を使用してキーを設定します。
クラスターアクセス制御とノートブックアクセス制御を一緒に使用して、サービスアカウントと GCS バケット内のデータへのアクセスを保護します。 コンピュートの権限とDatabricksノートブックを使用した共同作業を参照してください。
グローバル設定
指定された認証情報を使用してすべてのバケットにアクセスする必要がある場合は、この設定を使用します。
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id {{secrets/scope/gsa_private_key_id}}
<client-email>
、 <project-id>
を、キー JSON ファイルの正確なフィールド名の値に置き換えます。
バケットごとの設定
特定のバケットの認証情報を設定する必要がある場合は、この設定を使用します。 バケットごとの設定の構文では、次の例のように、各設定の末尾にバケット名が追加されます。
グローバル設定に加えて、バケットごとの設定も使用できます。 指定すると、バケットごとの設定がグローバル設定よりも優先されます。
spark.hadoop.google.cloud.auth.service.account.enable.<bucket-name> true
spark.hadoop.fs.gs.auth.service.account.email.<bucket-name> <client-email>
spark.hadoop.fs.gs.project.id.<bucket-name> <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key.<bucket-name> {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id.<bucket-name> {{secrets/scope/gsa_private_key_id}}
<client-email>
、 <project-id>
を、キー JSON ファイルの正確なフィールド名の値に置き換えます。
ステップ 6: GCS からの読み取り
GCS バケットから読み取るには、次のようなサポートされている形式で Spark 読み取りコマンドを使用します。
df = spark.read.format("parquet").load("gs://<bucket-name>/<path>")
GCS バケットに書き込むには、サポートされている任意の形式で Spark write コマンドを使用します。
df.write.mode("<mode>").save("gs://<bucket-name>/<path>")
<bucket-name>
を「ステップ 3: GCS バケットを設定する」で作成したバケットの名前に置き換えます。