2025, Oct 01 17:31

Airflow में BigQuery ImportError के बाद DAGs गायब? Composer में सुरक्षित अपग्रेड गाइड

Cloud Composer में Airflow अपग्रेड के बाद BigQuery ImportError और UI में DAGs गायब होने का हल: ऑपरेटर अपडेट, PyCache साफ, scheduler व webserver रीस्टार्ट.

Google Cloud Composer में Airflow के अपग्रेड कई बार सूक्ष्म तरीकों से असर दिखाते हैं। एक पल आप ImportError ठीक करते हैं, और अगले ही पल UI से पूरा DAGs सेट गायब सा लगता है। यह गाइड BigQuery ऑपरेटर्स से जुड़ा एक ठोस केस समझाती है—ImportError कैसे ‘गायब DAGs’ जैसी स्थिति तक बढ़ सकता है, और बिना किसी साइड इफेक्ट के इसे साफ-सुथरे तरीके से कैसे सुलझाया जाए।

क्या हुआ

कई Composer DAGs, BigQueryCreateEmptyTableOperator पर निर्भर थे। ImportError हटाने के लिए जब इसे नए BigQueryCreateTableOperator से बदला गया, तो ImportError तो खत्म हो गया, लेकिन Airflow UI में कोई भी DAG दिखना बंद हो गया। DAG फाइलें अब भी GCS के /dags फ़ोल्डर में मौजूद थीं, और शेड्यूलर लॉग्स में स्पष्ट पार्सिंग असफलताएँ नहीं दिख रही थीं।

समस्या को ट्रिगर करने वाला न्यूनतम उदाहरण

समस्या की शुरुआत उस import से होती है जो वर्तमान वातावरण में अब रिज़ॉल्व नहीं होता:

from airflow import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryCreateEmptyTableOperator
from datetime import datetime
with DAG(
    dag_id="dw_pipeline_daily",
    start_date=datetime(2024, 1, 1),
    schedule_interval="@daily",
    catchup=False,
):
    pass

Airflow यह त्रुटि देता है: ImportError: cannot import name 'BigQueryCreateEmptyTableOperator' from 'airflow.providers.google.cloud.operators.bigquery'.

ImportError कैसे “DAGs गायब” में बदल गया

अप्रचलित import को BigQueryCreateTableOperator से बदलने के बाद ImportError तो चला गया, फिर भी UI में DAGs की सूची नहीं दिखी। मूल कारण यह है कि Airflow का DAG पार्सिंग तंत्र पुराने Python बाइटकोड आर्टिफैक्ट्स और cached state पर चल रही प्रक्रियाओं से प्रभावित हो सकता है। जब import सतह बदलती है, तो scheduler और web server को DAGs का दृश्य दोबारा बनाने के लिए पूर्ण रीफ़्रेश की ज़रूरत पड़ सकती है; वरना पार्सर उन्हें दर्ज ही नहीं करता, और ऐसा प्रतीत होता है मानो वे गायब हो गए हों।

प्रारंभिक ImportError को ट्रैक करते समय एक और पहलू ध्यान देने योग्य है। अलग-अलग वातावरणों में प्रोवाइडर वर्ज़न का असमान होना ऐसी स्थिति बना सकता है कि एक वातावरण में नवीनतम प्रोवाइडर खिंच आए और imports टूट जाएँ, जबकि दूसरा वातावरण स्थिर वर्ज़न पिन करके सामान्य रूप से काम करता रहे। स्टेजिंग और प्रोडक्शन में प्रोवाइडर्स की इंस्टॉलेशन रणनीति को संरेखित रखना वातावरण-विशिष्ट ImportError से बचने में मदद करता है।

समाधान

पहले, import को समर्थित ऑपरेटर पर अपडेट करें। फिर Python कैश साफ करें और Airflow के घटकों को रीस्टार्ट करें ताकि DAGs का साफ-सुथरा री-पार्स हो। यह संयोजन ImportError दूर करता है और पार्सर की स्थिति ताज़ा करके “missing DAGs” वाली समस्या से बचाता है।

from airflow import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryCreateTableOperator
from datetime import datetime
with DAG(
    dag_id="dw_pipeline_daily",
    start_date=datetime(2024, 1, 1),
    schedule_interval="@daily",
    catchup=False,
):
    pass

परिवर्तन डिप्लॉय करने के बाद, DAGs पाथ में PyCache साफ करें और Airflow scheduler तथा web server को रीस्टार्ट करें। इससे Composer पुराना बाइटकोड हटा देता है, अपडेटेड import path के साथ मॉड्यूल्स को फिर से लोड करता है, और UI में आपके DAGs को दोबारा रजिस्टर कर देता है।

यह क्यों महत्वपूर्ण है

Airflow की डायनेमिक DAG पार्सिंग एक सुसंगत import ग्राफ़ और साफ़ मॉड्यूल स्टेट पर निर्भर करती है। जब ऑपरेटर्स खिसकते हैं या उनके नाम बदलते हैं, तो केवल import लाइन ठीक करना पर्याप्त नहीं होता; रनटाइम को cached आर्टिफैक्ट्स भी छोड़ने चाहिए। नहीं तो UI, GCS बकेट की वास्तविक स्थिति को नहीं दिखा पाएगा, जिससे भ्रम और बेकार डिबगिंग चक्र पैदा होते हैं। वातावरणों में प्रोवाइडर मैनेजमेंट को सुसंगत रखना भी शोर घटाता है, ताकि जो बदलाव एक जगह काम करता है, वह दूसरी जगह ImportError के साथ न टूटे।

मुख्य सीख

जब आप ImportError ठीक करने के लिए BigQueryCreateEmptyTableOperator को BigQueryCreateTableOperator से बदलें, तो PyCache साफ करने और Airflow scheduler व web server को रीस्टार्ट करने का चरण ज़रूर पूरा करें। इससे DAG का नया पार्स मजबूती से होता है और UI आपके DAGs को “खो” नहीं देता। अलग-अलग वातावरणों में प्रोवाइडर वर्ज़न की एकरूपता पर नज़र रखें, ताकि वही ImportError कहीं और दोबारा न उभरे। इन दो आदतों—साफ़ ऑपरेटर रिप्लेसमेंट और क्लीन रीस्टार्ट चक्र—के साथ, कोड बदलावों के बाद DAGs अपेक्षित और स्पष्ट रूप से दिखाई देंगे।