2016-10-22 12 views
6

मेरे पास वास्तव में एकमात्र बड़ा पढ़ने वाला डेटा है जो मैं सभी निष्पादकों को उसी नोड पर उपयोग करना चाहता हूं। स्पार्क में यह संभव है। मुझे पता है, आप चर प्रसारित कर सकते हैं, लेकिन क्या आप वास्तव में बड़े सरणी प्रसारित कर सकते हैं। क्या, हुड के तहत, यह निष्पादकों के बीच एक ही नोड पर डेटा साझा करता है? यह उसी नोड पर चल रहे निष्पादकों के JVMs के बीच डेटा साझा करने में सक्षम कैसे है?स्पार्क में, क्या दो निष्पादकों के बीच डेटा साझा करना संभव है?

+0

निष्पादक को डेटा पिन किया गया है? क्या आप उस समस्या का वर्णन कर सकते हैं जिसे आप हल करने का प्रयास कर रहे हैं? – maasg

+1

असल में, मेरे पास केवल पढ़ने वाला डेटा है जो लगभग 6 जीबी है। यह डेटा प्रत्येक निष्पादक द्वारा समय-समय पर पढ़ा जाना चाहिए, क्योंकि यह एक लुकअप टेबल की तरह है। प्रत्येक निष्पादक के पास संपूर्ण लुकअप टेबल तक पहुंच होनी चाहिए। मैं प्रत्येक निष्पादक को इतना स्मृति नहीं देना चाहता हूं। मैं चाहता हूं कि उस स्मृति को उसी नोड पर चलने वाले निष्पादकों के बीच साझा किया जाए, ताकि मैं प्रत्येक निष्पादक को कम स्मृति देकर दूर हो सकूं। – pythonic

+5

लगता है जैसे आप ऐसा करने के लिए कुछ स्थानीय सेवा का उपयोग कर सकते हैं। जैसे स्थानीय रेडिस (या समान इन-मेमोरी डीबी/कैश) में उस डेटा को लोड करें और स्थानीय उदाहरण को संबोधित करने के लिए स्पार्क नौकरी से सिंगलटन जेवीएम ऑब्जेक्ट का उपयोग करें। आपको एक प्रबंधन सेवा की भी आवश्यकता होगी जो रीफ्रेश करता है। मुझे नहीं लगता कि आप जो चाहते हैं उसे हासिल करने के लिए आउट ऑफ़ द बॉक्स स्पार्क समाधान है। – maasg

उत्तर

5

हां, आप अपने डेटा पर विचार करते समय broadcast चर का उपयोग कर सकते हैं (अपरिवर्तनीय)। प्रसारण चर को निम्नलिखित गुणों को पूरा करना होगा।

स्मृति
  • अपरिवर्तनीय
  • में
    • फ़िट क्लस्टर

    को वितरित तो, यहां केवल हालत अपने डेटा एक नोड पर स्मृति में फिट करने के लिए सक्षम होना चाहिए है। इसका मतलब है कि डेटा किसी भी बड़े टेबल की तरह स्मृति सीमा से अधिक या उससे अधिक नहीं होना चाहिए।

    प्रत्येक निष्पादक को प्रसारण चर की एक प्रति प्राप्त होती है और उस विशेष निष्पादक के सभी कार्य उस डेटा को पढ़ने/उपयोग कर रहे हैं। यह क्लस्टर में सभी कार्यकर्ता नोड्स को एक बड़ा, केवल-पढ़ने वाला डेटा भेजने जैसा है। यानी, प्रत्येक कार्यकर्ता और प्रत्येक कार्यकर्ता (इसके कार्य) के बजाय प्रत्येक कार्यकर्ता को केवल एक बार जहाज को डेटा पढ़ते हैं।

  • +0

    @pythonic ने पूछा कि कैसे "JVMs के बीच डेटा साझा करें"। –

    +0

    @LostInOverflow मुझे विश्वास है कि सवाल कुछ भ्रम पैदा करता है। ओपी सही शब्द का उपयोग नहीं कर रहा है। 2 निष्पादक! = 2 आवेदन JVMs – eliasah

    +0

    ठीक है, हाँ। JVM साझाकरण का उत्तर है, अपाचे स्पार्क एक वितरित डेटा प्रोसेसिंग फ्रेमवर्क है। तो, यहां आप नौकरियां/एप्लिकेशन/कार्य या आरडीडी साझा नहीं कर सकते हैं। एचडीएफएस जैसे लगातार भंडारण के माध्यम से डेटा साझा करना एकमात्र तरीका संभव है। अपाचे इग्नाइट, एक ढांचा जो आरडीडी के शीर्ष पर एक अमूर्तता प्रदान करता है जिसे इग्नाइटआरडीडी कहा जाता है जिसे मूल स्पार्क आरडीडी और डाटाफ्रेम एपीआई का कार्यान्वयन होता है जो अन्य नौकरियों, अनुप्रयोगों और श्रमिकों में आरडीडी की स्थिति साझा करता है। – Kris

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