स्पार्क स्टैंडअलोन क्लस्टर में श्रमिक, निष्पादक, कोर क्या हैं?


219

मैंने क्लस्टर मोड अवलोकन पढ़ा और मैं अभी भी स्पार्क स्टैंडअलोन क्लस्टर और समानांतरवाद में विभिन्न प्रक्रियाओं को नहीं समझ सकता ।

कार्यकर्ता एक जेवीएम प्रक्रिया है या नहीं? मैंने भाग लिया bin\start-slave.shऔर पाया कि इसने कार्यकर्ता को जन्म दिया, जो वास्तव में एक जेवीएम है।

उपरोक्त लिंक के अनुसार, एक निष्पादक एक प्रक्रिया है जो किसी कार्यकर्ता नोड पर एक अनुप्रयोग के लिए शुरू की जाती है जो कार्य करती है। एक निष्पादक भी एक JVM है।

ये मेरे सवाल हैं:

  1. अभियोजक प्रति आवेदन कर रहे हैं। फिर कार्यकर्ता की भूमिका क्या है? क्या यह निष्पादक के साथ समन्वय करता है और परिणाम को वापस चालक को बताता है? या ड्राइवर सीधे निष्पादक से बात करता है? यदि हां, तो कार्यकर्ता का उद्देश्य क्या है?

  2. किसी एप्लिकेशन के लिए निष्पादकों की संख्या को कैसे नियंत्रित करें?

  3. क्या निष्पादनकर्ता के अंदर समानांतर में चलने के लिए कार्य किए जा सकते हैं? यदि हां, तो एक निष्पादक के लिए थ्रेड्स की संख्या को कॉन्फ़िगर कैसे करें?

  4. एक कार्यकर्ता, निष्पादक और निष्पादक कोर (-टोटल-एक्ज़ीक्यूटर-कोर) के बीच क्या संबंध है?

  5. प्रति नोड में अधिक श्रमिक होने का क्या मतलब है?

अपडेट किया गया

आइए बेहतर समझने के लिए उदाहरण लेते हैं।

उदाहरण 1: 5 कार्यकर्ता नोड्स के साथ एक स्टैंडअलोन क्लस्टर (प्रत्येक नोड में 8 कोर होते हैं) जब मैं डिफ़ॉल्ट सेटिंग्स के साथ एक आवेदन शुरू करता हूं।

उदाहरण 2 एक ही उदाहरण के रूप में एक ही क्लस्टर कॉन्फिगर करता है, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक एप्लिकेशन चलाता हूं-executor-cores 10 --total-execor-cores 10।

उदाहरण 3 एक ही उदाहरण के रूप में एक ही क्लस्टर कॉन्फिगर करता है, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक एप्लिकेशन चलाता हूं-executor-cores 10 --total-execor-cores 50।

उदाहरण 4 एक ही उदाहरण के रूप में एक ही क्लस्टर कॉन्फिगर करता है, लेकिन मैं निम्नलिखित सेटिंग्स --executor-cores 50 --total-execor-cores 50 के साथ एक एप्लिकेशन चलाता हूं।

उदाहरण 5 एक ही उदाहरण के रूप में एक ही क्लस्टर कॉन्फिगर करता है, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक एप्लिकेशन चलाता हूं --executor-cores 50 --total-execor-cores 10।

इनमें से प्रत्येक उदाहरण में, कितने निष्पादक हैं? प्रति निष्पादक कितने धागे हैं? कितने कोर? निष्पादनकर्ताओं की संख्या प्रति आवेदन कैसे तय की जाती है? क्या यह हमेशा श्रमिकों की संख्या के समान है?

जवाबों:


274

यहां छवि विवरण दर्ज करें

स्पार्क एक मास्टर / दास वास्तुकला का उपयोग करता है। जैसा कि आप आंकड़े में देख सकते हैं, इसमें एक केंद्रीय समन्वयक (चालक) है जो कई वितरित श्रमिकों (निष्पादकों) के साथ संचार करता है। ड्राइवर और प्रत्येक निष्पादक अपने स्वयं के जावा प्रक्रियाओं में चलते हैं।

चालक

ड्राइवर वह प्रक्रिया है जहां मुख्य विधि चलती है। पहले यह उपयोगकर्ता प्रोग्राम को कार्यों में परिवर्तित करता है और उसके बाद यह निष्पादकों पर कार्यों को शेड्यूल करता है।

निष्पादकों

कार्यकारी किसी दिए गए स्पार्क नौकरी में व्यक्तिगत कार्यों को चलाने के आरोप में श्रमिक नोड्स प्रक्रियाएं हैं। वे एक स्पार्क एप्लिकेशन की शुरुआत में लॉन्च किए जाते हैं और आमतौर पर किसी एप्लिकेशन के पूरे जीवनकाल के लिए चलते हैं। एक बार वे कार्य चलाने के बाद वे ड्राइवर को परिणाम भेजते हैं। वे RDD के लिए इन-मेमोरी मेमोरी भी प्रदान करते हैं जो ब्लॉक मैनेजर के माध्यम से उपयोगकर्ता कार्यक्रमों द्वारा कैश की जाती हैं।

आवेदन पत्र प्रवाह

इसे ध्यान में रखते हुए, जब आप क्लस्टर के लिए एक एप्लिकेशन को स्पार्क-सबमिट करते हैं तो यह वही होता है जो आंतरिक रूप से होता है:

  1. एक स्टैंडअलोन एप्लिकेशन शुरू होता है और एक इंस्टेंट को इंस्टेंट करता है SparkContext(और यह केवल तब होता है जब आप एप्लिकेशन को ड्राइवर कह सकते हैं)।
  2. ड्राइवर प्रोग्राम क्लस्टर प्रबंधक से निष्पादन को लॉन्च करने के लिए संसाधन मांगता है।
  3. क्लस्टर प्रबंधक निष्पादकों को लॉन्च करता है।
  4. ड्राइवर प्रक्रिया उपयोगकर्ता एप्लिकेशन के माध्यम से चलती है। आरडीडी के कार्य पर किए गए कार्यों और परिवर्तनों के आधार पर निष्पादकों को भेजा जाता है।
  5. निष्पादनकर्ता कार्य चलाते हैं और परिणाम सहेजते हैं।
  6. यदि कोई श्रमिक दुर्घटनाग्रस्त होता है, तो उसके कार्यों को फिर से संसाधित करने के लिए विभिन्न निष्पादकों को भेजा जाएगा। "लर्निंग स्पार्क: लाइटनिंग-फास्ट बिग डेटा विश्लेषण" पुस्तक में वे स्पार्क और फॉल्ट टॉलरेंस के बारे में बात करते हैं:

स्पार्क स्वचालित रूप से विफल या धीमी मशीनों के साथ विफल या धीमी गति से कार्यों को फिर से निष्पादित करता है। उदाहरण के लिए, यदि नोड मैप के विभाजन को चलाता है () ऑपरेशन क्रैश हो जाता है, स्पार्क इसे दूसरे नोड पर फिर से चलाएगा; और भले ही नोड दुर्घटनाग्रस्त न हो, लेकिन अन्य नोड्स की तुलना में बहुत धीमा है, स्पार्क पूर्व में किसी अन्य नोड पर कार्य की "सट्टा" प्रतिलिपि लॉन्च कर सकता है, और यदि समाप्त हो जाता है तो उसका परिणाम ले सकता है।

  1. ड्राइवर से SparkContext.stop () के साथ या यदि मुख्य विधि बाहर निकलती है / दुर्घटनाग्रस्त हो जाती है, तो सभी निष्पादकों को समाप्त कर दिया जाएगा और क्लस्टर प्रबंधक द्वारा क्लस्टर संसाधन जारी कर दिए जाएंगे।

आपके सवाल

  1. जब निष्पादक शुरू किए जाते हैं तो वे चालक के साथ खुद को पंजीकृत करते हैं और इतने पर वे सीधे संवाद करते हैं। श्रमिक क्लस्टर प्रबंधक को उनके संसाधनों की उपलब्धता के बारे में बताने के प्रभारी हैं।

  2. एक YARN क्लस्टर में आप --num-निष्पादकों के साथ कर सकते हैं। एक स्टैंडअलोन क्लस्टर में आपको प्रति कार्यकर्ता एक निष्पादक मिलेगा, जब तक कि आप स्पार्क से नहीं खेलते हैं। एग्ज़ेक्टर। करोड़ों और एक कर्मी के पास एक से अधिक निष्पादक रखने के लिए पर्याप्त कोर है। (जैसा कि @JacekLaskowski ने बताया, - YumN https://github.com/apache/spark/commit/16b6d18613e150c7038c638996d80a7828413e66 ) में अब कोई भी प्रयोग नहीं करेगा।

  3. आप - निष्पादनकर्ता-कोर के साथ प्रति निष्पादन कोर की संख्या असाइन कर सकते हैं

  4. -total-execor-cores प्रति एप्लिकेशन निष्पादक कोर की अधिकतम संख्या है

  5. जैसा कि सीन ओवेन ने इस सूत्र में कहा है : "प्रति मशीन एक से अधिक श्रमिकों को चलाने का एक अच्छा कारण नहीं है"। उदाहरण के लिए, आपके पास कई JVM एक मशीन में बैठे होंगे।

अपडेट करें

मैं इस परिदृश्य का परीक्षण करने में सक्षम नहीं था, लेकिन प्रलेखन के अनुसार:

उदाहरण 1: स्पार्क लालची के रूप में कई कोर और निष्पादक का अधिग्रहण करेगा जैसा कि अनुसूचक द्वारा पेश किया जाता है। तो अंत में आपको प्रत्येक 8 कोर के साथ 5 निष्पादक मिलेंगे।

उदाहरण 2 से 5: स्पार्क एक ही कार्यकर्ता के अनुरोध के अनुसार अधिक कोर आवंटित नहीं कर पाएगा, इसलिए कोई निष्पादक लॉन्च नहीं किया जाएगा।


धन्यवाद @ मर्को। इसलिए आम तौर पर, कार्यकर्ता को ढेर स्मृति के बारे में चिंता नहीं करनी चाहिए क्योंकि यह नोड संसाधनों का प्रबंधन करता है?
मणिकंदन कन्नन

8
क्या शानदार जवाब है! धन्यवाद @ मर्को। प्रति के रूप में github.com/apache/spark/commit/… --num-executors अब YARN में उपयोग में नहीं हैं।
जेसेक लाकोवस्की

1
@ मर्को महान जवाब के लिए धन्यवाद। क्या आप ड्राइवर चलाते समय क्लस्टर मैनेजर की चल रही भूमिका का विस्तार कर सकते हैं? ... यह उस मामले को संभालना चाहिए जहां चालक या श्रमिक या दुर्घटनाग्रस्त हो रहे हैं या प्रतिक्रिया दे रहे हैं, यह जानने के लिए कि क्या संसाधन उपलब्ध हैं।
आईएनसी

1
@ चालक संसाधनों के आवंटन के लिए क्लस्टर प्रबंधक से संपर्क करता है और निष्पादकों को लॉन्च करने के लिए क्लस्टर एमजीआर का भी अनुरोध करता है
अरविंद यारम

2
बहुत बढ़िया जवाब। आप चिंगारी internals के बारे में विस्तृत जानकारी प्राप्त कर सकते github.com/JerryLead/SparkInternals/blob/master/EnglishVersion/...
अमर गजभिये

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.