Databricksで処理を実行する際には計算資源が必要となります。Databricksでは大きく分けて以下の2種類の計算資源を提供しています。
- Databricksクラスター
- SQLウェアハウス
後者は、BI/SQLワークロードで使用するSQLワークロード特化の計算資源ですが、本書ではDatabricksクラスター(cluster) にフォーカスして説明します。
そして、上述の計算資源に加えていくつかの種類とモード(アクセスモード)が存在しています。本書では、モードの違いやどのようなケースではどのようなモードを使用してクラスターを作成すべきかを説明します。全体像を以下に示します。
Databricksクラスターとは
Databricksでコードを記述する際には計算資源は不要ですが、コードを実行する際には計算資源が必要となります。
- 実態はクラウドプロバイダーが提供するVMです。AWSならEC2、AzureならVM、GCPならCompute Engineです。
- クラウドで一から処理環境を構築するのは結構な手間(VMの作成、ソフトウェアのインストール、各種設定など)ですが、Databricksクラスターはこの辺りをカプセル化しているので非常に簡単に計算資源を準備することができます。
以下の例では、デフォルト設定を使用して1クリックでDatabricksクラスターを作成しています。
クラスター作成の詳細についてはこちらをご覧ください。
Databricksクラスターのタイプ
デフォルト設定であれば、1クリックでクラスターを作成できるのは上述した通りですが、要件に応じて設定を変更することができます。
設定項目は色々あるのですが、まず最初に検討する必要があるのはどのタイプのクラスターを使用するのかということです。
最も高いレベルでは以下の2種類が存在します。
- 汎用クラスター(all purpose cluster)
- ジョブクラスター(jobs cluster)
ジョブクラスターはDatabricksジョブ専用のクラスターなので本書では割愛し、汎用クラスターにフォーカスして説明します。
そして、クラスターでは、クラスターを誰が使用できるのか、クラスターからどのデータにアクセスできるのかをコントロールする設定項目であるクラスターアクセスモードがあります。
厳密に言えば、現在クラスターアクセスモードは4つあるのですが、Databricksでのデータ管理に用いられるUnity Catalogとの互換性があるクラスターアクセスモードは以下の2つとなります。
アクセスモード | ユーザーへの表示 | UCサポート | サポート言語 | 説明 |
---|---|---|---|---|
シングルユーザー | 常時 | Yes | Python, SQL, Scala, R | シングルユーザーに割り当てて利用可能。単一のユーザーを割り当ててクラスターを利用可能。一度に一人のユーザーしか当該クラスターを利用できない。Unity Catalogの資産にアクセスする際には割り当てられたユーザーを使用。 |
共有 | 常時(プレミアムプランが必要) | Yes | Python (Databricks Runtime 11.1以降), SQL | ユーザー間のデータ分離を用いて、複数ユーザーで使用することが可能。 |
クラスタータイプの選定基準
以下のメリット、デメリットを踏まえて選定することになります。
アクセスモード | メリット | デメリット |
---|---|---|
シングルユーザー | 使用できる機能に制限がない。 | ユーザーごとにクラスターが作成されるので、管理の手間が増える。 |
共有 | 一台のクラスターに複数ユーザーがアクセスするので、クラスターの台数を削減することができ管理の手間を削減できる。 | 使用できる機能に制限がある。 |
- 共有クラスターの機能制限に該当しないのであれば、共有アクセスモードのクラスターをお使いいただくことをお勧めします。
- 一方、機能制限に該当する場合にはシングルユーザーアクセスモードをお使いいただくことをお勧めします。管理の手間を削減するためには、クラスターポリシーを用いて野放図なクラスター作成を防ぐことをお勧めします。
共有アクセスモードの機能制限
機能制限の多くは改善予定であり、プライベートプレビューにサインアップいただければすぐに機能を活用できます。
機能制限 | コメント |
---|---|
クレディンシャルパススルーはサポートされません。 | レガシー機能です。 |
initスクリプトはサポートされません。 | プライベートプレビューにサインアップしてください。今後改善予定です。 |
Databricksランタイム13.0以前ではクラスターライブラリはサポートされません。 | Databricksランタイム13.1以降をお使いください。 |
Spark-submitジョブはサポートされません。 | Spark-submitジョブを使用するケースはあまり存在しません。 |
Databricks機械学習ランタイムはサポートされません。 | プライベートプレビューにサインアップしてください。今後改善予定です。 |
Scala、R、RDD APIやDBUtilsのようにクラウドストレージからデータを直接読み込むクライアントを使用することはできません。 | 言語サポートに関しては、プライベートプレビューにサインアップしてください。今後改善予定です。ファイルアクセスに関してはUnity CatalogのVolumesを活用ください。 |
Databricksランタイム13.1以前では、UDAF、UDTF、Pandas on Spark(applyInPandasとmapInPandas)を含むPython UDFを使うことはできません。 | Databricksランタイム13.2以降をお使いください。 |
クラスター選択のベストプラクティス
ユースケース1: 機械学習ワークロードを実行する
現時点ではシングルユーザーアクセスモードのクラスターをお使いいただくのが現実的です。
あるいは、Databricksランタイム13.1以降が稼働している共有クラスターでクラスターライブラリとして機械学習ライブラリをインストールいただくか、プライベートプレビューにサインアップください。
ユースケース2: Rで開発を行う
シングルユーザーアクセスモードのクラスターをお使いください。
ユースケース3: 多くのユーザーがPython、SQLを用いたDWH、ETLワークロードを実行する
共有アクセスモードのクラスターをお使いください。管理者の方はリソース使用状況を監視し、リソース不足が観測される場合にはリソース増強を検討ください。
ユースケース4: 機能制限を受けずに色々な実験を行う
パーソナルコンピュート(シングルユーザーアクセスモード)のクラスターをお使いください。