運用環境のワークロード 用に Auto Loader を構成する

Databricks では、運用環境で Auto Loader を実行するための ストリーミングのベスト プラクティス に従うことをお勧めします。

DatabricksAuto Loader Delta Live Tablesでは、増分データ取り込みのために で を使用することをお勧めします。Delta Live Tables では、Apache Spark 構造化ストリーミングの機能を拡張し、宣言型の Python または SQL を数行記述するだけで、本番運用品質のデータ パイプラインをデプロイできます。

モニタリング Auto Loader

Auto Loader によって検出されたファイルの照会

cloud_files_state 機能は、 Databricks Runtime 10.5 以降で使用できます。

Auto Loader には、ストリームの状態を検査するための SQL API が用意されています。 cloud_files_state 関数を使用すると、 Auto Loader ストリームによって検出されたファイルに関するメタデータを検索できます。 単に cloud_files_state からクエリーし、 Auto Loader ストリームに関連付けられたチェックポイントの場所を指定します。

SELECT * FROM cloud_files_state('path/to/checkpoint');

ストリームの更新 のリッスン

Auto Loader ストリームをさらに監視するには、Databricks Apache Spark の ストリーミング クエリー リスナー インターフェイスを使用することをお勧めします。

Auto Loader バッチごとにストリーミングクエリーリスナーにメトリクスを報告します。 バックログに存在するファイルの数と、 numFilesOutstanding および numBytesOutstanding メトリクスのバックログのサイズは、ストリーミング クエリーの進行状況ダッシュボードの [生データ ] タブで確認できます。

{
  "sources" : [
    {
      "description" : "CloudFilesSource[/path/to/source]",
      "metrics" : {
        "numFilesOutstanding" : "238",
        "numBytesOutstanding" : "163939124006"
      }
    }
  ]
}

Databricks Runtime 10.1 以降では、ファイル通知モードを使用する場合、AWS および Azure の approximateQueueSize としてクラウド上でキューになっているファイル イベントのおおよその数もメトリクスに含まれます。

コストに関する考慮事項

Auto Loaderを実行する場合、主なコスト源は、コンピュート リソースとファイル検出のコストです。

コンピュートのコストを削減するために、Databricks では、待機時間の短い要件がない限り、継続的に実行するのではなく、 Trigger.AvailableNow を使用してバッチジョブとして Auto Loader をスケジュールするために、Databricks ジョブを使用することをお勧めします。 構造化ストリーミングのトリガー間隔の設定を参照してください。

ファイル検出のコストは、ディレクトリ一覧モードのストレージ アカウントに対する LIST 操作、サブスクリプション サービスでの API 要求、およびファイル通知モードのキュー サービスの形式で発生する可能性があります。 ファイル検出コストを削減するために、Databricks では次のことをお勧めします。

  • ディレクトリ・リスト・モードで Auto Loader を継続的に実行している場合の ProcessingTime トリガーの提供

  • 可能な場合は増 分リスト (非推奨) を利用するために、字句順でストレージ アカウントへのファイルのアップロードを設計します

  • ディレクトリリストモードでの Databricks Runtime 9.0以降の使用 (特に深くネストされたディレクトリの場合)

  • 増分リストが不可能な場合のファイル通知の活用

  • リソースタグを使用して Auto Loader によって作成された リソースにタグ を付け、コストを追跡する

Trigger.AvailableNow とレート制限 の使用

Databricks Runtime 10.1 では Scala でのみ使用できます。

Python および Scala 用の Databricks Runtime 10.2 以降で利用できます。

Auto Loader Trigger.AvailableNowを使用して、バッチ ジョブとして Databricks ジョブで実行するようにスケジュールできます。 トリガーは、クエリーの開始時刻 AvailableNow より前に 到着したすべてのファイルを処理するように Auto Loader に指示します。 ストリームの開始後にアップロードされた新しいファイルは、次のトリガーまで無視されます。

Trigger.AvailableNowでは、ファイル検出はデータ処理と非同期に行われ、レート制限付きで複数のマイクロバッチでデータを処理できます。Auto Loader BY DEFAULTは、マイクロバッチごとに最大1000ファイルを処理します。 cloudFiles.maxFilesPerTriggercloudFiles.maxBytesPerTrigger を設定して、マイクロバッチで処理するファイル数またはバイト数を設定できます。ファイル制限はハード制限ですが、バイト制限はソフト制限であり、指定された maxBytesPerTriggerよりも多くのバイトを処理できることを意味します。 両方のオプションが一緒に提供される場合、 Auto Loader は制限の 1 つに達するために必要な数のファイルを処理します。

イベントの保持

Auto Loader は、RocksDB を使用してチェックポイントの場所で検出されたファイルを追跡し、一度だけインジェストを保証します。 Databricks では、すべての大量または有効期間の長いインジェスト ストリームに対して cloudFiles.maxFileAge オプションを使用することを強くお勧めします。 このオプションでは、チェックポイントの場所からのイベントの有効期限が切れるため、起動時間が短縮 Auto Loader 。 起動時間は Auto Loader 実行あたりの分数に増加する可能性があり、ソース ディレクトリに格納されるファイルの最大保存期間に上限が設定されている場合、不要なコストが追加されます。 cloudFiles.maxFileAge に設定できる最小値は "14 days"です。RocksDB での削除は廃棄エントリとして表示されるため、イベントが横ばいになる前に有効期限が切れると、ストレージ使用量が一時的に増加することを期待する必要があります。

警告

cloudFiles.maxFileAge は、大量のデータセットのコスト管理メカニズムとして提供されます。 cloudFiles.maxFileAge を積極的にチューニングしすぎると、重複したインジェストやファイルの欠落などのデータ品質の問題が発生する可能性があります。そのため、Databricks では、同等のデータ取り込みソリューションが推奨するものと同様の 90 日など、 cloudFiles.maxFileAgeの保守的な設定をお勧めします。

cloudFiles.maxFileAge オプションを調整しようとすると、未処理のファイルが Auto Loader によって無視されたり、すでに処理済みのファイルが期限切れになったり、再処理されてデータが重複したりする可能性があります。 cloudFiles.maxFileAgeを選択する際に考慮すべき点は次のとおりです。

  • ストリームが長時間後に再開された場合、キューからプルされた cloudFiles.maxFileAge より古いファイル通知イベントは無視されます。 同様に、ディレクトリ一覧を使用する場合、ダウンタイム中に表示された可能性のある cloudFiles.maxFileAge より古いファイルは無視されます。

  • ディレクトリ一覧モードを使用し、 cloudFiles.maxFileAge(たとえば "1 month"に設定) を使用すると、ストリームを停止し、 cloudFiles.maxFileAge"2 months"に設定してストリームを再開すると、1 か月より古く、2 か月より新しいファイルが再処理されます。

ストリームを初めて開始するときにこのオプションを設定すると、 cloudFiles.maxFileAgeより古いデータは取り込まれないため、古いデータを取り込む場合は、ストリームを初めて開始するときにこのオプションを設定しないでください。 ただし、このオプションは後続の実行時に設定する必要があります。

cloudFiles.backfillInterval を使用して定期的なバックフィルをトリガーする

Auto Loader 、特定の間隔で非同期バックフィルをトリガーできます (たとえば、1 日に 1 回バックフィルする1 日、または 1 週間で 1 週間に 1 回バックフィルします)。 ファイル イベント通知システムは、アップロードされたすべてのファイルの 100% 配信を保証するものではなく、ファイル イベントの待機時間に関する厳密な SLA を提供しません。 Databricks では、データの完全性が必要な場合に、cloudFiles.backfillInterval オプションを使用して Auto Loader による定期的なバックフィルをトリガーし、すべてのファイルが特定の SLA 内で検出されるようにすることをお勧めします。 通常のバックフィルをトリガーしても、重複は発生しません。