कार्यान्वयन के लिए एक सर्वोत्तम अभ्यास की आवश्यकता है। ऑपरेटिंग वातावरण इस प्रकार है:यार्न पर अपाचे स्पार्क: बड़ी मात्रा में इनपुट डेटा फ़ाइलों (स्पार्क में एकाधिक इनपुट फाइलों को गठबंधन करें)
- लॉग डेटा फ़ाइल अनियमित आता है।
- लॉग डेटा फ़ाइल का आकार 3.9 केबी से 8.5 एमबी तक है। औसत लगभग 1 एमबी है।
- डेटा फ़ाइल के रिकॉर्ड की संख्या 13 लाइनों से 22000 लाइनों तक है। औसत 2700 लाइनें है।
- डेटा फ़ाइल को एकत्रीकरण से पहले पोस्ट-प्रोसेस किया जाना चाहिए।
- पोस्ट-प्रोसेसिंग एल्गोरिदम बदला जा सकता है।
- पोस्ट-प्रोसेस की गई फ़ाइल को मूल डेटा फ़ाइल के साथ अलग से प्रबंधित किया जाता है, क्योंकि पोस्ट-प्रोसेसिंग एल्गोरिदम बदला जा सकता है।
- दैनिक एकत्रीकरण किया जाता है। सभी पोस्ट-प्रोसेस की गई डेटा फ़ाइल को रिकॉर्ड-दर-रिकॉर्ड और एकत्रीकरण (औसत, अधिकतम न्यूनतम ...) फ़िल्टर किया जाना चाहिए।
- चूंकि एकत्रीकरण ठीक है, इसलिए एकत्रीकरण के बाद रिकॉर्ड्स की संख्या इतनी छोटी नहीं है। यह मूल रिकॉर्ड की संख्या का आधा हिस्सा हो सकता है।
- एक बिंदु पर, के बाद संसाधित फ़ाइल की संख्या 200,000 के बारे में हो सकता है।
- एक डेटा फ़ाइल को व्यक्तिगत रूप से हटाया जा सकता है।
एक परीक्षण में, मैं 160,000 के बाद संसाधित ग्लोब पथ के साथ() sc.textFile के साथ शुरू स्पार्क द्वारा फ़ाइलों को प्रोसेस करने की कोशिश की, यह चालक की प्रक्रिया पर OutOfMemory अपवाद के साथ विफल रहा है।
इस तरह के डेटा को संभालने का सबसे अच्छा अभ्यास क्या है? क्या मुझे पोस्ट-प्रोसेस किए गए डेटा को सहेजने के लिए सादे फाइलों के बजाय एचबीएएस का उपयोग करना चाहिए?
पर 8000 का उपयोग किया, इसे साझा करने के लिए धन्यवाद। मुझे लगता है कि आकार तर्क विशेष रूप से मूल्यवान है, क्योंकि इसे coalesce() पर निर्दिष्ट नहीं किया जा सकता है। – zeodtr
यह समाधान coalesce से बेहतर है क्योंकि यह मानचित्र चरण पर काम करता है, लेकिन बाद में coalesce। –
चूंकि अब हैपॉप CombineTextInputFormat (कम से कम 2.2 से) का समर्थन करता है, छोटे इनपुट फ़ाइलों को संयोजित करने के साथ sc.newAPIHadoopFile() के साथ किया जा सकता है, कस्टम क्लास को लागू किए बिना। – zeodtr