Google Cloud Storage に接続する
この記事では、Google Cloud Storage (GCS) に格納されているテーブルとデータを読み書きするために Databricks からの接続を構成する方法について説明します。
GCS バケットから読み取りまたは書き込みを行うには、アタッチされたサービスアカウントを作成し、バケットをサービスアカウントに関連付ける必要があります。 サービスアカウント用に生成したキーを使用して、バケットに直接接続します。
Google クラウドのサービスアカウントキーを使用して GCS バケットに直接アクセスする
バケットに対して直接読み取りと書き込みを行うには、 Spark 設定で定義されたキーを設定します。
ステップ1:Googleクラウドコンソールを使用してGoogleクラウドサービスアカウントを設定する
Databricks クラスターのサービス アカウントを作成する必要があります。 Databricks では、このサービス アカウントに、タスクの実行に必要な最小限の特権を付与することをお勧めします。
左側のナビゲーションペインで [ IAM and Admin ] をクリックします。
「 サービス・アカウント」をクリックします。
[+ CREATE サービス アカウント] をクリックします。
サービス アカウントの名前と説明を入力します。
[作成]をクリックします。
「続行」をクリックします。
[完了] をクリックします。
ステップ 2: GCS バケットに直接アクセスするためのキーを作成する
警告
サービス アカウント用に生成する JSON キーは、Google クラウド アカウントのデータセットとリソースへのアクセスを制御するため、許可されたユーザーとのみ共有する必要がある秘密鍵です。
Google クラウド コンソールのサービス アカウント リストで、新しく作成したアカウントをクリックします。
[キー] セクションで、[キーの追加] > [新しいキーの作成] をクリックします。
JSON キーの種類を受け入れます。
「作成」をクリックします。キーファイルがコンピュータにダウンロードされます。
ステップ 4: サービス アカウント キーを Databricks シークレットに配置する
Databricks では、すべての資格情報を格納するためにシークレットスコープを使用することが推奨されています。 秘密キーと秘密キー ID をキー JSON ファイルから Databricks シークレットスコープに配置できます。 ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。 これにより、サービスアカウントキーが保護され、ユーザーは GCS にアクセスできるようになります。 シークレットスコープを作成するには、「 シークレット」を参照してください。
ステップ 5: Databricks クラスターを構成する
[ Spark Config ] タブで、次のスニペットを使用して、シークレットスコープに格納されるキーを設定します。
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 ファイルの正確なフィールド名の値に置き換えます。
クラスター アクセス制御とノートブック アクセス制御の両方を併用して、GCS バケット内のサービス アカウントとデータへのアクセスを保護します。 「コンピュート権限」と 「Databricks ノートブックを使用したコラボレーション」を参照してください。
ステップ 6: GCS から読み取る
GCS バケットから読み取るには、サポートされている任意の形式で Spark 読み取りコマンドを使用します。
df = spark.read.format("parquet").load("gs://<bucket-name>/<path>")
GCS バケットに書き込むには、サポートされている任意の形式で Spark write コマンドを使用します。
df.write.format("parquet").mode("<mode>").save("gs://<bucket-name>/<path>")
<bucket-name>
は、「ステップ 3: GCS バケットを設定する」で作成したバケットの名前に置き換えます。