排解檔案同步問題

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Cloud Composer 會將環境值區中的特定資料夾,同步至環境中執行的 Airflow 元件。詳情請參閱「儲存在 Cloud Storage 中的資料」。本頁說明可能中斷同步程序的相關問題,以及如何排解這些問題。

一般問題

以下各節說明一些常見檔案同步問題的徵兆和可能修正方式。

處理 dags 和 plugins 資料夾中的大量 DAG 和外掛程式

/dags/plugins 資料夾的內容會從環境的 bucket 同步至 Airflow 工作站和排程器的本機檔案系統。

這些資料夾儲存的資料越多,執行同步作業所需的時間就越長。如要解決這類情況,請按照下列步驟操作:

  • 限制 /dags/plugins 資料夾中的檔案數量。只儲存最少的必要檔案。

  • 增加 Airflow 排程器和工作站可用的磁碟空間。

  • 增加 Airflow 排程器和工作站的 CPU 和記憶體,加快同步作業的執行速度。

  • 如果 DAG 數量非常多,請將 DAG 分成多批,壓縮成 ZIP 封存檔,然後將這些封存檔部署到 /dags 資料夾。這個方法可加快 DAG 同步程序。Airflow 元件會先解壓縮 ZIP 封存檔,再處理 DAG。

  • 以程式輔助方式產生 DAG,也是限制儲存在 /dags 資料夾中 DAG 檔案數量的其中一種方法。請參閱 DAG 疑難排解頁面的「程式輔助 DAG」一節,避免程式輔助產生的 DAG 在排程和執行時發生問題。

影響 DAG 和外掛程式與排程器、工作站和網路伺服器同步處理的反模式

Cloud Composer 會將 /dags/plugins 資料夾的內容同步至排程器和工作站。/dags/plugins 資料夾中的特定物件可能會導致同步處理無法正常運作或速度變慢。

  • 系統會將 /dags 資料夾同步至排程器和工作站。

    這個資料夾不會同步到網路伺服器。

  • /plugins 資料夾會同步處理至排程器、工作站和網路伺服器。

你可能會遇到下列問題:

  • 您上傳了使用 [壓縮轉碼][storage-transcoding] 的 gzip 壓縮檔至 /dags/plugins 資料夾。如果您在 gcloud storage cp 指令中使用 --gzip-local-all 旗標,將資料上傳至 bucket,通常就會發生這種情況。

    解決方法:刪除使用壓縮轉碼的物件,然後重新上傳至值區。

  • 其中一個物件名為「.」,這類物件不會同步至排程器和工作站,而且可能會完全停止同步。

    解決方法:重新命名物件。

  • 資料夾和 DAG Python 檔案的名稱相同,例如 a.py。在本例中,DAG 檔案未正確同步至 Airflow 元件。

    解決方法:移除與 DAG Python 檔案同名的資料夾。

  • /dags/plugins 資料夾中的其中一個物件,名稱結尾含有 / 符號。這類物件可能會干擾同步程序,因為 / 符號表示物件是資料夾,而非檔案。

    解決方法:從有問題的物件名稱中移除 / 符號。

  • 請勿在 /dags/plugins 資料夾中儲存不必要的檔案。

    有時,您實作的 DAG 和外掛程式會附帶額外檔案,例如儲存這些元件測試的檔案。這些檔案會同步處理至工作站和排程器,並影響將這些檔案複製到排程器、工作站和網路伺服器所需的時間。

    解決方法:請勿在 /dags/plugins 資料夾中儲存其他不必要的檔案。

排程器和工作站會產生「Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...'」錯誤

發生這個問題的原因是,物件在 Cloud Storage 中可能會有重疊的命名空間,但排程器和工作人員使用的是傳統 Linux 檔案系統。舉例來說,您可以在環境的 bucket 中新增同名的資料夾和物件。當儲存空間與環境的排程器和工作站同步時,就會產生這項錯誤,導致工作失敗。

如要修正這個問題,請確認環境值區中沒有重疊的命名空間。舉例來說,如果值區中同時有 /dags/misc (一個檔案) 和 /dags/misc/example_file.txt (另一個檔案),排程器就會產生錯誤。

後續步驟