メインコンテンツへジャンプ
Engineering blog

DatabricksにはDatabricksワークフローという機能があります。Databricksノートブックで開発したロジックを簡単にスケジュール処理にすることができます。

しかし、Databricksジョブの機能はスケジュール処理だけではありません。以下のように多彩な機能を提供しており、さまざまなユースケースで活躍します。本記事では、Databricksワークフロー、特にDatabricksジョブのさまざまな機能や活用方法をご説明します。

Databricksワークフローとは

Databricksワークフローは、Databricksレイクハウスプラットフォームでデータ処理、機械学習、分析パイプラインをオーケストレートします。ワークフローには、Databricksワークスペースで画面の操作を伴わないコードを実行するためのDatabricksジョブ、高信頼かつ維持可能なETLパイプラインを構築するためのDelta Live Tablesが統合されたフルマネージドのオーケストレーションサービスを提供します。

Databricksレイクハウスプラットフォームによるワークフローのオーケストレーションのメリットに関しては、Databricks Workflowsをご覧ください。

Workflow diagram
Databricksワークフローの例

Databricksジョブとは

Databricksジョブは、Databricksワークフローにおいてデータ処理や分析アプリケーションを実行するための手段です。ジョブは単一のタスク、あるいは複雑な依存関係を持つ大規模なマルチタスクにすることができます。Databricksは、あなたのジョブの全てにおけるタスクのオーケストレーション、クラスター管理、モニタリング、エラーレポートを管理します。以下の方法でジョブを起動することができます。

  • 即時実行
  • スケジューリングシステムを通じた定期実行
  • (S3など)外部ロケーションに新規ファイルが到着した際の実行
  • ジョブの連続実行

以降では、特筆すべきDatabricksジョブの機能をご紹介します。

マルチタスクジョブ

上述したように、Databricksジョブはマルチタスクです。タスクとはジョブを構成する処理単位です。一つ以上のタスクからジョブを構成することができます。こちらで説明されているように、タスクには以下のオブジェクトを割り当てることができます。

  • ノートブック(ワークスペース/Gitプロバイダー)
  • JAR
  • Spark-submit
  • Pythonスクリプト(ワークスペース/DBFS/Gitプロバイダー)
  • Pythonホイール
  • Delta Live Tablesパイプライン
  • SQL
  • dbt
  • ジョブ

すなわち、これらのタスクを組み合わせて柔軟にロジックを構成できるということです。さらに、これらのタスク間には依存関係を持たせることができます。前段のタスクの終了後に後段のタスクを実行したり、処理を分岐・集約することができます。最近では条件分岐の機能も追加されました。こちらに関しては、以降のセクションで詳細を説明します。

マルチタスクでジョブを構成できることのメリットはいくつか存在します。例えば、ジョブのすべてのロジックを1つのノートブックに記述する必要がなくなるので、コードのモジュール性が高まりメンテナンスが容易になります。さらに、以下のように複数の処理を簡便に並列化したい場合にも役立ちます。また、タスクごとの計算資源、設定を割り当てることができるので、あるタスクではGPU、別のタスクではCPUというように柔軟に計算資源を活用することができます。

jobs parallel processing
タスクの並列実行

実際にDatabricksを利用されているJapan Digital Design株式会社においても、こちらの並列処理の機能を活用して、さまざまな機械学習モデルのトレーニングの処理を並列化することで、使用計算資源の最適化、全体的な処理に要する時間の削減を実現されています。

条件分岐するジョブ

こちらの新機能では、前段のタスクの処理の成功や失敗に基づいて後段の処理を切り替えることができるようになります。さらに、柔軟性を持ってロジックを構成することができます。

conditional job execution
条件分岐するジョブ

この場合、前段のタスクtask-aの処理の成否に応じて、後段で実行されるタスクが変化します。

conditional job succeeded
前段のタスクが成功
conditional job failed
前段のタスクが失敗

ジョブから別のジョブの呼び出し

上述の通り、この新機能によってタスクとして別のジョブを選択できるようになりました。これによって、既存のジョブの拡張や統合が容易になります。

以下のようにジョブを作成します。これが呼び出されるジョブとなります。

callee job
呼び出されるジョブ

別のジョブを作成し、1つのタスクとして上のジョブを選択します。タスクの種類としてジョブを実行を選択します。

Select a job as a task
タスクの種類としてジョブを実行を選択

上で作成したジョブを選択します。

Select a job
タスクとしてジョブを選択

このジョブを実行することで、1つのジョブから別のジョブを実行することが可能となります。

call a job from job
別のジョブを含むジョブの実行

まとめ

これ以外にも、クラウドストレージにファイルが到着したことをトリガーとしたジョブの実行やジョブの連続実行もサポートされています。皆様のユースケースに応じてタスクをオーケストレーションできるDatabricksワークフロー、是非ご活用ください。すでにDatabricksを利用されているのであれば、こちらで説明した機能はすぐに利用できます。まだ、Databricksを利用されていない方はこちらからフリートライアルにサインアップください。