2015-07-25 7 views
6

जो मैं समझता हूं, क्लस्टर में आरडीडी में डेटा की कई प्रतियां हैं, ताकि नोड की विफलता के मामले में प्रोग्राम ठीक हो सके। हालांकि, ऐसे मामलों में जहां विफलता का मौका नगण्य है, आरडीडी में डेटा की कई प्रतियां रखने के लिए महंगा मेमोरी-वार होगा। तो, मेरा सवाल यह है कि स्पार्क में एक पैरामीटर है, जिसका उपयोग आरडीडी के प्रतिकृति कारक को कम करने के लिए किया जा सकता है?स्पार्क में आरडीडी के प्रतिकृति कारक को बदलने का कोई तरीका है?

+0

कहां से पढ़ा गया यह कहां है? –

+0

मेरा मतलब यह है कि आरडीडी में डेटा दोहराया जाता है, न कि आरडीडी स्वयं को दोहराया जाता है। मैंने पोस्ट अपडेट किया है। – MetallicPriest

+0

भंडारण अंतर्निहित इनपुट आरडीडी में आमतौर पर प्रतिकृति है; इसका मतलब यह नहीं है कि गणना प्रतिलिपि बनाई जाएगी। किसी भी तरह से, यह एचडीएफएस (कहना) की विशेषता है, स्पार्क नहीं। –

उत्तर

5

सबसे पहले, नोट स्पार्क स्वचालित रूप से आपके सभी RDD एस को कैश नहीं करता है, क्योंकि एप्लिकेशन कई RDD एस बना सकते हैं, और उनमें से सभी का पुन: उपयोग नहीं किया जा सकता है। आपको .persist() या .cache() पर कॉल करना होगा।

आप भंडारण स्तर सेट कर सकते हैं जिसके साथ आप RDD myRDD.persist(StorageLevel.MEMORY_AND_DISK) के साथ जारी रखना चाहते हैं। .cache().persist(StorageLevel.MEMORY_ONLY) के लिए एक शॉर्टेंड है।

persist के लिए डिफ़ॉल्ट भंडारण स्तर वास्तव में StorageLevel.MEMORY_ONLY जावा या स्काला में एक RDD के लिए है - लेकिन आम तौर पर अगर आप एक DStream पैदा कर रहे अलग है (अपने DStream निर्माता एपीआई दस्तावेज़ को देखें)। यदि आप पायथन का उपयोग कर रहे हैं, तो यह StorageLevel.MEMORY_ONLY_SER है।

doc कई स्टोरेज स्तरों का विवरण देता है और उनका क्या मतलब है, लेकिन वे मूल रूप से एक ऑब्जेक्ट को स्पार्क को इंगित करने के लिए कॉन्फ़िगरेशन शॉर्टेंड हैं जो StorageLevel class को बढ़ाता है। इस प्रकार आप 40 से ऊपर के प्रतिकृति कारक के साथ अपना खुद का परिभाषित कर सकते हैं।

नोट करें कि विभिन्न पूर्वनिर्धारित भंडारण स्तरों में से कुछ, RDD की एक प्रतिलिपि रखें।

  • DISK_ONLY
  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • OFF_HEAP
  • : वास्तव में, कि उन सभी जो नाम _2 ( NONE को छोड़कर) के साथ postfixed नहीं है सच है

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

1

जैसा कि huitseeker ने कहा है कि जब तक आप विशेष रूप से स्पार्क को आरडीडी जारी रखने के लिए नहीं कहते हैं और एक प्रतिकृति का उपयोग करने वाले स्टोरेजलेवल निर्दिष्ट करते हैं, तो इसमें आरडीडी के विभाजन की कई प्रतियां नहीं होंगी।

क्या स्पार्क करता है यह बताता है कि डेटा के एक विशिष्ट टुकड़े की गणना कैसे की जाती है ताकि जब कोई नोड विफल हो जाए तो यह खोए गए आरडीडी विभाजनों को प्राप्त करने के लिए आवश्यक प्रासंगिक डेटा की प्रोसेसिंग को दोहराता है - मेरे अनुभव में यह ज्यादातर काम करता है हालांकि अवसर पर यह नौकरी को पुनरारंभ करने के लिए तेज़ है तो इसे

+0

यदि कोई नोड विफल रहता है, तो स्पार्क इस नोड पर खोए गए आरडीडी विभाजनों को केवल 'पुनः संयोजित' करेगा, लेकिन 'पुनर्संरचना' प्रक्रिया में आवश्यक डेटा स्रोत कहां से आता है? क्या आपका मतलब है कि नोड विफल होने पर उसका मूल आरडीडी अभी भी वहां है? क्या होगा यदि आरडीडी ने कुछ विभाजन खो दिए हैं तो माता-पिता आरडीडी नहीं था? –

+0

स्पार्क आरडीडी के लिए वंशावली रखता है ताकि यह आवश्यकतानुसार पुनर्निर्माण करना जानता हो https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-rdd-lineage.html –

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