見出し画像

Azure Databricksクラスターをコンテナから起動してみた

こんにちは!
Digital Innovation Studioの山﨑です。半年前にAzure Databricksのインフラ構築を自動化した話をブログに書きましたが、今回もAzure Databricksに関することを書いてみようと思います。
Azure Databricksをすでに利用されている方や利用を検討されている方に少しでも参考になる情報があれば幸いです!

Azure Databricksのクラスターは、通常はDatabricks社が管理しているイメージから起動しますが、ユーザーが作成したコンテナで起動することも可能です。本ブログでは、カスタムコンテナでAzure Databricksのクラスター起動を実施してみようと思います。

そもそもDatabricksとは何?という方については以下のリンクをご参照ください。
Azure Databricks | Microsoft Azure
Azure Databricksのインフラ構築を自動化した話

Databricks クラスターをコンテナで起動するユースケース

カスタムのコンテナで起動するユースケースは以下のようなものがあります。

【引用】
Databricks Container Services を使用すると、クラスターの作成時に Docker イメージを指定できます。 ユース ケースの例を次に示します。

・ライブラリのカスタマイズ: インストールするシステム ライブラリを完全に制御できます。
・ゴールデン コンテナー環境: Docker イメージは、絶対に変更されないロックダウンされた環境です。
・Docker CI/CD 統合: Azure Databricks を Docker CI/CD と統合できます。

出典: Databricks Container Services を使用してコンテナーをカスタマイズする

上記以外のユースケースとして、個人的に考えているのは、クラスターをDatabricks社のイメージから起動する場合、関連するライブラリを毎回起動時にインストールするため、沢山ライブラリを入れると起動が遅くなりますが、予めコンテナ化しておくことでライブラリのインストールを省くことができるので起動時間を短くできるかなと思っています。

Databricks クラスターをコンテナで起動する検証

それではさっそくクラスターをコンテナで作成してみましょう。
ステップは大きく分けて3ステップとなります。

①コンテナ作成
②Azure Container Registry(ACR)にコンテナイメージの登録
③Azure Container Registry(ACR)に登録したコンテナイメージより、Databricks クラスター起動

検証イメージ

前提条件

・Azure Databricksが構築済み
・ACRが構築済み
  ・アクセスキーを取得済み(ユーザー名/passwordを取得済みであること
・Docker コンテナのビルド環境があること(本検証はWSL上で実施しています

手順

①コンテナ作成

 1.DockerFile作成

まず、DockerFileを作成します。
ベースイメージはDatabricks社が提供してくれていますので、こちらを利用します。

以下サンプルのDockerFileです。
Databricks社提供のイメージより、イメージをPULLして必要なライブラリをインストールしています。

DockerFile作成に関する参考サイト

FROM databricksruntime/standard

# update
RUN apt-get update
RUN apt install -y python3-pip 
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

# library install
RUN pip install scikit-learn tensorflow tensorflow_hub tensorflow_text

2.ACRへログイン /  コンテナ作成

次にACRへのログインとDockerFileよりコンテナを作成します。
ACにログインする際に、ユーザー名とパスワードが求めれらるので、ACRで取得したアクセスキー(ユーザー名/password)の情報を入力ください。

コマンドの以下の値はご自身の環境によって書き換えてください。
・<ACR name>:  事前に作成したACR名
・<container image name>:   任意のコンテナ名

# ACRにログイン
docker login <ACR name>.azurecr.io

# コンテナの作成
docker build . -t <container image name>

②ACRへアップデート

①で作成したコンテナをACRにアップロードしていきます。

コマンドの以下の値はご自身の環境によって書き換えてください。
・<ACR name>:  事前に作成したACR名
・<container image name>:   任意のコンテナ名

%sh

# イメージタグ付け
docker tag <container image name> <ACR name>.azurecr.io/<container image name>

# ACRへPush
docker push <ACR name>.azurecr.io/<container image name>

③ACRへアップロード確認 & Docker イメージURL取得

Azureコンソールにログインし、コンテナがACRに登録されているか確認します。  赤枠で囲ったDockerイメージのURLは後から利用するのでメモしておいてください。

③Databricks クラスター設定

Databricksコンソールより、ACRに登録したコンテナからクラスターを起動するようにクラスターの設定を行います。
クラスター作成画面で、「Use your own Docker container」にチェックを入れるとDockerイメージに関する入力欄が見えるようになります。

・Use your own Docker container: ■
・Docker Image URL: ③で取得したDockerイメージ URL
・Authentication: Username and Password
・Username:  ACRアクセスキー ユーザー名
・Password:  ACRアクセスキー password

入力例

④動作確認

最後にクラスターを起動します。  
クラスター起動後にEventLogを確認し、「RUNNING」になっていることが確認できれば、クラスターを起動は成功です。  
後は、任意のノートブックを起動して、スクリプトが実行できることを確認してみてください。

EventLog 例

検証は、以上となります。
ちなみに、不明点があれば、Microsoftも手順をまとめてくださっているので、そちらも合わせてご確認ください。
https://docs.microsoft.com/ja-jp/azure/databricks/clusters/custom-containers

【おまけ】クラスター起動時間の比較

イメージから起動した場合とコンテナから起動した場合にどれくらい起動時間が異なるのか気になったので、調べてみました。
※入れているライブラリやクラスターのタイプによって、起動時間は変わりますので、あくまで参考値としてみていただけますと幸いです。

検証内容

Databricksのイメージから起動したクラスタとACRに登録されているコンテナから起動したクラスタの起動時間を比較しました。
Event TypeのSTARTINGからRUNNINGの時間を起動時間としています。

条件

・以下のライブラリをクラスターで利用できる状態にする
    scikit-learn tensorflow tensorflow_hub tensorflow_text

・イメージ:クラスタ設定のLibrariesに必要なライブラリをインストールする設定を入れる
・コンテナ:必要なライブラリを予めコンテナに含む

起動時間 結果

各クラスタを3回起動して結果を確認しました。

コンテナ
・1回目: 5分28秒
・2回目: 5分47秒
・3回目: 5分32秒

イメージ
・1回目: 17分14秒
・2回目: 14分50秒
・3回目: 16分40秒

考察

3回ともコンテナのほうが早く起動してきました。冒頭にも記載しましたが、やはりクラスター起動時にライブラリを再度インストールしているのでそこで時間がかかっているようですね。

最後に

今回Databricks クラスターをACRに登録したコンテナから起動してみました。クラスター側の設定がかなり簡単だったため、迷うことなくすぐ実行まで行うことができました。
カスタムコンテナを使う場合は、セキュリティアップデート等を自身で行う必要があるため、管理が少し大変になりますが、クラスターを自在にカスタマイズできるため、分析環境としての幅がかなり広がるなと感じました。

以上となります!

*このドキュメントに含まれる会社名及び製品は、各社の商標または登録商標であり、会社及び製品の名前、商標、または著作権は、それぞれの所有者に帰属します。

この記事が気に入ったらサポートをしてみませんか?