2015-11-13 6 views
5

से कॉल करना मैं स्थानीय मोड में पाइस्पार्क 1.5 का उपयोग कर अपने 4 कोर 16 जीबी मशीन पर सभी 3 मिलियन रिकॉर्ड x 15 कॉलम पर वर्कफ़्लो चला रहा हूं। मैंने देखा है कि यदि मैं स्पार्क को पुनरारंभ करने के बिना फिर से वही वर्कफ़्लो चलाता हूं, तो स्मृति समाप्त हो जाती है और मुझे मेमोरी अपवादों से बाहर निकलता है।मैन्युअल रूप से स्पार्क के कचरा संग्रह को pyspark

चूंकि मेरे सभी कैश लगभग 1 जीबी तक हैं, मैंने सोचा कि समस्या कचरा संग्रह में निहित है। मैं पाइथन कचरा कलेक्टर मैन्युअल रूप से कॉल करके चला सकता था:

import gc 
collected = gc.collect() 
print "Garbage collector: collected %d objects." % collected 

इससे थोड़ा सा मदद मिली है।

मैंने article के अनुसार स्पार्क के जीसी की सेटिंग्स के साथ खेला है, और आरडीडी को संपीड़ित करने और सीरियलाइज़र को Kyro में बदलने की कोशिश की है। इसने प्रसंस्करण को धीमा कर दिया था और स्मृति के साथ बहुत मदद नहीं की थी।

चूंकि मुझे पता है कि जब मेरे पास जीसी कॉल करने के लिए अतिरिक्त सीपीयू चक्र हैं, तो यह मेरी स्थिति को यह जानने में मदद कर सकता है कि इसे JVM में मैन्युअल रूप से कैसे कॉल करें।

उत्तर

0

आपको मैन्युअल रूप से जीसी को कॉल करने की आवश्यकता नहीं है। यदि आपके पास OOMException था तो ऐसा इसलिए है क्योंकि अब कोई स्मृति उपलब्ध नहीं है। आपको मेमोरी लीक, उर्फ ​​संदर्भों को देखना चाहिए जो आप अपने कोड में रखते हैं। यदि आप इस संदर्भ को जारी करते हैं तो JVM आवश्यक होने पर खाली स्थान देगा।

+0

हां मैंने इसे कई बार पढ़ा है लेकिन मुझे अभी भी लगता है कि मेरा मामला कई कारणों से मैन्युअल जीसी के लिए योग्य है: ए। पाइथन जीसी को कॉल करना फायदेमंद था क्योंकि यह उनके आकार के बजाय कचरा वस्तुओं की संख्या को मानता है, बी। मेरे आवेदन की प्रकृति में ऐसे चरण शामिल हैं जहां उपयोगकर्ता निर्णय के इंतजार के दौरान कोई गणना नहीं होती है, और सी। अगर मुझे कुछ मेमोरी-गहन पायथन कार्यक्षमता या पूरी तरह से अलग एप्लिकेशन चलाने की ज़रूरत है तो क्या होगा? मुझे संदेह है कि JVM जीसी उस – architectonic

+0

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

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