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
フォルダに保存しないでください。
ワーカーとスケジューラが「Is a directory」または「Is a file」エラーを生成する
この問題は、Cloud Storage でオブジェクトに重複した名前空間がある場合、同時に環境の Airflow コンポーネントが従来の Linux ファイル システムを使用していると発生します。Cloud Storage では、同じ名前のフォルダとオブジェクトの両方をバケットに追加できます。バケットが環境の Airflow コンポーネントに同期されると、エラーが生成されます。
- オブジェクトが最初に同期された場合、フォルダの内容は同期されず、
Is a file
エラーが生成されます。 - フォルダが最初に同期された場合、オブジェクトは同期されず、
Is a directory
エラーが生成されます。
例:
Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...'
これらのエラーはどちらも、ファイルが見つからないためにタスクが失敗する可能性があります。場合によっては、同期プロセスが中断され、環境のバケット内の他のオブジェクトも同期されなくなります。
解決策:
この問題を解決するには、環境のバケットに重複する名前空間がないことを確認します。
たとえば、/dags/misc
(オブジェクト)と /dags/misc/example_file.txt
(別のオブジェクト)の両方がバケットにある場合は、misc
オブジェクトまたは example_file.txt
があるフォルダの名前を変更して、重複しないようにします。