2016-11-22 26 views
10

हम सभी जानते हैं कि स्पार्क स्मृति में गणना करता है। मैं अनुवर्ती पर उत्सुक हूँ।स्पार्क आरडीडी - हमेशा राम में विभाजन है?

  1. अगर मैं HDFS से मेरी pySpark खोल में 10 RDD बनाते हैं, तो इसका मतलब यह है कि इन सभी 10 RDD डेटा पर स्पार्क श्रमिक मेमोरी निवास करेंगे?

  2. यदि मैं RDD हटा नहीं पाता, तो क्या यह हमेशा के लिए स्मृति में होगा?

  3. यदि मेरा डेटासेट (फ़ाइल) आकार उपलब्ध RAM आकार से अधिक है, तो डेटा कहां संग्रहीत किया जाएगा?

+0

स्मृति में इसका मतलब है हाँ इसकी रैम। आरडीडी आलसी हैं। आरडीडी पर 2 ऑपरेशन हैं जिन्हें ट्रांसफॉर्मेशन और एक्शन कहा जाता है जब तक कि कार्रवाई (पूर्व: गिनती के लिए) नहीं कहा जाता है, वे कार्य नहीं करेंगे और गणना करेंगे। नौकरी शुरू करते समय हम स्पार्क-सबमिट या किसी अन्य तरीके से मेमोरी आवंटित करेंगे (जो रैम में एक्जिक्यूटर्स मेमोरी है)। [इस] की सिफारिश करेंगे (https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm) –

उत्तर

15

अगर मैं HDFS से मेरी pySpark खोल में 10 RDD बनाते हैं, तो इसका मतलब यह है कि इन सभी 10 RDD डेटा स्पार्क मेमोरी पर निवास करेंगे?

हाँ, सभी 10 RDDs डेटा चिंगारी कार्यकर्ता मशीनों में फैल जाएगा राम। लेकिन सभी मशीनों के लिए आवश्यक नहीं है प्रत्येक आरडीडी का एक विभाजन होना चाहिए। निश्चित रूप से आरडीडी में केवल स्मृति में डेटा होगा यदि इस पर कोई कार्रवाई की गई है क्योंकि इसका आलसी मूल्यांकन किया गया है।

यदि मैं आरडीडी नहीं हटाता, तो क्या यह हमेशा के लिए स्मृति में होगा?

स्पार्क स्वचालित रूप से RDD या Dataframe unpersist अगर वे उपयोग नहीं किया जाता। यह जानने के लिए कि क्या आरडीडी या डेटाफ्रेम कैश किया गया है, आप स्पार्क यूआई -> स्टोरेज टेबल में जा सकते हैं और मेमोरी विवरण देख सकते हैं। df या स्मृति से तालिकाओं को हटाने के लिए आप df.unpersist() या sqlContext.uncacheTable("sparktable") का उपयोग कर सकते हैं। link to read more

मेरी डाटासेट आकार उपलब्ध रैम आकार से अधिक है, जहां संग्रहीत करने के लिए डेटा होगा?

RDD स्मृति में फिट नहीं करता है, कुछ विभाजन कैश नहीं किया जाएगा और मक्खी पर हर बार की पुनर्गणना की जाएगी, जब वे आवश्यकता हो। link to read more

हम कह रहे हैं, तो पहले से ही RDD रैम में है, जिसका अर्थ यह स्मृति में है, (जारी रहती है की जरूरत) क्या है? --As टिप्पणी प्रति

आपके प्रश्न का उत्तर करने के लिए, जब किसी भी कार्रवाई RDD पर शुरू हो रहा है और अगर है कि कार्रवाई स्मृति नहीं मिल सकता है, यह uncached/unpersisted RDDs निकाल सकते हैं।

सामान्य तौर पर, हम RDD जो गणना के एक बहुत जरूरत है दृढ़ रहना या/और फेरबदल (डिफ़ॉल्ट रूप से चिंगारी RDDs फेरबदल जारी रहती है महंगा नेटवर्क से बचने के लिए मैं/हे), ताकि जब किसी भी कार्रवाई RDD कायम पर प्रदर्शन किया, बस यह वंशावली ग्राफ, check RDD persistence levels here के अनुसार इसे शुरू से फिर से कंप्यूटिंग करने के बजाए उस क्रिया को निष्पादित करेगा।

+0

बेहतर दिखता है। आपको उल्लेख करना चाहिए कि किसी भी समय सभी डेटा को स्मृति में रखना आवश्यक नहीं है। –

+0

@mrsrinivas - "हां, सभी 10 आरडीडी डेटा स्पार्क वर्कर मशीन रैम में फैल जाएंगे।" (एक कार्रवाई करने के बाद) - अगर ऐसा है, तो हमें लगातार आरडीडी को लगातार() या कैश() तरीकों पर? – Dipankar

+1

हम अगले चरण में सीपीयू/मेमोरी/आईओ गहन संचालन/नौकरियों को फिर से करने से बचने के लिए rdds को रोक/कैश करते हैं। आपकी प्रतिक्रिया के लिए – mrsrinivas

6

अगर मैं अपने पीस्पार्क खोल में 10 आरडीडी बनाता हूं, तो क्या इसका मतलब यह है कि इन सभी 10 आरडीडी डेटा स्पार्क मेमोरी पर रहेंगे?

उत्तर: आरडीडी में केवल "वंशावली ग्राफ" (लागू परिवर्तन) शामिल है। तो, आरडीडी डेटा नहीं है !!! जब भी हम आरडीडी पर कोई कार्रवाई करते हैं, तो सभी परिवर्तन क्रिया से पहले लागू होते हैं। तो अगर स्पष्ट रूप से नहीं (निश्चित रूप से कुछ अनुकूलन हैं जो पूरी तरह से कैश करते हैं) कैश किए जाते हैं, प्रत्येक बार एक क्रिया पूरी निष्पादन की जाती है और कार्रवाई फिर से की जाती है !!!

E.g - यदि आप एचडीएफएस से आरडीडी बनाते हैं, तो कुछ परिवर्तन लागू करें और परिवर्तित आरडीडी पर 2 क्रियाएं करें, एचडीएफएस पढ़ने और परिवर्तन दो बार निष्पादित किए जाएंगे !!!

तो, यदि आप पुनः गणना से बचना चाहते हैं, तो आपको आरडीडी जारी रखना होगा। बने रहने के लिए आपके पास हेप, ऑफ-हीप, डिस्क पर एक या अधिक के संयोजन की पसंद है।

यदि मैं आरडीडी नहीं हटाता, तो क्या यह हमेशा के लिए स्मृति में होगा?

उत्तर: आरडीडी को ध्यान में रखते हुए सिर्फ "वंशावली ग्राफ" है, यह होस्टिंग भाषा के समान दायरे और आजीवन नियम का पालन करेगा। लेकिन अगर आप पहले ही गणना किए गए परिणाम को जारी रखते हैं, तो आप असंतोष कर सकते हैं !!!

यदि मेरा डेटासेट आकार उपलब्ध राम आकार से अधिक है, तो डेटा कहां संग्रहीत किया जाएगा?

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

+0

मान लीजिए कि केवल एक एचडीएफएस पढ़ें, परिवर्तन और कार्रवाई की जानी चाहिए और यदि डेटासेट की गणना की जा सकती है तो रैम के आकार के तीन गुणा होते हैं, आरपीडी विभाजन में डेटा स्पार्क गणना के लिए स्मृति में कैसे लोड किया जाता है? – Kannan

+0

एक कार्यकर्ता को डेटा को संसाधित करने के लिए आवश्यक एकल विभाजन के डेटा और बफर को पकड़ने के लिए बफर होना चाहिए, अन्यथा कार्यकर्ता दुर्घटनाग्रस्त हो जाएगा !!! विभाजन रणनीति को इसे ध्यान में रखना है !!! स्पष्टीकरण के लिए – rakesh

+0

धन्यवाद राकेश। तो, बफर का आकार कम से कम एक विभाजन आकार से अधिक होना चाहिए। क्या कोई लिंक है जो मुझे इस पर अधिक जानकारी देता है? एक बार फिर से धन्यवाद। – Kannan

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