2015-06-30 8 views
5

में भारी डेटा पर ByKey स्पार्क में BeyKey कम चल रहा है।रन कम करें स्पाइक

val counts = textFile.flatMap(line => line.split(" ")).repartition(20000). 
       .map(word => (word, 1)) 
       .reduceByKey(_ + _, 10000) 
counts.saveAsTextFile("hdfs://...") 

लेकिन यह हमेशा स्मृति से बाहर चलाने के ...

मैं 50 सर्वर, सर्वर प्रति 35 निष्पादकों, सर्वर प्रति 140GB स्मृति का उपयोग हूँ: मेरा कार्यक्रम चिंगारी का सबसे सरल उदाहरण है।

दस्तावेज की मात्रा है: 8TB दस्तावेज़, 20 अरब दस्तावेज़, कुल मिलाकर 1000 बिलियन शब्द। और कम करने के बाद के शब्द लगभग 100 मिलियन होंगे।

मुझे आश्चर्य है कि स्पार्क की कॉन्फ़िगरेशन कैसे सेट करें?

मुझे आश्चर्य है कि इन मानकों को क्या मूल्य होना चाहिए?

1. the number of the maps ? 20000 for example? 
2. the number of the reduces ? 10000 for example? 
3. others parameters? 
+0

मैं आपकी मदद नहीं कर सकता। हालांकि क्या आपके प्रश्न के समाधान को ट्रैक करना संभव है? कुछ राशि और संख्या बहुत प्रभावशाली हैं। – sashaegorov

उत्तर

3

यदि आप लॉग पोस्ट यह मददगार होगा, लेकिन एक ही विकल्प विभाजन जब (जैसे sc.textFile(path, 200000)) के बजाय फिर से विभाजन को पढ़ने के बाद प्रारंभिक पाठ फ़ाइल में पढ़ने की एक बड़ी संख्या को निर्दिष्ट करने के लिए होगा। एक और महत्वपूर्ण बात यह सुनिश्चित करना है कि आपकी इनपुट फ़ाइल विभाजित हो (कुछ संपीड़न विकल्प इसे विभाजित नहीं करते हैं, और उस स्थिति में स्पार्क को ओओएम के कारण एक मशीन पर इसे पढ़ना पड़ सकता है)।

कुछ अन्य विकल्प हैं, क्योंकि आप किसी भी डेटा को कैश नहीं कर रहे हैं, स्मृति की मात्रा को कम कर देगा स्पार्क कैशिंग के लिए अलग हो रहा है (spark.storage.memoryFraction के साथ नियंत्रित), क्योंकि आप केवल तारों के tuples के साथ काम कर रहे हैं मैं org.apache.spark.serializer. KryoSerializer धारावाहिक का उपयोग करने की सलाह दूंगा।

+1

आपने उल्लेख किया है कि सुनिश्चित करें कि आपकी इनपुट फ़ाइल splittable_ है। मैं कैसे सुनिश्चित कर सकता हूं कि s3 पर मेरी .dat फ़ाइल विभाजित तालिका है? अगर मैं यह करने के लिए सही काम करता हूं तो मैं फोरम में एक अन्य प्रश्न पोस्ट कर सकता हूं। – sve

+0

शायद यह एक अच्छा अलग सवाल है। – Holden

+1

ने यहां एक प्रश्न पोस्ट किया [.gz बनाम flatfile] (http://stackoverflow.com/questions/37803668/spark-reading-gz-file-faster-than-flat-files-on-s3-flat-file-take- जिस तरह के लिए भी एल) – sve

0

क्या आपने partionner का उपयोग करने का प्रयास किया था, तो यह प्रति नोड की संख्या को कम करने में मदद कर सकता है, अगर हमें लगता है कि चाबियाँ औसत वजन 1ko में वजन करती हैं, तो यह 100 नोड्स के लिए विशेष रूप से स्मृति के 100 गोम का तात्पर्य है। विभाजन के साथ आप नोड की संख्या से प्रति नोड की संख्या को कम कर सकते हैं, तदनुसार प्रति नोड की आवश्यक मात्रा को कम कर सकते हैं। spark.storage.memoryFraction @Holden द्वारा उल्लिखित विकल्प भी एक महत्वपूर्ण कारक है।

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