2013-08-27 7 views
6

विभाजन यह निर्धारित करने की प्रक्रिया है कि कौन सा रेड्यूसर उदाहरण प्राप्त करेगा जो मध्यवर्ती कुंजी और मान प्राप्त करेगा। प्रत्येक मैपर को अपने सभी आउटपुट (कुंजी, वैल्यू) जोड़े के लिए निर्धारित करना होगा जो reducer उन्हें प्राप्त करेंगे। यह जरूरी है कि किसी भी कुंजी के लिए, चाहे मैपर उदाहरण किसने उत्पन्न किया हो, गंतव्य विभाजन एक ही समस्या है: हडूप इसे कैसे बनाता है? हैश फ़ंक्शन का उपयोग करें? डिफ़ॉल्ट कार्य क्या है?विभाजन! हडूप इसे कैसे बनाता है? हैश फ़ंक्शन का उपयोग करें? डिफ़ॉल्ट कार्य क्या है?

उत्तर

16

हैडोप में डिफ़ॉल्ट विभाजनकर्ता HashPartitioner है जिसमें getPartition नामक एक विधि है। यह key.hashCode() & Integer.MAX_VALUE लेता है और कार्यों को कम करने की संख्या का उपयोग करके मॉड्यूलस पाता है।

उदाहरण के लिए, यदि 10 कार्य कम करते हैं, तो getPartition सभी चाबियों के लिए 0 से 9 मान वापस कर देगा।

यहाँ कोड है:

public class HashPartitioner<K, V> extends Partitioner<K, V> { 
    public int getPartition(K key, V value, int numReduceTasks) { 
     return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
    } 
} 

एक कस्टम विभाजक बनाने के लिए, आप Partitioner का विस्तार, एक विधि getPartition बन जाएगा, तो ड्राइवर कोड (job.setPartitionerClass(CustomPartitioner.class);) में अपने विभाजक निर्धारित किया है। उदाहरण के लिए, माध्यमिक प्रकार के संचालन करते समय यह विशेष रूप से सहायक होता है।

+1

समझ गया! धन्यवाद! –

+0

@tommy_o कैसे प्राप्त होता है पार्टिशन (..) विधि कहा जाता है? इस विधि को क्या कहते हैं? इस विधि को कहां कॉल करें? –

+0

@ बुरककारासोय जब आप एमआर जॉब गुणों को कॉन्फ़िगर करने के लिए जॉब ऑब्जेक्ट बनाते हैं, तो यह आपको उपरोक्त लेखक द्वारा निर्दिष्ट अनुसार कस्टमपार्टिशनर घोषित करने का एक तरीका प्रदान करेगा। नक्शा कार्य पूरा होने के बाद यह कस्टम विभाजनकर्ता आंतरिक रूप से एमआर ढांचे में आक्रमण करता है और डिस्क –

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