ファイルの同期に関する問題のトラブルシューティング

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Cloud Composer によって、環境のバケット内の特定のフォルダが、環境内で実行される Airflow コンポーネントに同期されます。詳細については、Cloud Storage に保存されるデータをご覧ください。このページでは、同期プロセスを中断する可能性のある問題と、そのトラブルシューティング方法について説明します。

一般的な問題

以降のセクションでは、いくつかの一般的なファイル同期の問題の症状と可能性のある修正方法について説明します。

DAG フォルダと プラグイン フォルダ内の多数の DAG とプラグインの処理

/dags フォルダと /plugins フォルダの内容は、環境のバケットから Airflow ワーカーとスケジューラのローカル ファイル システムに同期されます。

これらのフォルダに保存されるデータが多いほど、同期の実行に時間がかかります。このような状況に対処するには:

  • /dags フォルダと /plugins フォルダ内のファイル数を制限します。最低限必要なファイルのみを保存します。

  • Airflow スケジューラとワーカーが使用できるディスク容量を増やします。

  • Airflow スケジューラと Airflow ワーカーの CPU とメモリを増やして、同期オペレーションをより高速に行います。

  • 多数の DAG がある場合は、DAG をバッチに分割して ZIP アーカイブに圧縮し、これらのアーカイブを /dags フォルダにデプロイします。 このアプローチにより、DAG の同期プロセスが高速化されます。Airflow コンポーネントは、DAG を処理する前に ZIP アーカイブを抽出します。

  • プログラムでの DAG の生成は、/dags フォルダに保存される DAG ファイルの数を制限する方法の 1 つです。プログラムによって生成される DAG のスケジューリングと実行に関する問題を回避するには、DAG のトラブルシューティング ページプログラマティック DAG セクションをご覧ください。

スケジューラ、ワーカー、ウェブサーバーに同期する DAG とプラグインに影響するアンチパターン

Cloud Composer は、/dags フォルダと /plugins フォルダの内容をスケジューラとワーカーに同期します。/dags フォルダと /plugins フォルダの特定のオブジェクトにより、この同期が正常に機能しないか、少なくとも遅くなる可能性があります。

  • /dags フォルダはスケジューラとワーカーに同期されます。

    このフォルダはウェブサーバーと同期されません。

  • /plugins フォルダはスケジューラ、ワーカー、ウェブサーバーに同期されます。

次の問題が発生することがあります。

  • [圧縮トランス コーディング][ストレージ トランス コーディング] を使用する gzip 圧縮ファイルを、/dags フォルダと /plugins フォルダにアップロードしました。これは、通常、gcloud storage cp コマンドの --gzip-local-all フラグを使用してデータをバケットにアップロードした場合に発生します。

    解決策: 圧縮コード変換を使用したオブジェクトを削除し、バケットに再度アップロードします。

  • オブジェクトの 1 つが「.」という名前である場合、このようなオブジェクトはスケジューラやワーカーと同期されないため、同期が完全に停止する可能性があります。

    解決策: オブジェクトの名前を変更します。

  • フォルダと DAG Python ファイルの名前が同じです(例: a.py)。この場合、DAG ファイルは Airflow コンポーネントに適切に同期されません。

    解決策: DAG Python ファイルと同じ名前のフォルダを削除します。

  • /dags フォルダまたは /plugins フォルダのオブジェクトの 1 つのオブジェクト名の末尾に / 記号があります。/ 記号はオブジェクトがファイルではなくフォルダであることを表すため、このようなオブジェクトでは同期プロセスで問題が発生する可能性があります。

    解決策: 問題のあるオブジェクトの名前から / 記号を削除します。

  • 不要なファイルを /dags フォルダや /plugins フォルダに保存しないでください。

    実装する DAG やプラグインに、これらのコンポーネントのテストを保存するファイルなど、追加ファイルが含まれる場合があります。これらのファイルはワーカーとスケジューラに同期されており、スケジューラ、ワーカー、ウェブサーバーへのこれらのファイルのコピーに必要な時間に影響します。

    解決策: 追加の不要なファイルを /dags フォルダや /plugins フォルダに保存しないでください。

Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...' エラーはスケジューラとワーカーによって生成される

この問題は、Cloud Storage でオブジェクトに重複した名前空間がある場合、同時にスケジューラとワーカーが従来の Linux ファイル システムを使用していると発生します。たとえば、同じ名前を持つフォルダとオブジェクトの両方を環境のバケットに追加できます。バケットが環境のスケジューラとワーカーに同期されると、このエラーが発生し、タスクが失敗する可能性があります。

この問題を解決するには、環境のバケットに重複する名前空間がないことを確認します。たとえば、/dags/misc(ファイル)と /dags/misc/example_file.txt(別のファイル)の両方がバケットにある場合、スケジューラによってエラーが生成されます。

次のステップ