2012-08-22 32 views
6

मैं अपने सभी reducers को एक विशिष्ट रिकॉर्ड कैसे भेज सकता हूं?हैडोप सभी रेड्यूसर को रिकॉर्ड भेजता है

मुझे पार्टिशनर क्लास पता है और यह क्या करता है, लेकिन मुझे यह सुनिश्चित करने का कोई आसान तरीका नहीं दिख रहा है कि रिकॉर्ड सभी रेड्यूसर पर जाता है।

असल में, विभाजनर इस विधि है:

int getPartition(K2 key, 
      V2 value, 
      int numPartitions) 

मेरा पहला विचार विभाजनर और मैपर के लिए सहयोग इस प्रकार थी: मैपर रिकॉर्ड को कम की संख्या के बराबर कई बार outputting रहता है कार्य और विभाजनकर्ता सभी सब्स (0 से numPartitions-1 तक) देता है, इस तरह यह सुनिश्चित करना कि रिकॉर्ड सभी विभाजन तक पहुंचता है।

क्या इसे हल करने के किसी अन्य, स्मार्ट तरीके हैं? उदाहरण के लिए मैं उन अभिलेखों के लिए -1 लौटाता हूं जिन्हें मुझे सभी विभाजनों में भेजा जाना चाहिए और फ्रेमवर्क मेरे लिए लौटाता है जब यह लौटा -1 देखता है।

उत्तर

5

विभाजनकर्ता इस तरह से काम नहीं करता है। इसका काम यह निर्धारित करने के लिए कुंजी (आमतौर पर) और मूल्य (शायद ही कभी) को देखना है कि जोड़ी को किस रेड्यूसर को भेजा जाना चाहिए। यह मैपर के बाद और reducer से पहले होता है।

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

वैसे, इसका मतलब यह है कि यदि आप इस तकनीक का उपयोग गणना (यदि आप सॉर्ट कर रहे हैं) या प्रसंस्करण में बाद में उपयोग किए जाने वाले अन्य मेटाडेटा का उपयोग कर रहे हैं तो आपकी वास्तविक डेटा कुंजी को एक ही समग्र का पालन करना होगा प्रारूप। असल में, आपको शायद समग्र कुंजी में शामिल करना होगा जो कि एक कुंजी/मूल्य जोड़ी है (उदाहरण के लिए 1 = वास्तविक डेटा, 0 = प्रसंस्करण मेटाडेटा) का वर्णन करने वाला एक सूचक।

+0

मुझे आपको जिस समूह की तुलना करने की आवश्यकता है, उसके संबंध में मुझे यह उत्तर अपडेट करने की भी आवश्यकता है। –

+0

इस तरह मैं भी सोच रहा था। मैंने इसे बहुत स्पष्ट रूप से वर्णित नहीं किया और मैं पार्टिशनर ऑब्जेक्ट में काउंटर रखने का भी विचार कर रहा था ताकि यह पता चल सके कि अगला विभाजन क्या है। हालांकि, मुझे यकीन नहीं है कि यह एक समाधान है क्योंकि पार्टिशनर ऑब्जेक्ट जीसी-एड और काउंटर रीसेट हो सकता है। ग्रुपिंग तुलनित्र के बारे में, मुझे लगता है कि यह मेरी आवश्यकताओं पर निर्भर करता है जिसका मैंने वर्णन नहीं किया था। यदि आवश्यक हो तो मैं वापस आऊंगा। धन्यवाद! – Razvan