Repos for Git integration | Databricks on AWSの翻訳です(2022/2/11時点)。
Databricksクイックスタートガイドのコンテンツです。
プレビュー
Databricks Reposにおける任意のファイルサポートははパブリックプレビューです。詳細は、Databricks repoにおける非ノートブックファイルの作業、Python、Rモジュールのインポートをご覧ください。
データサイエンス、データエンジニアリングのコード開発におけるベストプラクティスをサポートするために、Databricks ReposはGitプロバイダーとのリポジトリレベルのインテグレーションを提供します。Databricksノートブックでコードを開発し、リモートのGitリポジトリと同期することができます。Databricksを用いることで、リモートリポジトリのクローンや、ブランチの管理、変更のプッシュ、プル、コミット時の差分の確認といったGitの機能を利用することができるようになります。
Databricks ReposはCI/CDパイプラインとインテグレーションできるようにAPIを提供しています。例えば、常に最新のコードバージョンになるように、プログラムからDatabricksのrepoをアップデートすることができます。
Databricks Reposでは、Gitリポジトリへのアクセスをコントロールする許可リストやソースコードにおける平文テキストシークレットの検知のようなセキュリティ機能も提供しています。
監査ログが有効化されている場合には、Databricksのrepoを操作した際に監査イベントが記録されます。例えば、Databricksのrepoを作成、更新、削除した際、ワークスペースに関連づけられているreposの一覧を表示した際、Databricks repoとリモートのGitと変更を同期した際に、イベントログが記録されます。
Databricks reposを用いたコード開発のベストプラクティスに関しては、CI/CDワークフローによるRepos連携のベストプラクティスを参照ください。
要件
Databricksは以下のGitプロバイダーをサポートしています。
- GitHub
- Bitbucket
- GitLab
- Azure DevOps
- AWS CodeCommit
GitサーバーはDatabricksからアクセスできるようになっています。Databricksでは、VPNの先にあるGitサーバーのようなプライベートGitサーバーはサポートしていません。
Databricks Reposにおける任意ファイルのサポートはDatabricksランタイム8.4以降で利用できます。
DatabricksにおけるGit連携の設定
- DatabricksワークスペースのSettingをクリックし、メニューからUser Settingsを選択します。
- User Settingsページで、Git Integrationタブに移動します。
-
GitHub、Bitbucket Cloud、GitLab、Azure DevOps、AWS CodeCommitの手順に従います。
- Azure DevOpsにおいては、Git連携はAzure Active Directoryトークンはサポートしていません。Azure DevOpsのパーソナルアクセストークンを使用してください。
- GitHubにおいて会社のSAML SSOが有効化されているのであれば、SSOに対して認証されたあなたのパーソナルアクセストークンがあることを確認してください。
Databricks Reposにおける任意ファイルサポートの有効化
プレビュー
この機能はパブリックプレビューです。
リモートGitリポジトリとノートブックを同期することに加え、Files in Reposは、.py
ファイル、.csv
、.json
フォーマットのデータファイル、.yaml
設定ファイルなどあらゆるタイプのファイルを同期することを可能にします。これらのファイルをDatabricks repoにインポートして読み込むことができます。また、UIでプレーンテキストファイルを参照、編集することもできます。
この機能のサポートを無効化した場合には、repoでは非ノートブックファイルを参照しつづけることはできますが、編集することはできなくなります。
要件
Databricks Reposで非ノートブックを取り扱うには、Databricks Runtime 8.4以上が必要となります。
Files in Reposの有効化
管理者が以下の手順を踏むことで、この機能を有効化できます。
- Admin Consoleに移動します。
- Workspace Settingsタブをクリックします。
- AdvancedセクションでFiles in Reposトグルをクリックします。
- Confirmをクリックします。
- ブラウザーをリフレッシュします。
Files in reposを有効化した後にrepoに最初にアクセスすると、repoに非ノートブックファイルを同期するためにプルオペレーションを実行しなくてはならないことを知らせるダイアログが表示されます。ファイルを同期するためにAgree and Pullを選択します。マージの競合があるばあいには、競合する変更を破棄するか、新規ブランチに変更をプッシュするのかを選択するためのダイアログが表示されます。
リモートGitリポジトリのクローン
リモートのGitリポジトリをクローンし、Databricks上でノートブックやファイルを操作することができます。ノートブックを作成し、ノートブックや他のファイルを編集し、リモートリポジトリと同期します。開発作業のために新規ブランチを作成することもできます。PRの作成、競合の解決、ブランチのマージ、削除、ブランチのリベースなどいくつかのタスクに関しては、Gitプロバイダーで作業しなくてはなりません。
- サイドバーのReposをクリックします。
-
Add Repoをクリックします
-
Add RepoダイアログでClone remote Git repoをクリックし、リポジトリのURLを入力します。ドロップダウンメニューからGitプロバイダーを選択し、必要に応じてDatabricks repoで使用する名前を変更し、Createをクリックします。リモートリポジトリのコンテンツがDatabricks repoにコピーされます。
Databricks repoにおけるノートブックの作業
Repoに新規ノートブックあるいはフォルダを作成するには、Repo名の隣の下矢印をクリックし、Create > NotebookあるいはCreate > Folderを選択します。
Repoにノートブックあるいはフォルダを移動するには、ノートブック、フォルダのドロップダウンメニューからMoveを選択します。
SQLやPythonファイルを単一セルで構成されるDatabrikcsノートブックとしてインポートすることが可能です。
- SQLファイルの先頭行に
-- Databricks notebook source
を追加してください。 - Pythonファイルの先頭行に
## Databricks notebook source
を追加してください。
Databricks repoにおける非ノートブックファイルの作業
このセクションでは、どのようにrepoにファイルを追加し、参照、編集するのかを説明します。
プレビュー
この機能はパブリックプレビューです。
新規ファイルの作成
repoにファイルを作成するもっとも一般的な方法はGitリポジトリをクローンすることです。Databricks repoに新規ファイルを直接作成することもできます。repoの名前の隣の下向き矢印をクリックし、メニューからCreate > Fileを選択します。
ファイルのアップロード
ローカルシステムからファイルをアップロードするには、repoの名前の隣の下向き矢印をクリックし、メニューからUpload File(s)を選択します。ダイアログにファイルをドラッグするか、ファイルを選択するためにbrowseをクリックします。
ファイルの編集
repoのファイルを編集するには、Reposブラウザでファイル名をクリックします。ファイルがオープンし、編集することができます。変更は自動で保存されます。
マークダウン(.md
)ファイルを開いた際、デフォルトではレンダリングされたビューが表示されます。ファイルを編集するには、ファイルエディタ内をクリックします。プレビューモードに戻るには、ファイルエディタ外の任意の場所をクリックします。
コードのリファクタリング
コード開発のベストプラクティスは、容易に再利用できるようにコードをモジュール化することです。RepoでカスタムのPythonファイルを作成し、import
ぶんを用いてノートブックでこれらのファイルのコードを利用できるようにします。例えば、こちらのサンプルノートブックをご覧ください。
ノートブックを再利用可能なファイルにリファクタリングするには以下の手順を踏みます。
- ReposのUIから新規ブランチを作成します。
- 新規ソースコードファイルを作成します。
- ノートブックで上記新規ファイルのコードを利用できるように、Pythonのimport文を追加します。
- 変更をGitプロバイダーにコミットしプッシュします。
プログラムからrepoのファイルにアクセスする
.csv
や.json
ファイルのような小さいデータファイルをプログラムから読み込むことができます。ノートブックのプログラムからファイルを作成、編集することはできません。
import pandas as pd
df = pd.read_csv("./data/winequality-red.csv")
df
repoのファイルにアクセスするのにSparkを使うこともできます。Sparkはファイルデータにアクセスするためには絶対パスが必要となります。repoにおけるファイルの絶対パスはfile:/Workspace/Repos/<user_folder>/<repo_name>/file
となります。
ファイルの隣のドロップダウンメニューからRepoのファイルの絶対パス、相対パスをコピーすることができます。
以下の例では、フルパスを取得するために{os.getcwd()}
を使っています。
import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")
サンプルノートブック
以下のノートブックはrepoで任意のファイルをどのように取り扱うのかを説明しています。
Databricks Reposにおける任意ファイルの取り扱い
Python、Rモジュールを取り扱う
プレビュー
この機能はパブリックプレビューです。
要件
Databricksランタイム8.4以降が必要です。
Python、Rモジュールのインポート
repoにおける現在の作業ディレクトリとノートブックは自動的にPythonのパスに追加されます。repoのルートで作業している際には、ルートディレクトリ、全てのサブディレクトリからモジュールをインポートすることができます。
別のrepoからモジュールをインポートするには、以下のように対象のrepoをsys.path
に追加する必要があります。
import sys
sys.path.append("/Workspace/Repos/<user-name>/<repo-name>")
# to use a relative path
import sys
import os
sys.path.append(os.path.abspath('..'))
クラスターライブラリに保存されたモジュールやノートブックスコープライブラリと同じように、repoのモジュールから関数をインポートすることができます。
from sample import power
power.powerOfTwo(3)
source("sample.R")
power.powerOfTwo(3)
Databricks Pythonノートブックをインポートする
通常のPythonファイルと、ソースコード形式でエクスポートされたDatabricksのPythonノートブックを区別するために、Databricksはノートブックのソースコードファイルの先頭に# Databricks Notebook source
という行を追加します。
ノートブックをインポートする際、Databricksはこれを認識し、Pythonモジュールではなくノートブックとしてインポートします。
ノートブックをPythonモジュールとしてインポートしたいのであれば、コードエディタでノートブックを編集し、# Databricks Notebook source
の行を削除する必要があります。この行を削除することでノートブックを通常のPythonファイルに変換することができます。
優先ルールのインポート
Repoのノートブックでimport
文を使用すると、Repoのライブラリはクラスターにインストールされている同名のライブラリやwheelよりも優先されます。
Pythonモジュールのオートリロード
Pythonコードを開発している際に複数のファイルを編集しているのであれば、以下のコマンドを使用することで全てのモジュールのリロードを強制することができます。
%load_ext autoreload
%autoreload 2
テストにDatabricks webターミナルを使用する
ファイルをインポートして、ノートブックで実行することなしにPython、Rモジュールに対する変更をテストするために、Databricks webターミナルを使用することができます。
- webターミナルを開きます。
- Repoのディレクトリに移動します:
cd /Workspace/Repos/<path_to_repo>/
- Python、Rファイルを実行します。
python file_name.py
あるいはRscript file_name.r
リモートGitリポジトリと同期する
Gitと同期する際には、Gitダイアログを使います。GitダイアログではリモートGitリポジトリから変更をプルしたり、変更をコミットすることが可能です。また、作業するブランチを切り替えたり、新たなブランチを作成できます。
重要
- ダイアログでGitの操作を行うと、ノートブックに付けられているコメントや改訂履歴はクリアされます。詳細は変更が発生するとRepoのノートブックのコメントはクリアされますを参照ください。
- ノートブックがノートブックエクスペリメントと関連づけられており、当該ノートブックを含まないブランチに切り替えた場合、エクスペリメントは永久に削除されます。詳細はMLflowエクスペリメントが失われる可能性を参照ください。
Gitダイアログを開く
ノートブックあるいはReposブラウザからGitダイアログにアクセスできます。
- ノートブックにおいては、ノートブックの左上にあるGitブランチのボタンをクリックします。
- Reposブラウザでは、Repo名の隣のボタンをクリックします。
- あるいは、Repo名の下矢印ボタンをクリックし、**Git...**を選択します。
リモートGitリポジトリから変更をプルする
リモートGitリポジトリから変更をプルするには、Gitダイアログでをクリックします。ノートブックがリモートリポジトリの最新バージョンで更新されます。
マージの競合の解決方法に関しては、マージの競合を参照ください。
マージの競合
マージの競合を解決するためには、競合する変更を破棄するか、新規ブランチに変更をコミットし、プルリクエストを用いてオリジナルのフィーチャーブランチにマージする必要があります。
-
マージの競合がある場合には、Repos UIではプルのキャンセルか競合の解決を行うためのメッセージが表示されます。Resolve conflict using PRを選択した場合、変更をコミットするための新規ブランチを作成するためのダイアログが表示されます。
-
Commit to new branchをクリックすると、リンクCreate a pull request to resolve merge conflictsを含むメッセージが表示されます。Gitプロバイダーにアクセスするためにリンクをクリックします。
-
GitプロバイダーでPRを作成し、競合を解決し、新規ブランチをオリジナルのブランチにマージします。
-
Repos UIに戻ります。オリジナルブランチに対応するGitリポジトリから変更をプルするためにGitダイアログを使用します。
リモートGitリポジトリに変更をコミット、プッシュする
新たなノートブックを作成した、あるいは、既存のノートブックに変更を加えた際には、Gitダイアログは変更点を表示します。
変更点のサマリーを入力し、Commit & Pushをクリックすることでこれらの変更点をリモートGitリポジトリにプッシュします。
マスターブランチへのプッシュ権限がない場合には、ブランチを新たに作成し、Gitプロバーダーのインタフェースで、マスターブランチにマージするためのプルリクエスト(PR)を作成します。
注意
- ノートブックのコミットには実行結果は含まれません。コミットが行われる前に実行結果全てがクリアされます。
- マージの競合の解決方法に関しては、マージの競合を参照ください。
ブランチの作成
Gitダイアログで既存のブランチから新たなブランチを作成できます。
Databricks Reposのアクセス管理
権限の管理
Repoを作成した場合には、Can Manage権限を持ちます。これにより、Gitオペレーションを実行したり、リモートリポジトリを変更できます。Gitの認証情報(パーソナルアクセストークンとユーザー名)なしに、パブリックなリモートリポジトリをクローンできます。パブリックリモートリポジトリを変更あるいは、プライベートリモートリポジトリをクローン・変更するためには、リモートリポジトリに対する読み取り、書き込み権限を持ったGitプロバイダのユーザー名とパーソナルアクセストークンを持っている必要があります。
許可リストの利用
管理者は、ユーザーがコミット、プッシュできるリモートリポジトリを制限することができます。
- Admin Consoleに移動します。
- Workspace Settingsをクリックします。
- Advancedセクションで、Enable Repos Git URL Allow Listとグルをクリックします。
- Confirmをクリックします。
- Repos Git URL Allow List: Empty listの隣のフィールドに、カンマ区切りのURLプレフィクスのリストを入力します。
- Saveをクリックします。
ユーザーは指定されたURLプレフィクスに合致するGitリポジトリのみにコミット、プッシュが行えます。デフォルトの設定は「空のリスト」であり、全てのリポジトリへのアクセスを拒否しています。全てのリポジトリへのアクセスを許可するには、Enable Repos Git URL Allow Listを無効化します。
注意
- リストを保存することで、既存のURLプレフィクスのセットを上書きします。
- 効果が出るまでに約15分かかります。
シークレットの検知
Reposはコードに対してAKIA
のプレフィックスで始まるアクセスキーIDをスキャンし、コミットの前にユーザーに警告します。
Repos API
Repos APIのアップデートエンドポイントにより、特定のGitブランチの最新の状態にアップデートすることが可能です。これにより、Repoのノートブックをジョブで実行する前にRepoをアップデートすることができます。詳細に関してはRepos APIをご覧ください。
Terraformインテグレーション
Databricks Terraform providerとdatabricks_repoを用いて、完全に自動化された環境でDatabricks Reposを管理することができます。
resource "databricks_repo" "this" {
url = "https://github.com/user/demo.git"
}
CI/CDワークフローによるRepos連携のベストプラクティス
本章では、お持ちのCI/CDワークフローとDatabricks Reposをどのように連携されるかのベストプラクティスをご説明します。以下の図で全体像を示しています。
管理者のワークフロー
Reposはユーザー単位のフォルダとトップレベルのフォルダを持ちます。ユーザー単位のフォルダは、ユーザーがリモートリポジトリのクローンを作成した際に自動的に作成されます。ユーザーのフォルダは、ユーザーがそれぞれの変更を加えることができる”ローカルチェックアウト”と考えることができます。
トップレベルRepoフォルダの設定
管理者はトップレベルのフォルダを作成できます。一般的なユースケースは、Dev、Staging、Productionというそれぞれの開発フェーズに応じたブランチを格納するRepoを作成するというものです。例えば、あなたの組織がメインブランチをProductionに使っているのであれば、Prodcutionフォルダにはメインブランチと接続されたRepoが格納されます。
典型的なパターンでは、ワークスペースの非管理者ユーザーには、トップレベルのフォルダに対しては読み取り権限のみを与えます。
マージの際にRepoを更新するためのGit自動化の設定
Reposが常に最新の状態にあるようにするために、自動でRepos APIを呼び出すようにGitを設定することが可能です。PRによるメインブランチへのマージが成功する都度、Repos APIエンドポイントを呼び出し、Repoが最新の状態になるようにGitを設定できます。
例えば、GithubではGithub Actionsを用いて設定できます。
開発者のワークフロー
Databricks Reposのご自身のユーザーフォルダーでリモートリポジトリをクローンします。メインブランチに直接変更をプッシュするのではなく、新たにフィーチャーブランチを作成するか、以前に自身の作業用として作成したブランチを選択するのがベストプラクティスです。自身のコードをマージする準備ができたら、プルリクエストを作成し、Gitでのレビュー、マージプロセスに従います。
以下にサンプルのワークフローを示します。
要件
このワークフローを実施するには、Git連携の設定を完了している必要があります。
注意
それぞれの開発者は自身のフィーチャーブランチで作業することをお勧めします。開発者でフィーチャーブランチを共有すると、お使いのGitプロバイダーでの解決を必要とするマージの競合を引き起こします。マージの競合の解決方法に関しては、マージの競合を参照ください。
ワークフロー
- お使いの既存のGitリポジトリを自身のDatabricksワークスペースにクローンします。
- メインブランチからフィーチャーブランチを作成するためにRepos UIを使用します。この例では、シンプルにするためにfeature-bという単一のブランチを使用します。作業内容に応じて複数のフィーチャーブランチを作成、利用することができます。
- Repo内のDatabricksノートブック、ファイルに変更を加えます。
- 変更をGitプロバイダーにコミット、プッシュします。
- これで、同僚はGitリポジトリを自身のユーザーフォルダーにクローンすることができます。
- 新規ブランチで、同僚はRepo内のDatabricksノートブック、ファイルに変更を加えます。
- 同僚が変更をGitプロバイダーにコミット、プッシュします。
- 他のブランチの変更をマージするか、フィーチャーブランチを切り直すためには、Gitコマンドライン、あるいはローカルシステムのIDEを使用する必要があります。そして、Databricks Repo内にあるfeature-bブランチに変更をプルするために、ReposのUIでGitダイアログを使用します。
- 作業内容をメインブランチにマージする準備ができたら、feature-bの変更をマージするためのPRを作成するためにGitプロバイダーを使用します。
- Repos UIでメインブランチに対する変更をプルします。
プロダクションジョブワークフロー
ジョブにはReposのノートブックを直接指定できます。ジョブが実行される際には、Repoの現在のバージョンのものが使用されます。
管理者のワークフローで説明した自動化処理が設定されている場合には、マージが成功するたびにRepos APIが呼び出されReposが更新されます。結果として、ジョブは常に最新の状態のコードを実行することになります。
移行のティップス
プレビュー
この機能はパブリックプレビューです。
ノートブックで定義されているPython、Rの関数を他のノートブックで利用できるようにするために、%run
コマンドを使用しているか、クラスターにカスタムの.whl
ファイルをインストールしているのであれば、これらのカスタムモジュールをDatabrikcsのrepoに格納することを検討してください。こうすることで、ノートブックと他のコードモジュールを同期することができ、ノートブックが常に適切なバージョンを使用していることを保証し続けられます。
%run
コマンドからの移行
%run
コマンドを用いることでノートブックに他のノートブックを含めることができ、サポート用のPython、Rコードを他のノートブックで利用できるようにするためによく利用されます。この例では、power.py
というノートブックに以下のようなコードが記述されているものとします。
# This code is in a notebook named "power.py".
def n_to_mth(n,m):
print(n, "to the", m, "th power is", n**m)
次に、%run
コマンドを使用してpower.py
で定義されている関数を、別のノートブックで使用できるようにします。
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
Files in Reposを用いることで、Pythonコードを含むモジュールを直接インポートし、関数を実行することができます。
from Power import n_to_mth
n_to_mth(3, 4)
カスタムPython.whl
ファイルからの移行
カスタム.whl
ファイルをクラスターにインストールし、クラスターにアタッチされているノートブックでこれらをインポートすることができます。コードが頻繁にアップデートされる場合には、このプロセスは面倒で、エラーが混入しやすいものとなります。Files in Reposを用いる音で、これらのPythonファイルをモジュールを利用するノートブックと同じrepoに格納することで、ノートブックが適切なバージョンを使用していることを保証できます。
Pythonプロジェクトのパッケージングに関しては、こちらのチュートリアルをご覧ください。
制限及びFAQ
変更が発生するとRepoのノートブックのコメントはクリアされます
ノートブックソースコードを変更するGitオペレーションは、セルの結果、コメント、改訂履歴、ウィジェットを含むノートブックの状態をクリアします。例えば、Gitのプルはノートブックのソースコードを変更する場合があります。この場合、Databricks Reposは変更をインポートするために既存のノートブックを上書きする必要があります。Gitコミット、プッシュや、新規ブランチの作成は、ノートブックソースコードに影響を与えないので、これらのオペレーションではノートブックの状態は保持されます。
MLflowエクスペリメントが失われる可能性
以下のワークフローにおいては、MLflowのエクスペリメントが恒久的に削除されます。
- ブランチAでノートブックのMLflowエクスペリメントを実行します。エクスペリメントがMLflowに記録されます。
- ノートブックを持たないブランチBに切り替えます。ノートブックが削除されたことを知らせるダイアログが表示されます。
- 再度ブランチAに切り替えると、ノートブックは依然として存在しますが、もはやエクスペリメントは存在しません。
Gitオペレーションが進行中のノートブックでジョブがスタートしたら何が起きますか?
Gitオペレーションが進行中の際、Repoのいくつかのノートブックがアップデートされ、いくつかのものはアップデートされていない可能性があります。これによって、予期しない振る舞いをする場合があります。
例えば、ノートブックAがノートブックZを%run
コマンドで呼び出しているとします。Gitオペレーションがスタートしている間にジョブが実行される際、ノートブックAは最新バージョンですが、ノートブックZはまだアップデートされていない場合、ノートブックAの%run
コマンドは、古いバージョンのノートブックZを起動するかもしれません。Gitオペレーションの間は、ノートブックの状態は予測不可能であり、ジョブは失敗するか、ノートブックAとノートブックZが異なるバージョンで実行される可能性があります。
どうすれば、Databricksノートブック以外の.pyファイルなどをRepoで実行できますか?
以下の方法があります。
- クラスターにライブラリとしてデプロイします
- Gitリポジトリから直接pipでインストールします。シークレットマネージャによる認証情報が必要となります。
- ノートブックで
%run
を使います。 - カスタムコンテナイメージを使います。Customize containers with Databricks Container Servicesを参照ください。
ユーザーフォルダではなくトップレベルフォルダを作成できますか?
はい、管理者は単一階層を持つトップレベルフォルダを作成できます。Reposでは複数階層のフォルダはサポートしていません。
ReposはコミットのGPGサインをサポートしていますか?
いいえ
Githubのトークンはどこにどのように格納されますか?Databricksから誰かアクセスできますか?
- Databricksのコントロールプレーンに認証用のトークンは格納されます。Databricksの従業員は監査された一時的な認証情報を用いてのみアクセスすることができます。
- Databricksはこれらの認証情報の作成、削除を記録しています。しかし、その利用は記録していません。Databricksは、Databricksアプリケーションによるトークンの利用を監査するために、Gitオペレーションを記録しています。
- Github enterpriseはトークンの使用を監査しています。他のGitサービスもGitサーバー監査機能を持っている場合があります。
Reposはオンプレミスあるいは自身でホストしたGitサーバーをサポートしていますか?
いいえ
ReposはGitサブモジュールをサポートしていますか?
いいえ。Gitサブモジュールを含むrepoをクローンすることはできますが、サブモジュールはクローンされません。
ReposはSSHをサポートしていますか?
いいえ、HTTPSのみです。
Reposは.gitignore
ファイルをサポートしていますか?
はい。ファイルをrepoに追加し、それをGitに追跡して欲しくない場合には、.gitignore
ファイルを作成するか、リモートリポジトリからクローンしたものを使うかして、拡張子を含むファイル名を追加してください。
.gitignore
はまだGitに追跡されていないファイルに対してのみ動作します。すでにGitに追跡されているファイルを.gitignore
ファイルに追加しても、Gitによって追跡され続けます。
外部のオーケストレーションツールに頼ることなしに、ジョブの実行前にGitからリポジトリの最新バージョンをプルすることができますか?
いいえ。大抵の場合、ブランチ(main/prod)に対する全てのプッシュがProductionのRepoを更新するように、Gitサーバーにおけるpre-commitとして連携できます。
ipynbファイルをプルできますか?
はい。ファイルはノートブックフォーマットではなく.json
ファイルにレンダリングされます。
Repoをエクスポートすることはできますか?
Repoの全体、ノートブック、フォルダーをエクスポートすることができます。非ノートブックのファイルをエクスポートはできません。Repo全体をエクスポートした際、非ノートブックは含まれません。これらをエクスポートするにはWorkspace CLI、Workspace API 2.0を使用してください。
ライブラリがクラスターにインストールされており、Repoのフォルダに同じ名前のライブラリが含まれている場合、どちらのライブラリがインポートされますか?
Repoのライブラリがインポートされます。
Repoのサイズ、ファイル数に制限はありますか?
Databricksは、repoのサイズに制限をかけていません。作業用のブランチは200MBに制限されます。個々のファイルは100MBに制限されます。
Repoには2000以上のノートブックを含めないことをお勧めします。
制限を超えた際にはエラーメッセージを受け取るかもしれません。最初のクローンでタイムアウトエラーが発生するかもしれませんが、バックエンドでは処理が成功しているケースもあります。
Reposはブランチのマージをサポートしていますか?
いいえ。Gitプロバイダーでプルリクエストを作成し、マージすることをお勧めします。
Databricks reposのコンテンツは暗号化されていますか?
デフォルトキーを用いてコンテンツは暗号化されています。カスタマーマネージドキーによる暗号化はサポートしていません。
DatabricksのRepoからブランチを削除することはできますか?
いいえ。ブランチを削除するには、Gitプロバイダー上で操作を行なってください。
Databricks reposのコンテンツはどこに格納されていますか?
Repoのコンテンツはコントロールプレーンのディスクに一時的にクローンされます。メインワークスペースにおけるノートブックと同様に、Databricksノートブックはコントロールプレーンのデータベースに格納されます。ノートブック以外のファイルは最大で30日間ディスクに保存されます。
ワークスペースでReposを無効にするにはどうしたらいいですか?
ワークスペースでGitに対するReposを無効にするには、以下の手順に従ってください。
- Admin Consoleに移動します。
- Workspace Settingsタブをクリックします。
- AdvancedセクションでReposとグルをクリックします。
- Confirmをクリックします。
- ブラウザーをリフレッシュします。
Files in Reposの制限
プレビュー
この機能はパブリックプレビューです。
- Databricksランタイム10.1以下では、Files in Repos(任意ファイルのサポート)はSparkストリーミングとの互換性がありません。Databricksランタイム10.1以下が動作しているクラスターでSparkストリーミングを使用するには、クラスターでFiles in Reposを無効にする必要があります。Spark設定
spark.databricks.enableWsfs
をfalse
に設定してください。 - Python、Rノートブックではネイティブファイルの読み込みをサポートしています。Scalaノートブックではサポートされていませんが、今と同じようにDBFSに対してScalaノートブックを使用することはできます。
- ファイルに対してはGitダイアログでdiffは利用できません。
- テキストにエンコードされるファイルのみがUIでレンダリングされます。Databricksでファイルを参照するには、ファイルサイズは10MB未満である必要があります。
- ノートブックからファイルを作成、編集することはできません。
- ノートブックのみをエクスポートすることができます。Repoから非ノートブックファイルをエクスポートすることはできません。
トラブルシュート
エラーメッセージ:Invalid credentials
以下を試してください:
- Git integrationタブ(User Settings > Git Integration)の設定が正しいことを確認してください。
- Add Repoダイアログで適切なGitプロバイダーを選択したことを確認してください。
- パーソナルアクセストークン、アプリケーションのパスワードが適切なリポジトリへのアクセス権限を持っていることを確認してください。
- GitプロバイダーでSSOが有効な場合には、SSOに対してトークンを承認してください。
- Gitのコマンドラインでトークンをテストしてください。以下のコマンドが成功する必要があります:
git clone https://<username>:<personal_access_token>@github.com/<org>/<repo_name>.git
git clone -c http.sslVerify=false -c http.extraHeader='Authorization: Bearer <token>' https://agile.act.org/
エラーメッセージ:Secure connection could not be established because of SSL problems
<link>: Secure connection to <link> could not be established because of SSL problems
DatabricksコントロールプレーンからGitサーバーにアクセスできない場合に、このエラーが発生します。プライベートなGitサーバーはサポートされていません。
Timeoutエラー
大規模repoのクローンや大規模ブランチのチェックアウトでタイムアウトエラーに直面する場合がありますが、バックグラウンドではオペレーションが完了している場合があります。ワークスペースの負荷が大きい場合には、後で再トライすることができます。
404エラー
非ノートブックファイルをオープンしようとした際に404エラーになった場合には、数分待ってから再トライしてください。ワークスペースで機能が有効化された際には、webappが設定フラグを取得するのに数分の時間差があります。
Databricks repoに非ノートブックファイルをプルした後にresource not found
エラー
Databricks Runtime 8.4以降を使用していない場合に、このエラーが発生する場合があります。repoで非ノートブックファイルを取り扱うには、Databricks Runtime 8.4以降が必要になります。
再クローンを提案するエラー
There was a problem with deleting folders. The repo could be in an inconsistent state and re-cloning is recommended.
このエラーは、Repoからフォルダーを削除する過程で問題が発生したことを示しています。これは、Repoに不整合が発生している状態であり、削除されたフォルダーが依然として存在していることを意味しています。このエラーが発生した場合には、状態をリセットするために削除、再クローンすることをお勧めします。
Unable to set repo to most recent state. This may be due to force pushes overriding commit history on the remote repo. Repo may be out of sync and re-cloning is recommended.
このエラーはローカルとGitの状態が乖離していることを示しています。これは、リモートのプッシュがローカルのリポジトリに存在している最近のコミットの上書きを強制した際に発生する場合があります。DatabricksではRepoのハードリセットをサポートしておらず、このエラーが発生した場合にはRepoの削除、再クローンをすることをお勧めします。
管理者がFiles in Reposを有効化したが、リモートのリポジトリをクローンしたり、既存のrepoにファイルをプルしても期待されるファイルが表示されない
- ブラウザーをリフレッシュし、新たな設定を取得するようにクラスターを再起動してください。
- クラスターはDatabricks Runtime 8.4以降が動作している必要があります。