0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloud 以外の Databricks のクラシックコンピュートにて Google Cloud Storage と連携する方法

Last updated at Posted at 2025-10-13

概要

Google Cloud 以外の Databricks (本記事では Azure Databricks)のクラシックコンピュート( Serverless でない従来のクラスター)にて Google Cloud Storage (GCS)と連携する方法を共有します。

2025年10月13日時点で、GCS に対するストレージ資格を登録できるのは、 Databricks on Google Cloud のみのようです。そのため、Databricks on AWS や Azure Databricks では GCS に対するストレージ資格を登録できません。

image.png

出所:Google Cloud Storageに接続するためのストレージ資格情報を作成する | Databricks on Google Cloud

そこで、 レガシーの方法として紹介されている GCS に対する資格情報を
Spark config に設定する方法を検証しました。Spark Conf の設定に制限がある Serverless クラスターで実施できず、クラシッククラスターを利用する必要があります。

image.png

出所:Google Cloud Storage に接続する - Azure Databricks | Microsoft Learn

事前準備

  • Azure Databricks
  • Google Cloud 環境

実施手順

1. GCS 環境の構築

GCS のバケットを作成

image.png

検証のためにパブリックアクセスを有効にしました。

image.png

フォルダを作成します。

image.png

Service Account の作成

image.png

GCS のバケットに対する権限を Service Account に付与

image.png

Service Account の認証情報を取得

image.png

ダウンロードできたファイルからかきの値を控えます。

  1. client_email
  2. project_id
  3. private_key
  4. private_key_id

image.png

2. Databricks における GCS 操作

クラスターを作成

Spark Config にて Service Account の認証情報を下記のようにセットしてクラスターを作成します。private_key と private_key_id の値を逆に設定しないように注意してください。

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 {private_key の値}
spark.hadoop.fs.gs.auth.service.account.private.key.id {private_key_id の値}

image.png

private_key や private_key_id を本手順ではそのままクラスターに設定しておりますが、基本的には Databricks シークレットに登録後に下記のように指定してください。

image.png

出所:Google Cloud Storage に接続する - Azure Databricks | Microsoft Learn

Databricks シークレットに登録する方法としては、 CLI や Databricks SDK を利用する方法があります。下記記事では Databricks SDK で実施する手順を紹介しています。

Databricks SDK for Python を試してみた #Python - Qiita

ノートブックスコープで Spark conf を設定するとエラーとなるため、必ずクラスターで設定するようにしてください。

spark.conf.set("spark.hadoop.google.cloud.auth.service.account.enable","true")
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.email", client_email)
spark.conf.set("spark.hadoop.fs.gs.project.id", project_id)
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.private.key", private_key)
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.private.key.id", private_key_id)

ExecutionError: An error occurred while calling o457.ls.
: java.io.IOException: Error getting access token from metadata server at: http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token

image.png

GCS に対する疎通確認

gcs_bucket_name = "dbx_with_gcs"

dbutils.fs.ls(f"gs://{gcs_bucket_name}/")

image.png

Databricks にて GCS のデータ操作

Databricks から GCS に書き込みを実施します。

schema = """
id int,
str_col string
"""
data = [
    {
        "id": 1,
        "str_col": "abc",
    },
    {
        "id": 2,
        "str_col": "def",
    },
    {
        "id": 3,
        "str_col": "ghi",
    },
]

df = spark.createDataFrame(data, schema=schema)
df.display()

df.write.format("delta").save(f"gs://{gcs_bucket_name}/tables/dbx_iceberg")

image.png

GCS に書き込まれていることを確認します。

image.png

Databricks にて GCS から読み込めることを確認します。

df_from_gcs = spark.read.format("delta").load(f"gs://{gcs_bucket_name}/tables/dbx_iceberg")
df_from_gcs.display()

image.png

GCS のディレクトリを初期化

dbutils.fs.rm(f"gs://{gcs_bucket_name}/tables", True)

image.png

GCS にてディレクター(tables フォルダ)が削除されたことを確認します。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?