apache spark अपाचे स्पार्क एप्लिकेशन में शफल स्पिल को कैसे अनुकूलित करें



apache-spark spark-streaming (1)

मैं 2 श्रमिकों के साथ स्पार्क स्ट्रीमिंग एप्लिकेशन चला रहा हूं। आवेदन में एक जुड़ाव और एक संघ संचालन है।

सभी बैच सफलतापूर्वक पूरा कर रहे हैं लेकिन ध्यान दिया कि शफल स्पिल मेट्रिक्स इनपुट डेटा आकार या आउटपुट डेटा आकार (स्पिल मेमोरी 20 गुना से अधिक) के अनुरूप नहीं हैं।

कृपया नीचे दी गई छवि में स्पार्क चरण का विवरण पाएं:

इस पर शोध करने के बाद, पाया

शफल स्पिल तब होता है जब शफल डेटा के लिए पर्याप्त स्मृति नहीं होती है।

Shuffle spill (memory) - स्पिलिंग के समय स्मृति में डेटा के deserialized रूप का आकार

shuffle spill (disk) - स्पिलिंग के बाद डिस्क पर डेटा के क्रमबद्ध रूप का आकार

चूंकि deserialized डेटा serialized डेटा से अधिक जगह पर कब्जा कर लिया है। तो, शफल स्पिल (मेमोरी) अधिक है।

ध्यान दिया गया है कि इस स्पिल मेमोरी आकार बड़े इनपुट डेटा के साथ अविश्वसनीय रूप से बड़ा है

मेरे प्रश्न हैं:

क्या यह स्पिलिंग प्रदर्शन को काफी प्रभावित करता है?

स्मृति और डिस्क दोनों को इस स्पिलिंग को अनुकूलित करने के लिए कैसे करें?

क्या कोई स्पार्क गुण है जो इस विशाल स्पिलिंग को कम / नियंत्रित कर सकता है?


प्रदर्शन-ट्यून को सीखने के लिए स्पार्क को काफी जांच और सीखने की आवश्यकता होती है। इस वीडियो सहित कुछ अच्छे संसाधन हैं। स्पार्क 1.4 में इंटरफ़ेस में कुछ बेहतर निदान और विज़ुअलाइजेशन है जो आपकी मदद कर सकता है।

संक्षेप में, आप तब फैलते हैं जब चरण के अंत में आरडीडी विभाजन का आकार शफल बफर के लिए उपलब्ध स्मृति की मात्रा से अधिक हो जाता है।

आप ऐसा कर सकते हैं:

  1. मैन्युअल रूप से repartition() अपने पहले चरण ताकि आपके इनपुट से छोटे विभाजन हो।
  2. अपने निष्पादक प्रक्रियाओं में स्मृति को बढ़ाकर शफल बफर बढ़ाएं ( spark.executor.memory )
  3. 0.2 के डिफ़ॉल्ट से spark.shuffle.memoryFraction निष्पादक स्मृति ( spark.shuffle.memoryFraction ) के अंश को बढ़ाकर शफल बफर बढ़ाएं। आपको spark.storage.memoryFraction वापस देने की जरूरत है।
  4. कार्यकर्ता धागे ( SPARK_WORKER_CORES ) के निष्पादक स्मृति में अनुपात को कम करके प्रति थ्रेड शफल बफर बढ़ाएं

यदि कोई विशेषज्ञ सुन रहा है, तो मुझे यह जानना अच्छा लगेगा कि मेमोरी फ्रैक्शन सेटिंग्स कैसे इंटरैक्ट करते हैं और उनकी उचित सीमा कैसे होती है।





apache-spark-1.4