今回は第三弾として、databricksをGCP上で立ち上げた、workspaceの中のnotebookで、実際に学習データを参照したいということが発生するのは必要不可欠で実際にどのようにやるのかの説明をします。
実際に記事はあるのですが、初見でこれをやろうとすると、いろんなリンクに飛ばされるので、この記事を見れば1発でどのようにデータ連携できるのかを書きます。
これまでの記事はこちらから
今回達成したいアーキテクチャと結論
実際にCloudStorageと連携するには、databricks上で学習instanceを立ち上げる設定画面で、GCP上で作成したCloudStorageにアクセスできるRoleを持ったIAM Accountを指定すればよいそうです。
途中でDatabricks CLIを使用するのでInstallしておく
macの方だと、brew commandもあってbrewでもinstallできます。
brew tap databricks/tap
brew install databricks
Step01: ServiceAccountとCloudStorageをGCP consoleから作成してServiceAccountの鍵をjsonでダウンロードする。
Service Accountには、roles/storage.admin
のCloudStorage管理者のRoleを割り当てる必要がある。
これはdatabricks上からアクセスするため。
実際にService AccountをJsonでダウンロードする
下記のkey-valueの形をしたjson fileが取得できて、ここの値を使用する部分はあとで使用する。
{
"type": "service_account",
"project_id": "ここの値を使用する",
"private_key_id": "ここの値を使用する",
"private_key": "ここの値を使用する",
"client_email": "ここの値を使用する",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": "",
"universe_domain": ""
}
Step02: Databricks-CLIでSecretとSerectScopeを作成
Databricks-cli上でsecretを作成するのだが、大きく、
- secretをまとめる、scope
- secretそのもの
を作成する必要がある。
これは、databricksのinstanceを立ち上げるときに、spark経由でアクセスするのだが、アクセスする設定fileにStep1で作成したSAのjsonファイルの中のここの値を使用する
部分を指定するのだがその中にdatabricks-workspaceのsecretとして登録しておく必要がある。
下記が最終的に、設定する項目なのだが、{{ }}
で囲まれている。private.key.id
とprivate.key
に関してはsecret化する。
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}}
このとき、以下のような意味を持つ。
{{secrets/<これから作成するscope名>/<これから作成するscopeの中に属するSecretKey>}}
databricks configureしてworkspaceにアクセスできるようにする。
databricks configure
下記と言われるので
✗ Databricks host: https://█
databricksのworkspaceを指定する。
https://xxxx.0.gcp.databricks.com/?o=xxxxxx
token: xxxx
tokenに関しては、personal access tokenをdatabricks workspaceの「ユーザー設定 > 開発者 > アクセストークン」を取得してCopy paste
実際にconfigureした後は、~/.databrickscfg
にconfig infoが保存される。実際に下記は保存されてるかのcheck
vi ~/.databrickscfg
色々認証方法があるみたい。
https://docs.databricks.com/en/dev-tools/auth/pat.html
scopeを作成する。
--initial-manage-principal users
を使わない方法もあるが、databricksのPremiumプランの場合だと必要ない。
databricks secrets create-scope test-connect-storage --initial-manage-principal users
実際に作成されたscope
matsudomasato@matsudomasatonoMac-Studio ~> databricks secrets list-scopes (base)
Scope Backend Type
test-connect-storage DATABRICKS
scopeを指定してsecretを作成する。
databricks secrets put-secret <scope-name> <key-name>
でsecret作成なので
scope: test-connect-storage
にgsa_private_key_id
とgsa_private_key
を作成する。
matsudomasato@matsudomasatonoMac-Studio ~> databricks secrets put-secret test-connect-storage gsa_private_key_id (base)
✔ Please enter your secret value:
//実際にStep1でJsonでダウンロードした、gsa_private_key_idとgsa_private_keyのvalueをそれぞれ作成
実際にsecretが格納されてるかのcheck
matsudomasato@matsudomasatonoMac-Studio ~ [1]> databricks secrets list-secrets test-connect-storage (base)
Key Last Updated Timestamp
gsa_private_key 1704042167423
gsa_private_key_id 1704042192332
これでsecretの設定はOK。下記が公式の内容
Step3: 学習用instanceを立ち上げる設定で上記の内容を設定する。
これらの情報を「高度なオプション」のSparkタブに書く
spark構成についてはもう一度貼る。
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}}
DONE。
試しにnotebookで指定したinstanceが使えるかを試してみる。
新しく作成したCloudStorageのBucket: databricks-to-gcs-test
にcsvを配置してdatabricks-workspaceに配置した、notebook上呼び出せるかをテスト。
今回作成した学習用instanceを指定するのを忘れずに。