Databricksのコンセプト

[Databricks concepts \| Databricks on AWS](https://docs.databricks.com/getting-started/concepts.html) [2022/10/26時点]の翻訳です。

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

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

本書では、Databricksをを効果的に使うために理解すべき基本的な一連のコンセプトをご紹介します。

いくつかのコンセプトはDatabricksで共通するものであり、他のものは使用するペルソナベースのDatabricks環境に固有のものとなります。

- Databricksデータサイエンス & エンジニアリング
- Databrikcsマシンラーニング
- Databricks SQL

# 一般的なコンセプト

このセクションでは、Databricksのペルソナベースの環境に共通して適用されるコンセプトを説明します。

## アカウントとワークスペース

Databricksでは*ワークスペース*には2つの意味があります。

1. Databricksのすべての資産にアクセスするためにチームが使用する統合環境として機能するクラウド上のDatabricksデプロイメントです。皆様の組織においては、必要に応じて単一のワークスペースか複数のワークスペースを持つことができます。
1. Databricksのペルソナベースの環境のためのUIです。

Databricksの*アカウント*は課金とサポートに対応する単一のエンティティを表現します。複数のワークスペースを含めることができます。

## 課金

**DBU**
Databricksは、VMインスタンスタイプに基づく時間あたりの計算能力の単位であるDatabricksユニット(DBU)に基づいて課金します。

[Databricks on AWS pricing estimator](https://databricks.com/jp/product/aws-pricing/instance-types)や[View billable usage using the account console](https://docs.databricks.com/administration-guide/account-settings-e2/usage.html)をご覧ください。

## 認証と承認

このセクションでは、DatabricksのアイデンティティとそれらのDatabricks資産に対するアクセスを管理する際に知るべきコンセプトを説明します。

[**ユーザー**](https://docs.databricks.com/administration-guide/users-groups/users.html)
システムにアクセスできるユニークな個人です。ユーザーアイデンティティはメールアドレスで表現されます。

[**サービスプリンシパル**](https://docs.databricks.com/administration-guide/users-groups/service-principals.html)
ジョブや自動化ツール、スクリプト、アプリケーション、CI/CDプラットフォームの様なシステムで使用するサービスアイデンティティです。サービスプリンシパルはアプリケーションIDで表現されます。

[**グループ**](https://docs.databricks.com/administration-guide/users-groups/groups.html)
アイデンティティのコレクションです。グループを用いることでアイデンティティ管理をシンプルにし、ワークスペース、データ、その他のセキュリティ保護可能オブジェクトに対するアクセス割り当てを容易にします。すべてのDatabrikcsアイデンティティは、グループのメンバーとして割り当てることができます。

[**アクセスコントロールリスト \(ACL\)**](https://docs.databricks.com/administration-guide/access-control/index.html)
ワークスペース、クラスター、ジョブ、テーブル、エクスペリメントにアタッチされる権限リストです。ACLはどのユーザーやシステムの処理が、オブジェクトに対してアクセスできるのか、どのようなオペレーションが資産に対して許可されるのかを指定します。通常のACLのそれぞれのエンティティでは、対象とオペレーションを指定します。

[**パーソナルアクセストークン**](https://docs.databricks.com/sql/user/security/personal-access-tokens.html)
SQLウェアハウスに接続するために、[Databricksインテグレーション](https://docs.databricks.com/integrations/index.html)のツールやREST APIを承認するために難読化された文字列が使用されます。

# Databricksデータサイエンス & エンジニアリング

[Databricksのデータサイエンス & エンジニアリング](https://docs.databricks.com/workspace-index.html)は、データサイエンティスト、データエンジニア、データアナリストがコラボレーションするための従来からあるDatabricks環境です。このセクションでは、Databricksデータサイエンス & エンジニアリング環境で効果的に作業するために理解すべき基本的なコンセプトを説明します。

## ワークスペース

[ワークスペース](https://docs.databricks.com/workspace/index.html)は、すべてのDatabricks資産にアクセスするための環境です。ワークスペースはオブジェクト(ノートブック、ライブラリ、ダッシュボード、エクスペリメント)を[フォルダー](https://qiita.com/taka_yayoi/items/e469dded5ee83ae42d24#%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC)に整理し、データオブジェクトと計算資源へのアクセスを提供します。

このセクションでは、Databricksワークスペースフォルダーに格納されるオブジェクトを説明します。

[**ノートブック**](https://qiita.com/taka_yayoi/items/24a897cf40bba6d9e305)
実行可能なコマンド、ビジュアライゼーション、ナラティブなテキストを含むドキュメントのwebベースのインタフェースです。

[**ダッシュボード**](https://qiita.com/taka_yayoi/items/4b200d08ab3d0863d40a)
ビジュアライゼーションへのアクセスを整理するインタフェースです。

[**ライブラリ**](https://qiita.com/taka_yayoi/items/0c7fc7d741aad34bf9d4)
お使いのクラスターで実行されるノートブックやジョブで利用できるコードのパッケージです。Databricksランタイムには多くのライブラリが含まれており、自分で追加することもできます。

[**Repo**](https://qiita.com/taka_yayoi/items/b89f199ff0d3a4c16140)
リモートGitリポジトリと同期することで、コンテンツを共同バージョン管理できるフォルダーです。

[**エクスペリメント**](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb#%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88)
機械学習モデルトレーニングに対応する[MLflowラン](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)のコレクションです。

## データサイエンス & エンジニアリングのインタフェース

このセクションでは、あなたの資産にアクセスするためにDatabricksがサポートするインタフェース(UI、API、コマンドライン(CLI))を説明します。

**UI**
DatabricksのUIはワークスペースのフォルダーとそこに含まれるオブジェクト、データオブジェクト、計算資源に対して使いやすいGUIを提供します。

[**REST API**](https://docs.databricks.com/dev-tools/api/index.html)
3つのバージョンのREST APIがあります:[2\.1](https://docs.databricks.com/dev-tools/api/2.1/index.html)、[2\.0](https://docs.databricks.com/dev-tools/api/2.0/index.html)と[1\.2](https://docs.databricks.com/dev-tools/api/1.2/index.html)です。REST API 2.1と2.0は、REST API 1.2のほとんどの機能と追加の機能をサポートしており、これらを使うことが望ましいです。

[**CLI**](https://docs.databricks.com/dev-tools/cli/index.html)
[GitHub](https://github.com/databricks/databricks-cli)でホストされているオープンソースプロジェクトです。CLIは[REST API \(最新\)](https://docs.databricks.com/dev-tools/api/latest/index.html#rest-api-latest)をベースにして開発されています。

## データサイエンス & エンジニアリングにおけるデータ管理

このセクションでは、分析を実行し、機械学習アルゴリズムに入力するデータを保持するオブジェクトを説明します。

[**Databricksファイルシステム(DBFS)**](https://qiita.com/taka_yayoi/items/f15b50469b368907ec3b)
blobストア上にあるファイルシステム抽象化レイヤーです。ファイルや他のディレクトリを格納するディレクトリが含まれます。DBFSには、皆様がDatabricksを学ぶために活用できるいくつかの[データセット](https://qiita.com/taka_yayoi/items/dcf77d0b007fae774ce5)が自動的に登録されます。

[**データベース**](https://qiita.com/taka_yayoi/items/e90be9beeb1a744cee0d#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B)
容易にアクセス、管理、更新できる様に整理された情報のコレクションです。

[**テーブル**](https://qiita.com/taka_yayoi/items/e90be9beeb1a744cee0d#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B)
構造化データ表現です。Apache Spark SQLやApache Spark APIでテーブルにクエリーを実行することができます。

[**メタストア**](https://qiita.com/taka_yayoi/items/e90be9beeb1a744cee0d#%E3%83%A1%E3%82%BF%E3%82%B9%E3%83%88%E3%82%A2%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B)
カラムやカラムタイプ情報、データの読み書きに必要なシリアライザ、デシアライザを含むデータウェアハウスの様々なテーブルやパーティションに関するすべての構造情報と、データが格納される対応ファイルのすべてを格納するコンポーネントです。すべてのDatabricksデプロイメントにはテーブルメタデータを永続化するために、すべてのクラスターからアクセスできる中央Hiveメタストアが含まれています。また、[外部Hiveメタストア](https://docs.databricks.com/data/metastores/external-hive-metastore.html)を選択することもできます。

## データサイエンス & エンジニアリングにおける計算資源管理

このセクションでは、Databricksデータサイエンス & エンジニアリングで計算処理を実行するために知るべきコンセプトを説明します。

[**クラスター**](https://qiita.com/taka_yayoi/items/c5d99cd77fe4bfcf69f0)
ノートブックやジョブを実行する一連の計算資源と構成です。クラスターにはall-purpose(汎用)とjobの2つのタイプがあります。

- UI、CLI、REST APIを用いて*all-purpose*クラスターを作成します。手動でall-purposeクラスターを停止、再起動することができます。コラボレーティブかつインタラクティブ分析を行うために、この様なクラスターを複数ユーザーで共有することができます。
- *新規ジョブクラスター*で[ジョブ](https://qiita.com/taka_yayoi/items/b3275a1983c51a8bbe1a)を実行する際に、Databricksジョブスケジューラーが*ジョブクラスター*を作成し、ジョブが完了するとクラスターを停止します。ジョブクラスターを再起動することは*できません*。

[**プール**](https://qiita.com/taka_yayoi/items/919acd7ef9decf0f61e6)
クラスターの起動時間とオートスケーリングの時間を削減するアイドル状態で利用可能なインスタンスのセットです。プールにアタッチされると、クラスターはプールからドライバーノードとワーカーノードを割り当てます。プールにクラスターのリクエストに答えるための十分なアイドルリソースがない場合には、プールはインスタンスプロバイダーから新規インスタンスを割り当てることて拡張します。アタッチされたクラスターが停止されると、使用されたインスタンスはプールに返却され、別のクラスターで再利用できる様になります。

**Databrikcsランタイム**

クラスターで実行されるDatabricksによって管理される一連のコアコンポーネントです。Databricksではいくつかのタイプのランタイムを提供しています。

- [Databricksランタイム](https://docs.databricks.com/release-notes/runtime/index.html)には、Apache Sparkだけではなく、ビッグデータ分析における使いやすさ、性能、セキュリティを劇的に改善する多数のコンポーネントとアップデートが含まれています。
- [Databricks機械学習ランタイム](https://qiita.com/taka_yayoi/items/824b507019d3ade7eedc)はDatabricksランタイムをベースとしており、機械学習やデータサイエンスですぐに利用できる環境を提供します。TensorFlow、Keras、PyTorch、XGBoostの様な様々な人気のあるライブラリが含まれています。
- [Databricks Light](https://docs.databricks.com/runtime/light.html#light)は、オープンソース版のApache SparkランタイムのDatabricksパッケージです。Databricksランタイムによって提供される高度なパフォーマンス、信頼性、オートスケーリングのメリットが不要な場合にジョブに対するランタイムの選択肢を提供します。JAR、Python、spark-submitジョブを実行するためにクラスターを作成する際にのみDatabricks Lightを選択することができます。インタラクティブやノートブックジョブのワークロードを実行するクラスターではこれを選択することはできません。

[**ワークフロー**](https://qiita.com/taka_yayoi/items/f91b6ff0a2c7f892f401)
データ処理パイプラインを開発、実行するためのフレームワークです。

- [Create, run, and manage Databricks Jobs](https://docs.databricks.com/workflows/jobs/jobs.html): ノートブックやライブラリを即時あるいはスケジュールベースで実行する非インタラクティブなメカニズムです。
- [Delta Live Tables introduction](https://docs.databricks.com/workflows/delta-live-tables/index.html): 高信頼、維持可能、テスト可能なデータ処理パイプラインを構築するためのフレームワークです。

**ワークロード**
Databricksでは異なる[課金](https://databricks.com/jp/product/pricing)スキームに対応する2つのタイプのワークロードを認識します。データエンジニアリング(job)とデータアナリティクス(all-purpose)です。

- **データエンジニアリング**: Databricksジョブスケジューラーがワークロードごとに作成する*ジョブクラスター*で実行される(自動化)ワークロードです。
- **データアナリティクス**: *all-purpose*クラスターで実行される(インタラクティブな)ワークロードです。インタラクティブなワークロードは、通常Databricks[ノートブック](https://qiita.com/taka_yayoi/items/b3275a1983c51a8bbe1a)のコマンドによって実行されます。しかし、*既存のall-purpose*クラスターでの*ジョブ*実行もインタラクティブワークロードと見做されます。

**実行コンテキスト**
サポートされるそれぞれのプログラミング言語に対応する[REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop)の状態です。サポートされる言語はPython、R、Scala、SQLです。

# Databricksマシンラーニング

[Databricksマシンラーニング環境](https://qiita.com/taka_yayoi/items/2d8ebdc9374696b24e0f)は、データサイエンス & エンジニアリングワークスペースに機能を追加しています。重要なコンセプトには以下のものがあります。

[**エクスペリメント**](https://qiita.com/taka_yayoi/items/e9f6d6628fbad209770b)
機械学習モデル開発をトラッキングするメインの整理ユニットです。エクスペリメントは、[モデルトレーニングコードの記録された個々のラン](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)を整理、表示、アクセスコントロールを行います。

[**特徴量ストア**](https://qiita.com/taka_yayoi/items/88ddec323537febf7784)
集中管理された特徴量のリポジトリです。Databricks Feature Storeを用いることで、企業内での特徴量の共有、発見が可能となり、モデルトレーニングと推論で同じ特徴量計算コードを使用することを保証することもできます。

[**モデル**](https://qiita.com/taka_yayoi/items/e7a4bec6420eb7069995)
[モデルレジストリ](https://qiita.com/taka_yayoi/items/e7a4bec6420eb7069995)に登録された[トレーニング済み機械学習モデル、ディープラーニングモデル](https://docs.databricks.com/machine-learning/train-model/index.html)です。

# Databricks SQL

[Databricks SQL](https://docs.databricks.com/sql/index.html)は、SQLクエリーとBIツールを主に用いて作業するデータアナリスト向けのものです。お使いのデータレイクに格納されているデータに対してアドホックのクエリーを実行し、ダッシュボードを作成するための直感的な環境を提供します。このUIはデータサイエンス & データエンジニアリングやDatabricksマシンラーニング環境とは大きく異なります。このセクションでは、Databricks SQLを効果的に活用するために理解すべき基本的なコンセプトを説明します。

## Databricks SQLのインタフェース

このセクションではDatabricks SQLの資産にアクセスするためにDatabricksがサポートするインタフェースを説明します。

**UI**: ダッシュボード、クエリー、SQLウェアハウス、クエリー履歴、アラートに対するGUIです。
![](https://docs.databricks.com/_images/landing-dbsql.png)

[**REST API**](https://docs.databricks.com/sql/api/index.html): Databricks SQLのオブジェクトに対するタスクを自動化できるインタフェースです。

## Databricks SQLにおけるデータ管理

[ビジュアライゼーション](https://docs.databricks.com/sql/user/visualizations/index.html): クエリー実行結果のグラフィカル表現です。

[**ダッシュボード**](https://qiita.com/taka_yayoi/items/834bef9aa784e1a045d8): クエリービジュアライゼーションとコメントの表現です。

[**アラート**](https://docs.databricks.com/sql/user/alerts/index.html): クエリーで得られる値が閾値に達することで発呼される通知です。

## Databricks SQLにおける計算資源管理

このセクションでは、Databricks SQLでSQLをクエリーするために理解すべきコンセプトを説明します。

[**クエリー**](https://docs.databricks.com/sql/user/queries/index.html): 適切なSQL文です。

[**SQLウェアハウス**](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381): SQLクエリーを実行する計算資源です。

[**クエリー履歴**](https://docs.databricks.com/sql/admin/query-history.html): 実行されたクエリーとパフォーマンス特性の一覧です。

### Databricks 無料トライアル

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