2016-06-24 15 views
9

मेरे पास स्पार्क पायथन एप्लिकेशन है जो स्मृति सीमा से अधिक के लिए यार्न द्वारा मारा जा रहा है। मेरे पास एक ऐसा कदम है जिसमें कुछ संसाधन लोड हो रहे हैं जो थोड़ा भारी (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/स्पार्क इंफ्रास्ट्रक्चर पर वापस भेजने से पहले इसे बफर करेगा?

उत्तर

3

जैसा कि आप देखते हैं 11.2 जीबी यार्न द्वारा बनाए गए कंटेनर के लिए आपकी अधिकतम मेमोरी है। यह निष्पादक स्मृति + ओवरहेड के बराबर है। तो इसके लिए अजगर स्मृति की गणना नहीं की जाती है।

अपवाद चाहता है कि आप ओवरहेड बढ़ाएं लेकिन आप केवल ओवरहेडमेमरी के बिना निष्पादक-स्मृति को बढ़ा सकते हैं। मैं यह जानकर बिना कह सकता हूं कि आपको एक निष्पादक में इतनी मेमोरी क्यों चाहिए, एक कार्टेसियन हो सकता है या ऐसा कुछ भी स्मृति की आवश्यकता हो सकती है।

5

यार्न निष्पादकों को मारता है जब उसके

memory usage > (executor-memory + executor.memoryOverhead)

अपने स्थापना के ऐसा लगता है कि यह एक वैध अपवाद नहीं है से।

(memory usage)11.4GB > 11.18GB (executor-memory=6GB + memoryOverhead=5.18GB)

साथ

--conf "spark.yarn.executor.memoryOverhead=6144"

+0

प्यार इस व्याख्या का प्रयास करें। इसे वास्तविक रखने के लिए धन्यवाद। – deepelement

+0

मेरी मदद की! धन्यवाद – g07kore

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