Azure Data FactoryからDatabricksノートブックをシングルノードで実行する方法

## 概要

Azure Data Factory から Databricks Notebook アクティビティにより Databricks のノートブックをシングルノードのジョブクラスターで実行する方法を共有します。データエンジニアリングなどのパイプラインを構築する際に、マルチノードが必要でないような処理を行うことがよくあり、そういった場合にはコスト削減につながります。いくつかの制約があることに注意して利用するようにしてください。

Azure Data Factory のリンクサービスにて、追加のクラスター設定を以下のように設定することで、シングルノードとなります。

| #    | 分類                      | 名前                             | 値         |
| ---- | ------------------------- | -------------------------------- | ---------- |
| 1    | クラスター Spark conf     | spark.databricks.cluster.profile | singleNode |
| 2    | クラスター Spark conf     | spark.master                     | local[*]   |
| 3    | クラスターのカスタム タグ | ResourceClass                    | SingleNode |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6634499f-d6e9-fd48-3d90-f7c05fef3896.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/20d07185-9f2f-bd14-7ad4-fbd58ec49135.png)

## シングルノードとは

Databricksにおけるシングルノード（Single Node）クラスターは、すべての処理が1つのノード（VM）上で実行される特殊なクラスター構成です。大量のデータ処理には適していませんが、少量のデータを扱うジョブや単一ノードの機械学習ライブラリなど、分散処理を必要としないワークロードに適しています。Databricks の課金単位である DBU も低くなることから、コストの最適化が可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1f98fc64-8967-82f9-141e-01b602a6f14e.png)

> 単一ノード コンピューティングは、少量のデータを使用するジョブや、単一ノードの機械学習ライブラリなどの非分散ワークロードを対象にしています。

引用元：[コンピューティング構成リファレンス - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/compute/configure#single-node)

シングルノードを利用する際の制限事項が下記のドキュメントに記載されており、利用時には確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c1e42cdf-941a-d9ea-cfb1-f02dd2e69d6b.png)

引用元：[コンピューティング構成リファレンス - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/compute/configure#selecting-single-or-multi-node)

## 実行手順

### 1. 事前準備

#### 1-1. カタログとスキーマを作成

以下のSQLコマンドでカタログとスキーマを作成します。

```sql
%sql
CREATE CATALOG IF NOT EXISTS qiita_test_01;
CREATE SCHEMA IF NOT EXISTS qiita_test_01.schema_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ebbe0683-52c7-f6ff-a794-e336afac7d32.png)

#### 1-2. テーブルを作成

サンプルデータを使用してテーブルを作成します。

```sql
%sql
CREATE OR REPLACE TABLE qiita_test_01.schema_01.nation
SELECT
  *
  FROM
    samples.tpch.nation
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d11d05e1-5e9c-1cec-f2c1-1237cb3525ad.png)

#### 1-3. 実行するノートブックを作成

作成したテーブルからデータを SELECT するノートブックを作成します。

```sql
%sql
SELECT
  *
  FROM
    qiita_test_01.schema_01.nation
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2e7cc344-382b-06c5-bb3c-f14e86bf1852.png)

### 2. Azure Data Factory にてパイプラインを作成

#### 2-1. Databricks のリンクサービスを作成

追加のクラスター設定を以下のように設定します。

| #    | 分類                      | キー                             | 値         |
| ---- | ------------------------- | -------------------------------- | ---------- |
| 1    | クラスター Spark conf     | spark.databricks.cluster.profile | singleNode |
| 2    | クラスター Spark conf     | spark.master                     | local[*]   |
| 3    | クラスターのカスタム タグ | ResourceClass                    | SingleNode |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6634499f-d6e9-fd48-3d90-f7c05fef3896.png)

#### 2-2.  Databricks Notebook アクティビティをもつパイプラインを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e67cc265-116f-6a69-aeb4-7239a74c2f5d.png)


### 3. Azure Data Factory から Databricks のノートブックを実行と確認

#### 3-1. パイプラインを実行

パイプラインを実行してノートブックを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/52044c3f-a372-02c3-a1d0-c567bf285102.png)

#### 3-2. シングルノードのクラスターが作成されたことを確認

実行時にシングルノードのクラスターが作成されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/20d07185-9f2f-bd14-7ad4-fbd58ec49135.png)

#### 3-3. ノートブックが実行されたことを確認

ノートブックが正常に実行されたことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ab46bf57-85b8-27be-36d2-10d2311ab117.png)