Databricks Workflowsのご紹介

[Introduction to Databricks Workflows \| Databricks on AWS](https://docs.databricks.com/workflows/index.html) [2023/7/3時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

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

Databricksレイクハウスプラットフォームによるワークフローのオーケストレーションのメリットに関しては、[Databricks Workflows](https://www.databricks.com/jp/product/workflows)をご覧ください。

# Databricksワークフローの例

以下の図では、以下を行うためにDatabricksによってオーケストレートされているワークフローを説明しています:

1. クラウドストレージから生のクリックストリームデータを取り込み、データをクレンジング準備し、データのセッション化を行い、Delta Lakeに最終的なセッション化されたデータを永続化するDelta Live Tablesパイプラインを実行。
1. クラウドストレージから注文データを取り込み、処理のためにデータをクレンジング、変換し、最終的なデータセットをDelta Lakeに永続化するDelta Live Tablesパイプラインを実行。
1. 分析のための新たなデータを作成するために、注文データとセッション化されたクリックストリームデータを結合。
1. 準備したデータから特徴量を抽出。
1. 特徴量を永続化するタスクと機械学習モデルのトレーニングのタスクを並列で実行。

![](https://docs.databricks.com/_images/example-workflow-diagram.png)

# Databricksジョブとは？

Databricksジョブは、Databricksワークフローにおいてデータ処理や分析アプリケーションを実行するための手段です。ジョブは単一のタスク、あるいは複雑な依存関係を持つ大規模なマルチタスクにすることができます。Databricksは、あなたのジョブの全てにおけるタスクのオーケストレーション、クラスター管理、モニタリング、エラーレポートを管理します。ジョブは即時実行、使いやすいスケジューリングシステムを通じた定期実行、外部ロケーションに新規ファイルが到着した際の実行、ジョブが常に稼働し続けることを保証する連続実行が可能です。また、[ノートブックUI](https://docs.databricks.com/notebooks/index.html)でインタラクティブにジョブを実行することができます。

Jobs UI、Databricks CLI、Jobs APIを呼び出すことでジョブを作成、実行することができます。UIやAPIを用いて失敗した、あるいはキャンセルされたジョブのリペア、再実行を行うことができます。UI、CLI、APIと通知(メール、webhookの宛先、Slack通知など)を用いてジョブの実行結果を監視することができます。

Databricks CLIについては、[Jobs CLI \(legacy\)](https://docs.databricks.com/archive/dev-tools/cli/jobs-cli.html)をご覧ください。Jobs APIの使い方に関しては、[Jobs API](https://docs.databricks.com/api/workspace/jobs)をご覧ください。

以下のセクションでは、Databricksジョブの重要な機能をカバーします。

:::note warn
**重要！**
- ジョブはData Science & EngineeringワークスペースやMachine Learningワークスペースでのみ作成できます。
- 1つのワークペースにおけるタスクの同時実行数は1000に制限されます。即座に開始できないジョブ実行をリクエストした際には、`429 Too Many Requests`レスポンスが返却されます。
- 1時間あたりワークスペースで作成できるジョブの数は10000に制限されます(`runs submit`を含みます)。また、この制限はREST APIやノートブックワークフローで作成されるジョブにも適用されます。
:::

## ジョブタスクを用いたデータ処理と分析の実装

*タスク*を用いてデータ処理や分析のワークフローを実装します。ジョブは1つ以上のタスクから構成されます。ノートブック、JAR、Delta Live Tablesパイプライン、Python、Scala、Spark submit、Javaアプリケーションを実行するジョブのタスクを作成することができます。また、ジョブタスクは分析や可視化を作成するためにDatabricks SQLのクエリー、アラート、ダッシュボードをオーケストレートしたり、ワークフローでdbt変換処理を実行するためにdbtタスクを使うことができます。また、レガシーなSpark Submitアプリケーションもサポートされています。

タスク間の依存関係を指定することでタスクの実行順序をコントロールすることができます。タスクを直列、並列で実行するように設定できます。

## インタラクティブ、連続的、ジョブトリガーを用いたジョブの実行

ジョブのUI、API、CLIからインタラクティブにジョブを実行したり、[連続ジョブ](https://docs.databricks.com/workflows/jobs/schedule-jobs.html#continuous-jobs)を実行することができます。ジョブを定期実行するようにスケジュールを作成したり、Amazon S3やAzureストレージのような外部ロケーションに[新規ファイルが到着](https://qiita.com/taka_yayoi/items/6f46bbeb7815b0c31c55)した際にジョブを実行することができます。　

## 通知によるジョブの進捗の監視

ジョブやタスクがスタート、完了、失敗した際に通知を受け取ることができます。1つ以上のメールアドレスやシステムの宛先(webhookの宛先やSlackなど)に通知を送信することができます。[Add email and system notifications for job events](https://docs.databricks.com/workflows/jobs/job-notifications.html)をご覧ください。

## Databricks計算リソースを用いたジョブの実行

DatabricksクラスターやSQLウェアハウスは、ジョブの計算資源を提供します。ジョブクラスターやall-purposeクラスター、SQLウェアハウスを用いてジョブを実行することができます。

- ジョブクラスタはジョブや個々のジョブタスク専用のクラスターです。全てのタスクで共有されるジョブクラスターを用いてジョブを実行できますし、タスクを作成、編集する際に個々のタスクごとのクラスターを設定することができます。ジョブやタスクが起動する際にジョブクラスターが起動し、ジョブやタスクが終了するとジョブクラスターは停止します。
- All-purposeクラスターは手動で起動、停止される共有クラスターであり、複数のユーザーやジョブで共有することができます。

リソース使用量を最適化するには、ジョブではジョブクラスターを使うことをお勧めします。クラスター起動を待つ時間を削減するには、all-purposeクラスタの使用を検討してください。[ジョブにおけるDatabricks計算資源の活用](https://qiita.com/taka_yayoi/items/387eae5b21431dd2c522)をご覧ください。

クエリー、ダッシュボード、アラートのようなDatabricks SQLタスクの実行でSQLウェアハウスを使うことができます。また、dbtタスクを用いたdbt変換処理を実行するためにSQLウェアハウスを使うことができます。

## 次のステップ

Databricksジョブを使い始めるには:

- [クイックスタート](https://qiita.com/taka_yayoi/items/932e211757e697fe9d5e)で最初のDatabricksジョブワークフローを作成します。
- Databricksジョブの[ユーザーインタフェース](https://docs.databricks.com/workflows/jobs/create-run-jobs.html)を用いてワークフローの作成、実行方法を学びます。
- Databricksジョブのユーザーインタフェースでの[ジョブ実行の監視](https://docs.databricks.com/workflows/jobs/create-run-jobs.html)方法を学びます。
- ジョブの[設定オプション](https://docs.databricks.com/workflows/jobs/settings.html)を学びます。

Databricksジョブを用いたワークフローの構築、管理、トラブルシュートを学びます:

- [タスクバリュー](https://qiita.com/taka_yayoi/items/7774c043070c217d4e5f)を用いてDatabricksジョブにおけるタスク間の情報のやり取り方法を学びます。
- [タスクパラメーター変数](https://docs.databricks.com/workflows/jobs/task-parameter-variables.html)を用いてジョブタスクにジョブ実行のコンテキストの渡し方を学びます。
- [失敗したジョブのトラブルシュート、修正方法](https://qiita.com/taka_yayoi/items/82f8fdc147ada0f0bced)を学びます。
- [ジョブ実行の通知](https://docs.databricks.com/workflows/jobs/job-notifications.html)を用いてジョブが開始、完了、失敗した際に通知を受け取ります。
- [カスタムスケジュールに基づいたジョブの起動、あるいは連続ジョブ](https://docs.databricks.com/workflows/jobs/schedule-jobs.html)を実行します。
- [ファイル到着トリガー](https://qiita.com/taka_yayoi/items/6f46bbeb7815b0c31c55)を用いて、新規データが到着した際にDatabricksジョブを実行する方法を学びます。
- ジョブにおける[Databricks計算資源](https://qiita.com/taka_yayoi/items/387eae5b21431dd2c522)の使い方を学びます。
- Databricksジョブのワークフローの作成、管理をサポートする[Jobs APIアップデート](https://docs.databricks.com/workflows/jobs/jobs-api-updates.html)を学びます。
- Databricksジョブを用いたデータワークフローの実装に関する[ハウツーガイドとチュートリアル](https://docs.databricks.com/workflows/jobs/how-to/index.html)を活用します。

# Delta Live Tablesとは？

Delta Live TablesはETLとストリーミングデータ処理をシンプルにするフレームワークです。Delta Live Tablesは[Auto Loader](https://docs.databricks.com/ingestion/auto-loader/index.html)のビルトインサポートによる効率的なデータ取り込み、データ変換処理の宣言型実装をサポートするSQLやPythonインタフェース、Delta Lakeへの変換データの書き込みサポートを提供しています。データに対して実行する変換処理を定義すると、Delta Live Tablesはタスクのオーケストレーション、クラスター管理、モニタリング、データ品質、エラーハンドリングを管理します。

スタートするには、[What is Delta Live Tables?](https://docs.databricks.com/delta-live-tables/index.html)をご覧ください。

# DatabricksジョブとDelta Live Tables

DatabricksジョブとDelta Live Tablesは、エンドツーエンドのデータ処理、分析ワークフローの構築、デプロイのための包括的なフレームワークを提供します。

すべてのデータの取り込み、変換処理ではDelta Live Tablesを使いましょう。Delta Live Tablesの取り込み処理、変換処理を含むレイクハウスプラットフォームにおける単一あるいは複数のデータ処理、分析タスクから構成されるワークロードをオーケストレートするためにDatabricksジョブを活用しましょう。

ワークフローのオーケストレーションシステムとして、Databricksジョブは以下もサポートしています:

- スケジュールに基づいたワークフローのように、トリガーベースでのジョブの実行。
- ノートブック、スクリプト、外部ライブラリなどを通じた、SQLクエリー、機械学習、データ分析。
- JARでパッケージされたApache Sparkジョブの実行のような単一タスクから構成されるジョブの実行。

# Apache AirFlowを用いたワークフローのオーケストレーション

お使いのデータワークフローをオーケストレートするために、Databricksジョブを活用することはお勧めですが、データワークフローを管理、スケジュールするために[Apache Airflow](https://airflow.apache.org/)を活用することもできます。Airflowを用いて、Pythonファイルにワークフローを定義すると、Airflowがワークフローのスケジュールや実行を管理します。[Orchestrate Databricks jobs with Apache Airflow](https://docs.databricks.com/workflows/jobs/how-to/use-airflow-with-jobs.html)をご覧ください。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)