मेरे पास स्पार्क पायथन एप्लिकेशन है जो स्मृति सीमा से अधिक के लिए यार्न द्वारा मारा जा रहा है। मेरे पास एक ऐसा कदम है जिसमें कुछ संसाधन लोड हो रहे हैं जो थोड़ा भारी (500+ एमबी) हैं, इसलिए मैं नक्शापार्टिशन का उपयोग कर रहा हूं। मूल रूप से:पायथन स्पार्क/यार्न मेमोरी उपयोग
त्रुटि YarnScheduler:
def process_and_output(partition):
resources = load_resources()
for record in partition:
yield transform_record(resources, record)
input = sc.textFile(input_location)
processed = input.mapPartitions(process_and_output)
processed.saveAsTextFile(output_location)
जब चल रहा है, मैं लगातार यह त्रुटि प्राप्त खोया निष्पादक 1 पर (पता निकाल दिया): कंटेनर स्मृति सीमाओं को पार करने यार्न के हाथों मारे गए। 11.4 जीबी की 11.2 जीबी भौतिक मेमोरी का इस्तेमाल किया गया। Spark.yarn.executor.memoryOverhead को बढ़ावा देने पर विचार करें।
मैंने मेमोरी को बढ़ाने की कोशिश की, बहुत ऊपर, लेकिन फिर भी एक ही मुद्दा। मैं इसके साथ भाग गया:
--conf "spark.python.worker.memory=1200m" \
--conf "spark.yarn.executor.memoryOverhead=5300" \
--conf "spark.executor.memory=6g" \
निश्चित रूप से, यह पर्याप्त स्मृति है?
मुझे लगता है कि आम तौर पर, मैं यह समझने के लिए संघर्ष कर रहा हूं कि पाइथन कार्यकर्ता की स्मृति को कुल मिलाकर कैसे नियंत्रित किया जाता है। क्या इसका कोई दस्तावेज है?
मैं यह भी समझना चाहूंगा कि जनरेटर फ़ंक्शन का उपयोग करना वास्तव में स्मृति उपयोग पर कटौती करेगा या नहीं। क्या यह पाइथन प्रक्रिया के माध्यम से डेटा स्ट्रीम करेगा (जैसे मैं उम्मीद कर रहा हूं) या क्या यह JVM/स्पार्क इंफ्रास्ट्रक्चर पर वापस भेजने से पहले इसे बफर करेगा?
प्यार इस व्याख्या का प्रयास करें। इसे वास्तविक रखने के लिए धन्यवाद। – deepelement
मेरी मदद की! धन्यवाद – g07kore