Azure Databricks ではどこにデータが書き込まれますか?
この記事では、Azure Databricks の日常的な操作と構成でデータが書き込まれる場所について説明します。 Azure Databricks には、さまざまなテクノロジを網羅し、責任共有モデルでクラウド リソースを操作するための一連のツールが用意されていることから、データの格納に使用される既定の場所は、実行環境、構成、ライブラリによって異なります。
この記事の情報は、さまざまな操作の既定のパスと、構成によってその既定値が変わるしくみを理解するのに役立ちます。 データ スチュワードと管理者は、データ アクセスの構成と制御に関するガイダンスが必要な場合、「Unity Catalog を使用したデータ ガバナンス」を参照してください。
オブジェクト ストレージとその他のデータ ソースの構成については、「データ ソースに接続する」を参照してください。
オブジェクト ストレージとは
クラウド コンピューティングでは、オブジェクト ストレージまたは BLOB ストレージとは、データをオブジェクトとして保持するストレージ コンテナーを指し、各オブジェクトは、データ、メタデータ、およびグローバルに一意のリソース識別子 (URI) で構成されます。 オブジェクト ストレージでのデータ操作は、多くの場合、REST API インターフェイスを介した作成、読み取り、更新、削除 (CRUD) に制限されます。 一部のオブジェクト ストレージ オファリングには、バージョン管理やライフサイクル管理などの機能が含まれています。 オブジェクト ストレージには、次の利点があります。
- 高い可用性、持続性、信頼性。
- 他のほとんどのストレージ オプションと比較して、ストレージが低コスト。
- 無限にスケーラブル (特定のクラウド リージョンで使用可能なストレージの合計量によって制限されます)。
ほとんどのクラウドベースのデータ レイクは、クラウド オブジェクト ストレージのオープンソース データ形式に基づいて構築されています。
Azure Databricks でどのようにオブジェクト ストレージが使用されるか
オブジェクト ストレージは、Azure Databricks のほとんどの操作で使用されるストレージの主な形式です。 Unity Catalog ストレージの資格情報と外部の場所を使用して、クラウド オブジェクト ストレージへのアクセスを構成します。 これらの場所は、テーブルやボリュームの背景にあるデータ ファイルを格納するために使用されます。 「Unity Catalog を使用したクラウド オブジェクト ストレージへの接続」を参照してください。
外部データ システムに対してテーブルを特に構成しない限り、Azure Databricks で作成されたすべてのテーブルでは、クラウド オブジェクト ストレージにデータが格納されます。
クラウド オブジェクト ストレージに格納されている Delta Lake ファイルは、Databricks レイクハウスのデータ基盤となります。
ブロック ストレージとは
クラウド コンピューティングでは、ブロック ストレージまたはディスク ストレージとは、"ハード ドライブ" とも呼ばれる従来のハード ディスク ドライブ (HDD) またはソリッドステート ドライブ (SSD) に対応するストレージ ボリュームを指します。 クラウド コンピューティング環境にブロック ストレージをデプロイする場合、通常は 1 つ以上の物理ドライブの論理パーティションがデプロイされます。 実装は製品オファリングとクラウド ベンダーによって若干異なりますが、通常、実装全体に次の特徴があります。
- すべての仮想マシン (VM) に、アタッチされたブロック ストレージ ボリュームが必要です。
- ブロック ストレージ ボリュームにインストールされたファイルとプログラムは、ブロック ストレージ ボリュームが保持されている限り保持されます。
- ブロック ストレージ ボリュームは、一時データ ストレージによく使用されます。
- VM にアタッチされているブロック ストレージ ボリュームは、通常、VM と共に削除されます。
Azure Databricks でどのようにブロック ストレージが使用されるか
コンピューティング リソースを有効にすると、Azure Databricks によって VM が構成およびデプロイされ、ブロック ストレージ ボリュームがアタッチされます。 このブロック ストレージは、コンピューティング リソースの有効期間中にエフェメラル データ ファイルを格納するために使用されます。 これらのファイルには、ディスク キャッシュで使用されるデータに加えて、オペレーティング システムとインストールされているライブラリが含まれます。 Apache Spark では効率的な並列処理とデータ読み込みのためにバックグラウンドでブロック ストレージが使用されますが、Azure Databricks で実行されるほとんどのコードでは、ブロック ストレージに対して直接データを保存したり、読み込んだりすることはありません。
ドライバー ノードにアタッチされているブロック ストレージを使用する Python や Bash コマンドなどの任意のコードを実行できます。 「ドライバー ノードにアタッチされたエフェメラル ストレージでファイルを操作する」を参照してください。
Unity Catalog ではデータ ファイルはどこに格納されますか?
Unity Catalog は、クラウド ストレージとリレーショナル オブジェクトの間の関係構成を管理者に任せます。 データが存在する正確な場所は、管理者がどのように関係を構成したかによって異なります。
Unity Catalog によって統制されるオブジェクトに書き込まれたデータまたはアップロードされたデータは、次のいずれかの場所に格納されます。
- メタストア、カタログ、またはスキーマに関連付けられているマネージド ストレージの場所。 マネージド テーブルとマネージド ボリュームに書き込まれたデータまたはアップロードされたデータでは、マネージド ストレージが使用されます。 「Unity Catalog の管理されたストレージの場所の指定」を参照してください。
- ストレージ資格情報で構成された外部の場所。 外部テーブルと外部ボリュームに書き込まれたデータまたはアップロードされたデータでは、外部ストレージが使用されます。 「Unity Catalog を使用してクラウド オブジェクト ストレージに接続する」を参照してください。
Databricks SQL ではデータ バッキング テーブルはどこに格納されますか?
Databricks SQL を Unity Catalog で構成して CREATE TABLE
ステートメントを実行する場合、既定の動作では、Unity Catalog で構成されたマネージド ストレージの場所にデータ ファイルが格納されます。 「Unity Catalog ではデータ ファイルはどこに格納されますか?」を参照してください。
レガシ hive_metastore
カタログはさまざまな規則に従います。 「Unity Catalog と従来の Hive メタストアの使用」を参照してください。
Delta Live Tables ではデータ ファイルはどこに格納されますか?
Databricks では、DLT パイプラインの作成時に Unity Catalog の使用を推奨しています。 データは、ターゲット スキーマに関連付けられているマネージド ストレージの場所内のディレクトリに格納されます。
必要に応じて、Hive メタストアを使用して DLT パイプラインを構成できます。 Hive メタストアを使用して構成する場合、DBFS 上またはクラウド オブジェクト ストレージ上のストレージの場所を指定できます。 場所を指定しない場合、DBFS ルート上の場所がパイプラインに割り当てられます。
Apache Spark ではどこにデータ ファイルが書き込まれますか?
Databricks では、データの読み取りと書き込みにオブジェクト名と Unity Catalog の使用を推奨しています。 /Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
というパターンで Unity Catalog ボリュームにファイルを書き込むこともできます。 Unity Catalog で統制されるオブジェクトにデータをアップロード、作成、更新、挿入するための十分な権限が必要です。
任意で、ユニバーサル リソース インジケーター (URI) を使用してデータ ファイルへのパスを指定できます。 URI はクラウド プロバイダーによって異なります。 また、クラウド オブジェクト ストレージに書き込むには、現在お使いのコンピューティング リソースに合わせて書き込みアクセス許可が構成されている必要があります。
Azure Databricks では、Databricks ファイルシステムを使用し、Apache Spark の読み取りと書き込みのコマンドをクラウド オブジェクト ストレージにマップします。 各 Azure Databricks ワークスペースには、ワークスペースに割り当てられたクラウド アカウントで構成された DBFS ルートのストレージの場所が存在し、すべてのユーザーがデータの読み取りと書き込みでその場所にアクセスできます。 Databricks では、運用データを格納するために DBFS ルートを使用することはお勧めしません。 「DBFS とは」と「DBFS ルートの使用方法に関する推奨事項」を参照してください。
pandas では Azure Databricks のどこにデータが保存されますか?
Databricks Runtime 14.0 以降では、Python のローカルのあらゆる読み取り操作と書き込み操作の CWD (現在の作業ディレクトリ) は既定で、ノートブックが含まれるディレクトリになります。 データ ファイルの保存時にファイル名のみを指定すると、pandas では、現在実行しているノートブックに並列するワークスペース ファイルとしてそのデータ ファイルが保存されます。
Databricks Runtime のバージョンによってはワークスペース ファイルがサポートされないことがあります。また、Databricks Runtime の一部のバージョンでは、ノートブックまたは Git フォルダーの使用によって動作が変わります。 「既定の現在の作業ディレクトリとは?」を参照してください。
Azure Databricks 上で一時ファイルを書き込むのに最適な場所
クラスターのシャットダウン後に保持したくない一時ファイルを書き込む必要がある場合で、現在の作業ディレクトリ (CWD) がワークスペースのファイルシステム内にある場合は、その一時ファイルを $TEMPDIR
に書き込むと、CWD に書き込むよりもパフォーマンスが向上します。 コードがリポジトリ内で実行される場合は、ブランチ サイズの制限を超えるのを防ぐこともできます。 詳しくは、「ファイルとリポジトリのサイズ制限」をご参照ください。
書き込むデータの量が多く、ストレージを自動スケーリングさせる場合は、/local_disk0
に書き込みます。