2013-10-10 3 views
6

मेरे पास बहुत सी छोटी फाइलें (औसत 30-40 एमबी प्रत्येक) द्वारा बनाई गई डेटासेट है। मैं MapReduce द्वारा उन पर विश्लेषण चलाने के लिए चाहता था लेकिन प्रत्येक नौकरी के साथ, मैपर फिर से फाइलें पढ़ेगा जो I/O प्रदर्शन (ओवरहेड्स इत्यादि) पर भारी भार बनाता है।हडोप मैपराइडस कई नौकरियों के लिए एक बार डेटा सेट पढ़ता है

मैं जानना चाहता था कि एक बार मैपर का उपयोग करना संभव है, अलग-अलग reducers के लिए विभिन्न अलग-अलग आउटपुट उत्सर्जित करें? जैसा कि मैंने चारों ओर देखा, मैंने देखा कि कई reducers संभव नहीं हैं, लेकिन केवल संभव चीज नौकरी चेनिंग है। हालांकि, मैं इन नौकरियों को समानांतर में चलाने के लिए, अनुक्रमिक रूप से नहीं चलाना चाहता, क्योंकि वे सभी एक ही डेटासेट को इनपुट के रूप में उपयोग करेंगे और विभिन्न विश्लेषण चलाएंगे। तो, सारांश में, बात मैं चाहता हूँ कुछ नीचे की तरह है:

 Reducer = Analytics1 
    /

मैपर - प्रसारण = Analytics2

 \ 
     Reducer = Analytics3 
       ... 

यह संभव है? या क्या आपके पास कामकाज के लिए कोई सुझाव है? कृपया मुझे कुछ सुझाव दे। इन छोटी फ़ाइलों को फिर से पढ़ना मेरे विश्लेषण के लिए एक विशाल ओवरहेड और प्रदर्शन में कमी बनाता है।

अग्रिम धन्यवाद!

संपादित करें: मैं यह उल्लेख करना भूल गया कि मैं यार्ड के साथ हैडोप v2.1.0-beta का उपयोग कर रहा हूं।

+0

आप अपने reducer (ओं) एक ही पास/नौकरी में सभी Analytics (1-3) कर सकते हैं। – cabad

+1

लेकिन प्रत्येक reducer विभिन्न इनपुट ले सकता है ( जोड़े)। तो केवल एक reducer में सभी विश्लेषिकी चलाना मेरे लिए काम नहीं करता है। मैपर को अलग-अलग reducers (एनालिटिक्स) के लिए अलग जोड़े उत्सर्जित करना चाहिए। इसके अलावा, अलग-अलग जोड़े के साथ, मैं शफल और सॉर्ट तंत्र से लाभ प्राप्त करने में सक्षम होना चाहता हूं जो कि reducers से पहले होता है। –

उत्तर

3

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

  1. अपने कम करने (रों) करना ही पास/नौकरी में सभी Analytics (1-3) है। संपादित करें: आपकी टिप्पणी से मैं देखता हूं कि यह विकल्प आपके लिए उपयोगी नहीं है, लेकिन मैं इसे भविष्य के संदर्भ के लिए यहां छोड़ रहा हूं, क्योंकि कुछ मामलों में ऐसा करना संभव है।
  2. MapReduce की तुलना में अधिक सामान्यीकृत मॉडल का उपयोग करें। उदाहरण के लिए, अपाचे तेज़ (अभी भी एक इनक्यूबेटर प्रोजेक्ट) आपके उपयोग के मामले के लिए उपयोग किया जा सकता है।

अपाचे तेज़ पर कुछ उपयोगी संदर्भ:

  • Research paper कि अपाचे यार्न और संबंधित परियोजनाओं, अपाचे तेज़ सहित वर्णन करता है।
  • Several blog posts तेज़ के मॉडल को समझाते हुए।

संपादित करें: जोड़ा निम्नलिखित के बारे में विकल्प 1:

तुम भी नक्शाकार कर सकता है एक प्रमुख जो करने के लिए एनालिटिक्स की प्रक्रिया उत्पादन करना है का संकेत उत्पन्न करते हैं। हैडोप स्वचालित रूप से इस कुंजी द्वारा रिकॉर्ड समूहित करेगा, और उन्हें सभी को एक ही reducer पर भेज देगा। मैपर द्वारा उत्पन्न मूल्य <k,v> रूप में एक टुपल होगा, जहां कुंजी (k) मूल कुंजी है जिसे आप उत्पन्न करना चाहते हैं। इस प्रकार, मैपर <k_analytics, <k,v>> रिकॉर्ड उत्पन्न करता है। रेड्यूसर में एक रेड्यूसर विधि होती है जो कुंजी को पढ़ती है, और कुंजी के आधार पर, उचित विश्लेषण विधि (आपके रेड्यूसर क्लास के भीतर) को कॉल करती है। यह दृष्टिकोण काम करेगा, लेकिन केवल तभी जब आपके reducers को बड़ी मात्रा में डेटा से निपटने की ज़रूरत नहीं है, क्योंकि आपको एनालिटिक्स प्रक्रिया करते समय इसे स्मृति (किसी सूची या हैशटेबल में) रखने की आवश्यकता होगी (<k,v> tuples उनकी कुंजी द्वारा क्रमबद्ध नहीं किया जाएगा)। यदि ऐसा कुछ नहीं है जो आपका रेड्यूसर संभाल सकता है, तो @ प्रवीण-कृपापति द्वारा सुझाए गए कस्टम विभाजनकर्ता का पता लगाने का विकल्प हो सकता है।

संपादित करें: जैसा कि @ जज-मानसिक द्वारा सुझाया गया है, मैपर्स को <<k_analytics, k>, value> जारी करके विकल्प 1 को और बेहतर किया जा सकता है; दूसरे शब्दों में, मान के बजाय कुंजी के एनालिटिक्स प्रकार भाग के भीतर कुंजी बनाएं, ताकि एक रेड्यूसर एक साथ समेकित एक विश्लेषिकी नौकरी के लिए सभी चाबियाँ प्राप्त कर सके और उन्हें बिना रखे मूल्यों पर स्ट्रीमिंग ऑपरेशन कर सके राम।

+0

मैं एक परियोजना के बीच में हूं और अब के लिए प्रौद्योगिकी को बदलना वास्तव में मुश्किल लगता है। क्या मूल हैडोप मैपरेडस के साथ ऐसा करने का कोई तरीका है? –

+0

मुझे ऐसा नहीं लगता है। हालांकि, यदि आप यार्न (हैडोप 0.23 या 2.x) का उपयोग कर रहे हैं, तो आप आसानी से तेज़ का उपयोग कर सकते हैं, क्योंकि यह यार्न के शीर्ष पर काम करता है। हैडोप ने मैपरेडस को डीकॉप्ल किया है ताकि मैड्रिडस अब यार्न के शीर्ष पर लागू हो, जैसा कि तेज़ और अन्य मॉडल हैं। – cabad

+2

मेरा मानना ​​है कि आपको अपने 1 के लिए मैपर से उत्सर्जित करना चाहिए। विकल्प << analytics_type, k_for_that_type>, v> है। आपका मैपर एक के बजाय 3 रिकॉर्ड लिखता है, और आप 3x के साथ कई समूहों के साथ समाप्त होते हैं, लेकिन आप कुंजी से बता सकते हैं कि किस एनालिटिक्स प्रकार से संबंधित है और इस प्रकार समूह पर चलाने के लिए किस प्रकार की कमी एल्गोरिदम (और कहां रखा जाए उत्पादन)। यह सब सादे पुराने मानचित्र के साथ किया जा सकता है। –

3

custom partitioner का उपयोग करके यह संभव हो सकता है। कस्टम विभाजनकर्ता कुंजी के आधार पर मैपर के आउटपुट को उपयुक्त reducer पर रीडायरेक्ट करेगा। तो, मैपर आउटपुट की कुंजी R1 * , R2 *, R3 *** होगी। इस दृष्टिकोण के पेशेवरों और विपक्ष को देखने की आवश्यकता है।

जैसा कि बताया गया है कि Tez वैकल्पिक विकल्प में से एक है, लेकिन यह अभी भी इनक्यूबेटर चरण के तहत है।

+0

मेरे कुछ एनालिटिक्स को पहले से ही एक समग्र कुंजी दृष्टिकोण की आवश्यकता है, इसलिए मैं इसे <(k1,k2), v> के रूप में उपयोग कर रहा हूं। कस्टम पार्टिशनर पहले से ही मेरे मामले में लागू किया गया है। क्या आगे के संयोजनों के लिए इस दृष्टिकोण को विस्तारित करना संभव है? मेरा डेटा बहुत बड़ा है इसलिए मैं सब कुछ रैम में रखना नहीं चाहता और इस तरह सौदा करता हूं। चूंकि मुझे समूह और सॉर्ट तंत्र की आवश्यकता थी, इसलिए मैंने शफल और सॉर्ट चरण के लिए समग्र कुंजी का उपयोग किया। –

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