2016-09-21 28 views
5

हाल ही में मैंने एयरफ्लो का इतना परीक्षण किया है कि execution_date के साथ airflow trigger_dag <my-dag> चलाते समय एक समस्या है।एयरफ्लो ट्रिगर_डाग execution_date अगले दिन है, क्यों?

मैं सीख लिया है कि execution_date क्या हम here से पहली बार में लगता नहीं है:

वायु प्रवाह ईटीएल जरूरतों के लिए एक समाधान के रूप में विकसित किया गया था। ईटीएल दुनिया में, आप आम तौर पर डेटा सारांशित करते हैं। इसलिए, यदि मैं 2016-02-19 के लिए डेटा सारांशित करना चाहता हूं, तो मैं 2016-02-20 मध्यरात्रि जीएमटी में ऐसा करूंगा, जो 2016-02-19 के लिए सभी डेटा उपलब्ध होने के ठीक बाद होगा।

start_date = datetime.combine(datetime.today(), 
           datetime.min.time()) 

args = { 
    "owner": "xigua", 
    "start_date": start_date 
} 
dag = DAG(dag_id="hadoopprojects", default_args=args, 
      schedule_interval=timedelta(days=1)) 


wait_5m = ops.TimeDeltaSensor(task_id="wait_5m", 
           dag=dag, 
           delta=timedelta(minutes=5)) 

कोड से ऊपर, पहला काम एक TimeDeltaSensor है कि वास्तविक काम करने से पहले एक और 5 मिनट के इंतजार कर रहा है है मेरी दैनिक कार्यप्रवाह के शुरू भाग है, इसलिए इसका मतलब यह है मेरी डेग 2016-09-09T00:05:00, 2016-09-10T00:05:00 पर ट्रिगर किया जाएगा ... आदि

वेब यूआई में, मैं scheduled__2016-09-20T00:00:00 जैसे कुछ देख सकता हूं, और कार्य 2016-09-21T00:00:00 पर चलाया जाता है, जो ETL मॉडल के अनुसार उचित लगता है।

हालांकि किसी दिन अज्ञात कारण के लिए मेरा डैग ट्रिगर नहीं किया गया है, इसलिए यदि मैं इसे 2016-09-20T00:10:00 पर ट्रिगर करता हूं, तो मैं इसे मैन्युअल रूप से ट्रिगर करता हूं, फिर टाइमडेलसेन्सर 2016-09-21T00:15:00 तक चलने से पहले प्रतीक्षा करेगा।

यह मैं क्या चाहते हैं, मैं इसे 2016-09-20T00:15:00 नहीं अगले दिन पर चलाना चाहते हैं, मैं --conf '{"execution_date": "2016-09-20"}' के माध्यम से execution_date गुजर की कोशिश की है, लेकिन यह काम नहीं करता नहीं है।

मुझे इस मुद्दे से कैसे निपटना चाहिए?

$ airflow version 
[2016-09-21 17:26:33,654] {__init__.py:36} INFO - Using executor LocalExecutor 
    ____________  _____________ 
____ |__()_________ __/__ /________  __ 
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /|// 
___ ___ |/_/ _ __/ _// /_/ /_ |/ |//
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/ 
    v1.7.1.3 

उत्तर

10

सबसे पहले, मैं तुम्हें start_date के लिए स्थिरांक का उपयोग करें, क्योंकि गतिशील लोगों अभिनय करेंगे अनिश्चित अपने वायु प्रवाह पाइपलाइन अनुसूचक द्वारा मूल्यांकन किया जाता है के साथ के आधार पर सलाह देते हैं।

अधिक जानकारी के बारे में start_date यहाँ एक सामान्य प्रश्न प्रविष्टि कि मैंने लिखा और प्रकार सभी इस बाहर में: http://pythonhosted.org/airflow/faq.html#what-s-the-deal-with-start-date

अब, के बारे में execution_date और जब यह शुरू हो रहा है, इस वायु प्रवाह पर ज्ञानप्राप्ति लोगों के लिए एक आम पकड़ लिया है। एयरफ्लो execution_date सेट करता है जो शेड्यूल अवधि के बाएं बाउंड के आधार पर होता है, यह उस समय के आधार पर नहीं होता है जब यह आग लगती है (जो अवधि की सही सीमा होगी)। उदाहरण के लिए schedule='@hourly' कार्य चलाते समय, एक कार्य हर घंटे आग लग जाएगा। 2:00 बजे आग लगने वाले कार्य में 112 बजे execution_date होगा क्योंकि यह मानता है कि आप 1 बजे से 2 बजे टाइम विंडो 2:00 बजे संसाधित कर रहे हैं। इसी प्रकार, यदि आप दैनिक नौकरी चलाते हैं, तो execution_date2016-01-01 के साथ चलाएं 2016-01-02 पर मध्यरात्रि के तुरंत बाद ट्रिगर होगा।

ईटीएल और अंतर भार के संदर्भ में यह बाएं बाध्य लेबलिंग बहुत समझ में आता है, लेकिन सरल, क्रॉन-जैसे शेड्यूलर के मामले में सोचते समय भ्रमित हो जाता है।

+0

मैं इसे 'start_date' मुद्दा है नहीं लगता कि पढ़ सकते हैं, मैं एक दिन की आधी रात को मेरी' start_date' गोल दिए गए हैं, मेरी समस्या यह है कि 'execute_date 'अगले दिन सेट किया गया है जब डैग बाहरी रूप से ट्रिगर किया जाता है, जिसके लिए मुझे लगता है कि यह उपरोक्त जैसा है जैसा मैंने ऊपर कहा था। –

+0

मैं ईटीएल शैली को शेड्यूल करने के लिए समझता हूं, लेकिन मैं अपनी समस्या को कैसे हल कर सकता हूं: अज्ञात कारण के लिए, मेरा डैग ट्रिगर नहीं हुआ है, मैं इसे 'trigution_date' पर' ट्रिगर_डाग 'उपसमंद के अलावा कैसे ट्रिगर कर सकता हूं, मैं बैकफिल के बारे में सोच सकता हूं ', तो अगर यह मामला है, तो हमें 'trigger_dag' क्यों चाहिए, यह बकवास करता है? –

+0

क्या आपके पास शेड्यूलर चल रहा है? 'एयरफ्लो शेड्यूलर' – mistercrunch

1

वायु प्रवाह UTC में समय प्रदान करेगा। मुझे यकीन नहीं है कि आप किस समय क्षेत्र को चला रहे हैं। तो सुनिश्चित करें कि आप यूटीसी टाइमज़ोन और शेड्यूल के बारे में सोचें या तदनुसार नौकरियों को ट्रिगर करें।

उस समय को परिवर्तित करने का प्रयास करें जिसे आप यूटीसी समय पर ट्रिगर करना चाहते हैं और डीएजी को ट्रिगर करना चाहते हैं। यह काम करता हैं। अधिक जानकारी के लिए आप नीचे दिए गए लिंक

https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls

संबंधित मुद्दे