2015-09-17 16 views
119

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

क्या कर्मचारी एक JVM प्रक्रिया है या नहीं? मैंने bin\start-slave.sh चलाया और पाया कि यह कार्यकर्ता उत्पन्न हुआ, जो वास्तव में एक जेवीएम है।

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

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

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

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

  3. कार्यकर्ता, निष्पादक और निष्पादक कोर (- कुल-निष्पादक-कोर) के बीच संबंध क्या है?

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

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

चलो उदाहरण लेते बेहतर समझने के लिए।

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

उदाहरण 2 उदाहरण 1 के रूप में एक ही क्लस्टर config, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक आवेदन को चलाने --executor-कोर 10 --total-निष्पादक-कोर 10

उदाहरण 3 --executor-कोर 10 --total-निष्पादक-कोर एक ही क्लस्टर config उदाहरण 1 के रूप में, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक आवेदन को चलाने 50.

ई XAMPLE 4 उदाहरण 1 के रूप में एक ही क्लस्टर config, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक आवेदन को चलाने --executor-कोर 50 --total-निष्पादक-कोर 50.

उदाहरण 5 एक ही क्लस्टर config के रूप में उदाहरण 1, लेकिन मैं निम्नलिखित सेटिंग्स के साथ एक आवेदन को चलाने --executor-कोर 50 --total-निष्पादक-कोर 10

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

उत्तर

146

enter image description here

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

ड्राइवर

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

निष्पादकों

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

आवेदन कार्यान्वयन फ्लो

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

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

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

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

अपने प्रश्न

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

  2. एक यार्न क्लस्टर में आप - एनम-एक्जिक्यूटर्स के साथ ऐसा कर सकते हैं। एक स्टैंडअलोन क्लस्टर में आपको एक कार्यकर्ता प्रति कार्यकर्ता मिलेगा जब तक कि आप spark.executor.cores के साथ खेलते हैं और एक कार्यकर्ता के पास एक से अधिक निष्पादक रखने के लिए पर्याप्त कोर होते हैं। (@JacekLaskowski के रूप में बताया, --num-निष्पादकों अब उपयोग धागे https://github.com/apache/spark/commit/16b6d18613e150c7038c613992d80a7828413e66 में है)

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

  4. --total- निष्पादक-कोर प्रति आवेदन निष्पादक कोर की अधिकतम संख्या

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

अद्यतन

मैं इस परिदृश्यों का परीक्षण करने में सक्षम दस्तावेज़ के अनुसार नहीं किया गया है, लेकिन:

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

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

+0

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

+0

आपको spark.executor.memory के साथ काम करना चाहिए और यह सुनिश्चित करना चाहिए कि यह आपके स्पार्क श्रमिकों की स्मृति को फिट करे – Marco

+4

क्या एक अच्छा जवाब है! धन्यवाद @ मार्को। Https://github.com/apache/spark/commit/16b6d18613e150c7038c613992d80a7828413e66 '--num-executors' के अनुसार यार्न में उपयोग नहीं किया जा रहा है। –

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