हे दोस्तों, मैं कै शुनफेंग हूँ, व्हेलऑप्स में एक वरिष्ठ डेटा इंजीनियर, और अपाचे डॉल्फिन शेड्यूलर समुदाय का एक कमिटर और PMC सदस्य। आज, मैं समझाऊंगा कि अपाचे डॉल्फिन शेड्यूलर का वर्कर टास्क कैसे काम करता है।
यह स्पष्टीकरण तीन खंडों में विभाजित होगा:
अपाचे डॉल्फिन शेड्यूलर एक वितरित, आसानी से विस्तार योग्य, दृश्य वर्कफ़्लो शेड्यूलिंग ओपन-सोर्स सिस्टम है, जो उद्यम-स्तरीय परिदृश्यों के लिए उपयुक्त है।
यह निम्नलिखित प्रमुख कार्यात्मकताएं प्रदान करता है, तथा दृश्य परिचालनों के माध्यम से वर्कफ़्लो और कार्यों के लिए पूर्ण जीवनचक्र डेटा प्रसंस्करण समाधान प्रदान करता है।
प्रयोग करने में आसान
दृश्य DAG परिचालन: उपयोगकर्ता घटकों को पृष्ठ पर खींचकर छोड़ सकते हैं, ताकि उन्हें DAG (निर्देशित चक्रीय ग्राफ) में व्यवस्थित किया जा सके।
प्लगइन सिस्टम: इसमें टास्क प्लगइन, डेटा स्रोत प्लगइन, अलर्ट प्लगइन, स्टोरेज प्लगइन, रजिस्ट्री सेंटर प्लगइन और क्रॉन जॉब प्लगइन आदि शामिल हैं। उपयोगकर्ता अपनी व्यावसायिक आवश्यकताओं को पूरा करने के लिए आवश्यकतानुसार प्लगइन को आसानी से विस्तारित कर सकते हैं।
समृद्ध उपयोग परिदृश्य
स्थैतिक कॉन्फ़िगरेशन: इसमें वर्कफ़्लो शेड्यूलिंग, ऑनलाइन और ऑफ़लाइन संचालन, संस्करण प्रबंधन और बैकफ़िल फ़ंक्शन शामिल हैं।
रनटाइम ऑपरेशन: विराम, रोक, फिर से शुरू, और पैरामीटर प्रतिस्थापन जैसी कार्यक्षमताएं प्रदान करता है।
निर्भरता प्रकार: निर्भरता विकल्पों और रणनीतियों के एक समृद्ध सेट का समर्थन करता है, और अधिक परिदृश्यों के लिए अनुकूलन करता है।
पैरामीटर पासिंग: वर्कफ़्लो स्तर पर स्टार्टअप पैरामीटर, वैश्विक पैरामीटर, कार्य स्तर पर स्थानीय पैरामीटर और गतिशील पैरामीटर पासिंग का समर्थन करता है।
उच्च विश्वसनीयता
विकेन्द्रीकृत डिजाइन: सभी सेवाएं स्टेटलेस हैं और सिस्टम थ्रूपुट बढ़ाने के लिए उन्हें क्षैतिज रूप से बढ़ाया जा सकता है।
अधिभार संरक्षण और इंस्टेंस दोष सहिष्णुता:
ओवरलोड प्रोटेक्शन: ऑपरेशन के दौरान, मास्टर और वर्कर अपने स्वयं के CPU और मेमोरी उपयोग, साथ ही टास्क वॉल्यूम की निगरानी करते हैं। यदि ओवरलोड हो जाता है, तो वे वर्तमान वर्कफ़्लो/टास्क प्रोसेसिंग को रोक देते हैं और रिकवरी के बाद फिर से शुरू करते हैं।
इंस्टेंस फॉल्ट टॉलरेंस: जब मास्टर/वर्कर नोड विफल हो जाते हैं, तो रजिस्ट्री केंद्र ऑफ़लाइन सेवा नोड का पता लगाता है और वर्कफ़्लो या टास्क इंस्टेंस के लिए फॉल्ट टॉलरेंस का प्रदर्शन करता है, जिससे सिस्टम की स्व-पुनर्प्राप्ति क्षमता को यथासंभव सुनिश्चित किया जा सके।
अब, आइए समग्र डिज़ाइन पृष्ठभूमि का परिचय दें। नीचे आधिकारिक वेबसाइट पर उपलब्ध डिज़ाइन आर्किटेक्चर आरेख दिया गया है।
आर्किटेक्चर आरेख से, हम देख सकते हैं कि अपाचे डॉल्फिन शेड्यूलर कई मुख्य घटकों से बना है:
API घटक: API सेवा मुख्य रूप से मेटाडेटा का प्रबंधन करती है, API सेवा के माध्यम से UI के साथ इंटरैक्ट करती है, या वर्कफ़्लो कार्यों और वर्कफ़्लो द्वारा आवश्यक विभिन्न संसाधनों को बनाने के लिए API इंटरफेस को कॉल करती है।
मास्टर घटक: मास्टर वर्कफ़्लो इंस्टेंस का नियंत्रक है, जो कमांड का उपभोग करने, उन्हें वर्कफ़्लो इंस्टेंस में परिवर्तित करने, DAG विभाजन करने, कार्यों को क्रम में प्रस्तुत करने और कार्यकर्ताओं को कार्य वितरित करने के लिए जिम्मेदार है।
वर्कर घटक: वर्कर विशिष्ट कार्यों का निष्पादक होता है। कार्य प्राप्त करने के बाद, यह उन्हें विभिन्न कार्य प्रकारों के अनुसार संसाधित करता है, मास्टर के साथ इंटरैक्ट करता है, और कार्य की स्थिति की रिपोर्ट करता है। विशेष रूप से, वर्कर सेवा डेटाबेस के साथ इंटरैक्ट नहीं करती है; केवल API, मास्टर और अलर्ट सेवाएँ ही डेटाबेस के साथ इंटरैक्ट करती हैं।
अलर्ट सेवा: अलर्ट सेवा अलग-अलग अलर्ट प्लगइन के ज़रिए अलर्ट भेजती है। ये सेवाएँ रजिस्ट्री केंद्र के साथ रजिस्टर होती हैं, और मास्टर और वर्कर समय-समय पर हार्टबीट और वर्तमान स्थिति की रिपोर्ट करते हैं ताकि यह सुनिश्चित हो सके कि वे सामान्य रूप से कार्य प्राप्त कर सकें।
मालिक और कार्यकर्ता के बीच बातचीत की प्रक्रिया इस प्रकार है:
कार्य प्रस्तुतीकरण: मास्टर द्वारा DAG विभाजन पूरा करने के बाद, यह डेटाबेस में कार्य प्रस्तुत करता है और विभिन्न वितरण रणनीतियों के आधार पर कार्यों को वितरित करने के लिए एक उपयुक्त कार्यकर्ता समूह का चयन करता है।
कार्य प्राप्ति: कार्यकर्ता को कार्य मिलने के बाद, वह कार्य की स्थिति के आधार पर यह निर्धारित करता है कि उसे कार्य स्वीकार करना है या नहीं। स्वीकृति सफल है या नहीं, इस पर फीडबैक दिया जाता है।
कार्य निष्पादन: कार्यकर्ता कार्य को संसाधित करता है, स्थिति को चालू अवस्था में अपडेट करता है, और मास्टर को वापस फीड करता है। मास्टर डेटाबेस में कार्य की स्थिति और प्रारंभ समय की जानकारी को अपडेट करता है।
कार्य पूर्ण होना: कार्य पूर्ण होने के बाद, कार्यकर्ता मास्टर को एक समापन ईवेंट अधिसूचना भेजता है, और मास्टर एक ACK पुष्टिकरण लौटाता है। यदि कोई ACK प्राप्त नहीं होता है, तो कार्यकर्ता यह सुनिश्चित करने के लिए पुनः प्रयास करता रहेगा कि कार्य ईवेंट खो न जाए।
जब कार्यकर्ता को कोई कार्य प्राप्त होता है, तो निम्नलिखित कार्य निष्पादित किए जाते हैं:
कार्यकर्ता जाँचता है कि क्या यह ओवरलोडेड है; यदि ऐसा है, तो यह कार्य को अस्वीकार कर देता है। कार्य वितरण विफलता प्रतिक्रिया प्राप्त करने के बाद, मास्टर वितरण रणनीति के आधार पर कार्य वितरण के लिए किसी अन्य कार्यकर्ता को चुनना जारी रखता है।
कार्यकर्ता कार्यों की विशिष्ट निष्पादन प्रक्रिया में निम्नलिखित चरण शामिल हैं:
आगे, हम विशिष्ट कार्य निष्पादन प्रक्रिया का विस्तार से वर्णन करेंगे।
कार्य निष्पादन शुरू होने से पहले, एक संदर्भ पहले आरंभीकृत किया जाता है। इस बिंदु पर, कार्य का प्रारंभ समय निर्धारित किया जाता है। कार्य की सटीकता सुनिश्चित करने के लिए, समय के बहाव से बचने के लिए मास्टर और कार्यकर्ता के बीच समय को सिंक्रनाइज़ करना आवश्यक है।
इसके बाद, कार्य की स्थिति को चालू पर सेट कर दिया जाता है और मास्टर को यह सूचित किया जाता है कि कार्य चलना शुरू हो गया है।
चूंकि अधिकांश कार्य लिनक्स ऑपरेटिंग सिस्टम पर चलते हैं, इसलिए टेनेंट और फ़ाइल प्रोसेसिंग आवश्यक है:
टेनेंट को प्रोसेस करने के बाद, वर्कर विशिष्ट निष्पादन निर्देशिका बनाता है। निष्पादन निर्देशिका की रूट निर्देशिका कॉन्फ़िगर करने योग्य है और इसके लिए उचित प्राधिकरण की आवश्यकता होती है। डिफ़ॉल्ट रूप से, निर्देशिका अनुमतियाँ 755 पर सेट की जाती हैं।
कार्य निष्पादन के दौरान, विभिन्न संसाधन फ़ाइलों की आवश्यकता हो सकती है, जैसे कि AWS S3 या HDFS क्लस्टर से फ़ाइलें प्राप्त करना। सिस्टम इन फ़ाइलों को बाद के कार्य उपयोग के लिए कार्यकर्ता की अस्थायी निर्देशिका में डाउनलोड करता है।
अपाचे डॉल्फिन शेड्यूलर में, पैरामीटर वैरिएबल को प्रतिस्थापित किया जा सकता है। मुख्य श्रेणियों में शामिल हैं:
उपरोक्त चरणों के माध्यम से, कार्य का निष्पादन वातावरण और आवश्यक संसाधन तैयार हो जाते हैं, और कार्य आधिकारिक रूप से निष्पादन शुरू कर सकता है।
अपाचे डॉल्फिन शेड्यूलर में, विभिन्न प्रकार के कार्य समर्थित हैं, जिनमें से प्रत्येक अलग-अलग परिदृश्यों और आवश्यकताओं के लिए लागू होता है। नीचे, हम कई प्रमुख कार्य प्रकारों और उनके विशिष्ट घटकों का परिचय देते हैं।
इन घटकों का उपयोग आमतौर पर स्क्रिप्ट फ़ाइलों को निष्पादित करने के लिए किया जाता है, जो विभिन्न स्क्रिप्टिंग भाषाओं और प्रोटोकॉल के लिए उपयुक्त हैं:
व्यावसायिक संस्करण (व्हेल शेड्यूलर) JAR पैकेजों को निष्पादित करके जावा अनुप्रयोगों को चलाने का भी समर्थन करता है।
इन घटकों का उपयोग तार्किक नियंत्रण और कार्यप्रवाह प्रबंधन को कार्यान्वित करने के लिए किया जाता है:
इन घटकों का उपयोग मुख्य रूप से बड़े डेटा प्रसंस्करण और विश्लेषण के लिए किया जाता है:
इन घटकों का उपयोग कंटेनर वातावरण में कार्यों को चलाने के लिए किया जाता है:
डेटा की गुणवत्ता सुनिश्चित करने के लिए उपयोग किया जाता है:
इन घटकों का उपयोग डेटा विज्ञान और मशीन लर्निंग वातावरण के साथ बातचीत करने के लिए किया जाता है:
इन घटकों का उपयोग मशीन लर्निंग कार्यों के प्रबंधन और निष्पादन के लिए किया जाता है:
कुल मिलाकर, अपाचे डॉल्फिन शेड्यूलर तीन से चार दर्जन घटकों का समर्थन करता है, जो स्क्रिप्ट निष्पादन, बड़े डेटा प्रोसेसिंग से लेकर मशीन लर्निंग तक के क्षेत्रों को कवर करता है। अधिक जानकारी के लिए, कृपया विस्तृत दस्तावेज़ देखने के लिए आधिकारिक वेबसाइट पर जाएँ।
अपाचे डॉल्फिन शेड्यूलर में, कार्य प्रकारों को विभिन्न रनटाइम वातावरणों और आवश्यकताओं के अनुरूप कई प्रसंस्करण मोडों में विभाजित किया जाता है।
नीचे हम कार्य प्रकारों की अमूर्तता और निष्पादन प्रक्रिया का विस्तार से परिचय देते हैं।
वर्कर एक JVM सेवा है जिसे सर्वर पर तैनात किया जाता है। कुछ स्क्रिप्ट घटकों (जैसे शेल और पायथन) और स्थानीय रूप से चलाए जाने वाले कार्यों (जैसे स्पार्क लोकल) के लिए, वे चलाने के लिए एक अलग प्रक्रिया शुरू करेंगे।
इस बिंदु पर, कार्यकर्ता प्रक्रिया आईडी (पीआईडी) के माध्यम से इन कार्यों के साथ अंतःक्रिया करता है।
विभिन्न डेटा स्रोतों को अलग-अलग अनुकूलन की आवश्यकता हो सकती है। SQL और संग्रहीत प्रक्रिया कार्यों के लिए, हमने विभिन्न डेटा स्रोतों, जैसे MySQL, PostgreSQL, AWS Redshift, आदि के लिए सारगर्भित हैंडलिंग की है। यह सारगर्भितता विभिन्न डेटाबेस प्रकारों के लचीले अनुकूलन और विस्तार की अनुमति देती है।
रिमोट टास्क उन टास्क को कहते हैं जो रिमोट क्लस्टर पर निष्पादित किए जाते हैं, जैसे कि AWS EMR, SeaTunnel क्लस्टर, Kubernetes क्लस्टर, आदि। वर्कर इन टास्क को स्थानीय रूप से निष्पादित नहीं करता है; इसके बजाय, यह उन्हें रिमोट क्लस्टर में सबमिट करता है और उनकी स्थिति और संदेशों की निगरानी करता है। यह मोड विशेष रूप से क्लाउड वातावरण के लिए उपयुक्त है जहाँ स्केलेबिलिटी की आवश्यकता होती है।
लॉग संग्रह
विभिन्न प्लगइन्स अलग-अलग प्रोसेसिंग मोड का उपयोग करते हैं, और इसलिए, लॉग संग्रहण तदनुसार भिन्न होता है:
स्थानीय प्रक्रियाएँ: प्रक्रिया आउटपुट की निगरानी करके लॉग रिकॉर्ड किए जाते हैं।
दूरस्थ कार्य: दूरस्थ क्लस्टर (जैसे, AWS EMR) से कार्य की स्थिति और आउटपुट की समय-समय पर जाँच करके और उन्हें स्थानीय कार्य लॉग में रिकॉर्ड करके लॉग एकत्र किए जाते हैं।
पैरामीटर चर प्रतिस्थापन
सिस्टम टास्क लॉग को स्कैन करके ऐसे पैरामीटर वैरिएबल की पहचान करता है जिन्हें डायनेमिक रूप से बदलने की आवश्यकता होती है। उदाहरण के लिए, DAG में टास्क A कुछ आउटपुट पैरामीटर उत्पन्न कर सकता है जिन्हें डाउनस्ट्रीम टास्क B में पास करने की आवश्यकता होती है।
इस प्रक्रिया के दौरान, सिस्टम लॉग्स को पढ़ता है और आवश्यकतानुसार पैरामीटर वेरिएबल्स को प्रतिस्थापित करता है।
कार्य आईडी प्राप्त करना
इन टास्क आईडी को होल्ड करने से आगे की डेटा क्वेरी और रिमोट टास्क ऑपरेशन की अनुमति मिलती है। उदाहरण के लिए, जब कोई वर्कफ़्लो बंद हो जाता है, तो चल रहे टास्क को समाप्त करने के लिए टास्क आईडी का उपयोग करके संबंधित कैंसल एपीआई को कॉल किया जा सकता है।
दोष सहिष्णुता प्रबंधन
किसी कार्य के निष्पादित होने के बाद, कई पूर्णता क्रियाएं आवश्यक होती हैं:
कार्य पूर्णता जाँच: सिस्टम जाँच करेगा कि क्या अलर्ट भेजने की आवश्यकता है। उदाहरण के लिए, SQL कार्य के लिए, यदि क्वेरी परिणाम अलर्ट ट्रिगर करते हैं, तो सिस्टम अलर्ट संदेश भेजने के लिए RPC के माध्यम से अलर्ट सेवा से इंटरैक्ट करेगा।
इवेंट फीडबैक: वर्कर टास्क पूरा होने की घटना (फिनिश इवेंट) को मास्टर को वापस भेजेगा। मास्टर डेटाबेस में टास्क की स्थिति को अपडेट करता है और DAG स्थिति संक्रमण के साथ आगे बढ़ता है।
संदर्भ सफाई: वर्कर मेमोरी से कार्य की शुरुआत में बनाए गए कार्य संदर्भ को हटा देगा। यह कार्य निष्पादन के दौरान उत्पन्न फ़ाइल पथों को भी साफ़ कर देगा। यदि डिबग मोड (विकास मोड) में है, तो ये फ़ाइलें साफ़ नहीं होंगी, जिससे विफल कार्यों के समस्या निवारण की अनुमति मिलती है।
इन चरणों के माध्यम से, किसी कार्य इंस्टैंस की संपूर्ण निष्पादन प्रक्रिया पूरी हो जाती है।
यदि आप अपाचे डॉल्फिन शेड्यूलर में रुचि रखते हैं और ओपन-सोर्स समुदाय में योगदान करना चाहते हैं, तो आप हमारे योगदान दिशानिर्देशों का संदर्भ ले सकते हैं।
समुदाय सक्रिय योगदान को प्रोत्साहित करता है, जिसमें निम्नलिखित शामिल हैं, परंतु इन्हीं तक सीमित नहीं हैं:
नए योगदानकर्ताओं के लिए, आप समुदाय के GitHub मुद्दों में good first issue
के रूप में लेबल किए गए मुद्दों की खोज कर सकते हैं। ये मुद्दे आम तौर पर सरल होते हैं और अपना पहला योगदान देने वाले उपयोगकर्ताओं के लिए उपयुक्त होते हैं।
संक्षेप में, हमने अपाचे डॉल्फिन शेड्यूलर के समग्र डिजाइन और वर्कर कार्यों की विस्तृत निष्पादन प्रक्रिया के बारे में सीखा है।
मुझे उम्मीद है कि यह सामग्री आपको अपाचे डॉल्फिन शेड्यूलर को बेहतर ढंग से समझने और उपयोग करने में मदद करेगी। यदि आपके कोई प्रश्न हैं, तो बेझिझक टिप्पणी अनुभाग में मुझसे संपर्क करें।