2010-04-13 13 views
14

मैं हाइव का उपयोग कर एक हडोप नौकरी चला रहा हूं वास्तव में uniq कई टेक्स्ट फ़ाइलों में लाइनों को माना जाता है। कम चरण में, यह प्रत्येक कुंजी के लिए सबसे हाल ही में टाइमस्टैम्प रिकॉर्ड चुनता है।हैडोप का उपयोग करके, क्या मेरे रेड्यूसर एक ही कुंजी के साथ सभी रिकॉर्ड प्राप्त करने की गारंटी रखते हैं?

क्या हैडोप गारंटी देता है कि एक ही कुंजी के साथ प्रत्येक रिकॉर्ड, मानचित्र चरण द्वारा आउटपुट, एक एकल reducer पर जाएगा, भले ही कई reducers एक समूह में चल रहे हैं?

मुझे चिंता है कि एक ही कुंजी के साथ रिकॉर्ड के सेट के बीच में शफल होने के बाद मैपर आउटपुट को विभाजित किया जा सकता है।

उत्तर

13

एक कुंजी के लिए सभी मान एक ही reducer को भेजे जाते हैं। अधिक चर्चा के लिए यह Yahoo! tutorial देखें।

यह व्यवहार विभाजनकर्ता द्वारा निर्धारित किया गया है, और यदि आप डिफ़ॉल्ट के अलावा किसी अन्य विभाजनकर्ता का उपयोग करते हैं तो यह सत्य नहीं हो सकता है।

+0

वास्तव में मुझे इस बारे में निश्चित नहीं है। Http://stackoverflow.com/questions/26693034/hadoop-strange-behaviour-reduce-function-doesnt-get-all-values-for-a-key देखें। मैंने अपने कार्यक्रम में विभाजनकर्ता को संशोधित नहीं किया। – Madrugada

3

हां, हैडोप गारंटी देता है कि सभी चाबियाँ एक ही रेड्यूसर पर जाएंगी। यह एक विभाजन फ़ंक्शन का उपयोग करके हासिल किया जाता है जो हैश फ़ंक्शन का उपयोग करके कुंजी को बाल्टी करता है।

विभाजन प्रक्रिया के बारे में अधिक जानकारी के लिए इस पर एक नज़र डालें: Partitioning Data

यह विशेष रूप से कैसे अलग मानचित्रकारों कि की प्रक्रिया एक ही कुंजी सुनिश्चित करना है कि किसी दिए गए मूल्य के सभी चाबियाँ एक ही विभाजन में समाप्त बारे में बात करती है, और इस प्रकार एक ही reducer द्वारा संसाधित कर रहे हैं।

5

वास्तव में, नहीं! getPartition कहलाते समय आप एक Partitioner बना सकते हैं जिसने एक ही कुंजी को एक अलग रेड्यूसर में भेजा है। यह आमतौर पर ज्यादातर अनुप्रयोगों के लिए एक अच्छा विचार नहीं है।