Important
標準コンピューティング用の Databricks Container Services は ベータ版です。 ワークスペース管理者は、ワークスペースのプレビュー ページからこの機能を有効にする必要があります。 これは、一般公開されている 専用コンピューティング用の Databricks Container Services とは別のサービスです。
標準コンピューティング用の Databricks Container Services を使用すると、 標準コンピューティングを作成するときに Docker イメージを指定できます。これにより、共有コンピューティング環境のカスタム コンテナーにアクセスできます。 Docker イメージはワークロード環境の唯一の定義であるため、開発と運用全体で一貫した結果を得るためのリモート環境をローカルで再現できます。
カスタム イメージは、PYTHON REPL コマンドやPython UDF など、ユーザー コードを実行するサンドボックス コンテナーに使用されます。 Spark エンジンは Databricks で管理された環境で実行され、Spark クエリは Spark Connect を使用してサンドボックス コンテナーと Spark エンジンの間で送信されます。
さらに、カスタム イメージの構築に役立つAzure Databricksは、サーバーレス環境バージョンに合わせて配置された基本イメージを提供し、ニーズに合わせて拡張できます。
Requirements
Databricks Container Services を標準コンピューティングに使用するには:
- コンピューティング リソースは Databricks Runtime 18 以降を実行し、 Standard アクセス モードを使用する必要があります。
-
dockerでPATHコマンドを使用できる最新の Docker デーモンが必要です。
Note
Databricks Runtime 18 では、 18 を選択します。 18.0 を選択しないでください。 18 ランタイム オプションの名前は、今後の更新で 18 LTS に変更されます。
手順 1: Databricks Container Services を Standard コンピューティングに対して有効にする
標準コンピューティングに Databricks Container Services を使用するには、ワークスペース管理者が [プレビュー ] ページからこの機能を有効にする必要があります。
- Azure Databricks ワークスペースに管理者としてサインインします。
- 右上のユーザー メニューで、[ プレビュー] をクリックします。
- 標準コンピューティング用の DCS を見つけてオンにします。
手順 2: カスタム イメージをビルドする
これらの手順では、Databricks で提供される基本イメージ (推奨) を拡張してカスタム イメージを構築する方法について説明します。 基本イメージには、Ubuntu、Python、JDK など、ワークロードを起動するために必要な依存関係が含まれています。
databricksruntime/environment:v5-standardをプルし、パッケージを上に重ねて、進行中の Databricks で管理されている更新プログラムとセキュリティ パッチを継承できます。
最小限の基本イメージをゼロからビルドする場合は、「 リファレンス: 最小限の基本イメージをゼロからビルドする」を参照してください。
手順 2a: 基本イメージをプルする
基本イメージをプルするには、次を実行します。
docker pull databricksruntime/environment:v5-standard
手順 2b: 基本イメージを拡張する Dockerfile を記述する
カスタム Python パッケージを基本イメージの /databricks/python3 仮想環境にインストールします。 これは、ワークロードを起動するシステム仮想環境です。
FROM databricksruntime/environment:v5-standard
RUN /databricks/python3/bin/python -m pip install <your python package>
次の例は、プライベート リポジトリからパッケージをインストールする方法を示しています。
FROM databricksruntime/environment:v5-standard
ENV PIP_INDEX_URL=https://pypi.org/simple
RUN /databricks/python3/bin/python -m pip install --no-cache-dir simplejson
任意の標準的な Dockerfile 命令 ( RUN、 ENV、 WORKDIR、 COPYなど) を使用できます。 次の手順は、Azure Databricks でワークロードが起動される方法により無視されます。
USERCMDENTRYPOINTEXPOSEHEALTHCHECKSHELLSTOPSIGNAL
Note
Scala ワークロードの場合は、JAR ファイルをイメージ内の /scala-jars/user ディレクトリにコピーし、サンドボックス ユーザーが読み取ることができるように chmod 0644 します。 Azure Databricks、このパスから Scala REPL クラスパスと Scala UDF クラスパスに JAR を読み込みます。
手順 2c: イメージをビルドする
イメージをビルドするには、次のコマンドを実行します。
docker build -f <your-dockerfile> -t <registry-url>/<project>[/<repo>]:<tag> .
警告
Azure Databricks コンピューティングでカスタム イメージを十分にテストします。 ローカル コンピューターまたはビルド コンピューターで動作するイメージは、Azure Databricksで起動すると、機能を起動したり、サイレント モードで機能を無効にしたり、動作を停止したりできない場合があります。
リファレンス: 最小限の基本イメージをゼロからビルドする
基本イメージの内容を完全に制御する必要がある場合 (たとえば、厳密なイメージ サイズ、サプライ チェーン、コンプライアンスの要件を満たすために)、 databricksruntime/environment:v5-standard を拡張する代わりに、最小限の同等のをゼロから構築できます。
警告
ゼロからビルドすることは高度なオプションです。 Python のピン、セキュリティ パッチ、プラットフォーム ツール、および v5-standard と /databricks/ 配下のプラットフォーム必須ファイルを含む、/etc/environment イメージに対するアップストリームでの変更を追跡する責任を負います。 代わりに、Databricks では、前述のdatabricksruntime/environment:v5-standardで示したようにを拡張することを推奨しています。
Databricks には、requirements.txtの基本的なPython環境を再作成する参照 Dockerfile と v5-standardが用意されています。 ビルドする前に、両方のファイルを同じディレクトリにダウンロードします。
-
Dockerfile (
Dockerfile拡張機能なしで.txtとして保存) - requirements.txt
イメージをビルドするには、次のコマンドを実行します。
docker build -t <your-registry>/<repo>:<tag> .
ビルド ホストが https://pypi.orgに到達できない場合は、次を実行して、ビルド時に pip インデックスをオーバーライドします。
docker build --build-arg PIP_INDEX_URL=https://your-mirror/simple -t <your-registry>/<repo>:<tag> .
次の手順に進む前に、次のコマンドを実行して、キュレーションされたPython パッケージが正常にインポートされることを確認します。
docker run --rm --cpus 2 <your-registry>/<repo>:<tag> \
/databricks/python3/bin/python -c \
"import pandas, numpy, pyarrow, mlflow, databricks.connect; print('OK')"
手順 3: イメージをレジストリにプッシュする
次に、イメージを Docker レジストリにプッシュします。 Databricks Container Services では、Standard コンピューティングと専用コンピューティングの両方で同じレジストリがサポートされています。
- 認証なし、または基本認証を使用したDocker Hub。
- 基本認証を使用するAzure Container Registry。
認証または基本認証をサポートしていない他のレジストリも機能する必要があります。 基本認証では、レジストリのユーザー名とパスワードが使用されます。
イメージ プルのパフォーマンスを最大限に高めるには、Azure Databricks ワークスペースと同じクラウドとリージョンのレジストリを使用します。
echo "$REGISTRY_PASSWORD" | docker login -u <registry-username> --password-stdin <registry-url>
docker push <registry-url>/<project>[/<repo>]:<tag>
Note
Docker Hubを使用する場合は、レート制限が 6 時間以内に起動する予定のコンピューティングに対応していることを確認します。 詳細については、Docker のドキュメントを参照してください。 この制限を超えた場合、要求は 429 Too Many Requestsを返します。
手順 4: コンピューティングを起動する
UI または API を使用して、カスタム イメージを使用するコンピューティングを起動できます。 次の要件を満たす必要があります。
- コンピューティング アクセス モードは Standard である必要があります (API では、
data_security_modeをDATA_SECURITY_MODE_STANDARDに設定します)。 コンピューティングが 専用 アクセス モードに設定されている場合は、別のバージョンの Databricks Container Services が使用されます。これは別の基本イメージを想定しており、ビルドした基本イメージで起動できません。 - Databricks ランタイムのバージョンは 18 以上である必要があります。 Databricks Runtime 18 では、 18.0 ではなく 18 を選択します。
Note
インスタンス プールに対して起動するには、preloaded_docker_imagesセットでプールを作成し、クラスターのdocker_imageが一致する必要があります。 起動する前に、 インスタンス プールで Databricks Container Services を使用するを 参照してください。
UI を使用してコンピューティングを起動する
[ コンピューティングの作成] ページで、 アクセス モード が Standard に設定され、 Databricks ランタイム が 18 以上に設定されていることを確認します。 18 と18.0 の両方が表示される場合は、18 を選択します。
[ 詳細設定] で[ Docker ] タブを選択します。
[独自の Docker コンテナーを使用する] を選択します。
[ Docker イメージ URL ] フィールドに、カスタム イメージを入力します。
レジストリ タグ形式 Docker Hub <organization>/<repository>:<tag>(例:databricksruntime/environment:v5-standard)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>認証の種類を選択します。 Docker イメージ認証を参照してください。
Note
コンピューティングの作成時に Docker の設定が表示されない場合は、ワークスペースで Databricks Container Services が有効になっていない可能性があります。 ワークスペース管理者は、ユーザーが Docker イメージを指定する前に有効にする必要があります。 「手順 1: Standard コンピューティングで Databricks Container Services を有効にする」を参照してください。
API を使用してコンピューティングを起動する
カスタム イメージを使用して標準コンピューティングを作成する API 呼び出しの例を次に示します。
data_security_modeが DATA_SECURITY_MODE_STANDARD に設定され、spark_versionが Databricks Runtime 18 以上の値に設定されていることを確認します。 Databricks Runtime 18 では、18.x-scala2.13ではなく、18.0.x-scala2.13を使用します。
databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id Standard_DS3_v2 \
--json '{
"num_workers": 1,
"docker_image": {
"url": "<docker-registry-image-url>",
"basic_auth": {
"username": "<docker-registry-username>",
"password": "<docker-registry-password>"
}
},
"spark_version": "18.x-scala2.13",
"data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'
Docker イメージ認証
認証要件は、Docker イメージの種類によって異なります。 シークレットを使用して、認証ユーザー名とパスワードを格納することもできます。 「認証にシークレットを使用する」を参照してください。
- パブリック Docker イメージの場合、認証情報を含める必要はありません。 UI で、[ 認証 ] を [既定] に設定します。 API 呼び出しの場合は、フィールドを含
basic_auth。 - プライベート Docker イメージの場合は、サービス プリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。
- Azure Container Registry の場合は、サービス プリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。 サービス プリンシパル作成の詳細については、Azure Container Registry サービス プリンシパルの認証に関するドキュメントを参照してください。
認証にシークレットを使用する
Databricks Container Service では、認証にシークレットの使用がサポートされています。 UI でコンピューティング リソースを作成するときは、[ 認証 ] フィールドを使用して ユーザー名とパスワードを選択し、プレーン テキストのユーザー名またはパスワードを入力する代わりに、 {{secrets/<scope-name>/<dcs-secret>}} 形式を使用してシークレットを入力します。 API を使用する場合は、 basic_auth フィールドにシークレットを入力します。
シークレットの作成の詳細については、「 シークレット管理」を参照してください。
インスタンス プールで Databricks Container Services を使用する
インスタンス プールで Databricks Container Services を使用するには、UI ではなく インスタンス プール API を使用してプールを作成する必要があります。
プールは、Docker イメージが事前に読み込まれた状態で作成する必要があります。 これにより、アイドル状態のインスタンスがカスタム イメージでウォームアップされ、ワークロードの開始速度が速くなります。 コンピューティングを直接起動するときに使用するのと同じイメージ参照と認証を使用して、要求の preloaded_docker_images フィールドを設定します。 フィールドはリストであるため、1 つのプールで複数のイメージをプリロードできます。
プールとそのアタッチされたコンピューティング リソースは、Docker が使用されているかどうかを確認する必要があります。 プールに preloaded_docker_images が設定されていない場合、それに対して Databricks Container Services コンピューティングを起動することはできません。
preloaded_docker_imagesセットで新しいプールを作成します。
preloaded_docker_imagesで作成されたプールの場合、プールに対して起動されるすべてのコンピューティング リソースは、作成要求で一致するdocker_imageを提供する必要があります。 そうしないと、コンピュートの作成は'docker_image' must be provided for cluster created with instance pool: <pool-id>で失敗します。
元の Databricks Container Services からの移行
標準コンピューティング用の Databricks Container Services は、専用コンピューティング用の元の Databricks Container Services とは異なるサービスです。 この機能には、次の違いがあります。
- ワークロードは Spark Connect プロトコルを介して実行されます。
- Init スクリプトは、ワークロードのPython環境を変更しません。 すべてのPython依存関係を Docker イメージにインストールする必要があります。 Datadog や Kafka エージェントなど、Spark からのデータを使用するアプリケーションでは、引き続き init スクリプトを使用できます。
専用コンピューティング用に元の Databricks Container Services から移行するには、標準コンピューティング用に Databricks Container Services でカスタム イメージを再構築し、コンピューティング構成を更新します。
- Dockerfile の
FROM行をFROM databricksruntime/environment:v5-standard(または AWS Graviton の場合はv5-standard-arm) に置き換えます。 - Dockerfile 命令を新しい基本イメージに移植します。 標準の Dockerfile 命令がサポートされています。ただし、「 手順 2: カスタム イメージをビルドする」に記載されている例外があります。
- Pythonパッケージを他の virtualenv ではなく
/databricks/python3にインストールします。 このパスから読み取られたワークロード (ノートブック、Python ホイール ジョブ、Python スクリプト ジョブ)。 - Standard アクセス モードと Databricks Runtime 18 以降を使用するようにコンピューティング構成を更新します。 Databricks Runtime 18 では、 18.0 ではなく 18 を選択します。
- init スクリプトが以前に実行したPython環境セットアップを Dockerfile に移動します。
制限事項
標準コンピューティングの 制限に加えて、標準コンピューティングの Databricks Container Services には次の制限があります。
- コンピューティング スコープ ライブラリはサポートされていません。
- プライベート パッケージ リポジトリはサポートされていません。
- databricks Runtime for Machine Learningはサポートされていません。
-
インスタンス プールに対して Databricks Container Services を使用して標準コンピューティングを起動するには、
preloaded_docker_imagesセットを使用してプールを作成する必要があります。 インスタンス プールでの Databricks Container Services の使用に関する説明を参照してください。
Troubleshooting
コンピュートの作成時に、[詳細] の下に Docker タブが表示されない場合は、Databricks Container Services はワークスペースで有効になっていません。 ワークスペース管理者は、ユーザーが Docker イメージを指定する前に、ワークスペースで有効にする必要があります。 「手順 1: Standard コンピューティングで Databricks Container Services を有効にする」を参照してください。
[ Docker ] タブは、 docker_image.url 属性を非表示にするコンピューティング ポリシーによって非表示にすることもできます。 この機能が有効になっていてもタブが見つからない場合は、割り当てられたポリシーがこの属性を非表示にするかどうかを確認するようにワークスペース管理者に依頼します。
サポートされている属性を参照してください。