मैं Hadoop का उपयोग कर रहा किए जाने वाले बहुत असमान वितरण का विश्लेषण करने के लिए। कुछ कुंजियों में हजारों मूल्य होते हैं, लेकिन अधिकांश में केवल एक ही होता है। उदाहरण के लिए, आईपी पते से जुड़े नेटवर्क यातायात में कुछ बात करने वाले आईपी से जुड़े कई पैकेट होंगे और अधिकांश आईपी के साथ कुछ ही होंगे। यह कहने का एक और तरीका यह है कि Gini index बहुत अधिक है।हाडोप मानचित्र-घटाएं, विभाजन के पहले और विभाजन के बाद किसी वर्ग में कुंजियों की पूरी सूची दिखाई देती है?
कुशलता से इस संसाधन के लिए, प्रत्येक कम करने या तो कुछ उच्च मात्रा चाबी या कम मात्रा चाबियों का एक बहुत कुछ मिलना चाहिए के रूप में इस तरह से, लगभग एक समान लोड पाने के लिए। मुझे पता है कि अगर मैं विभाजन प्रक्रिया लिख रहा था तो मैं यह कैसे करूं: मैं keys
(सभी डुप्लिकेट कुंजी सहित) की क्रमबद्ध सूची लेता हूं जो मैपर्स द्वारा उत्पादित किया गया था और साथ ही रेड्यूसर N
की संख्या और
split[i] = keys[floor(i*len(keys)/N)]
प्रसारण i
कुंजी k
ऐसी है कि split[i] <= k < split[i+1]
0 <= i < N-1
के लिए और split[i] <= k
i == N-1
के लिए मिलेगा।
मैं जावा में अपना खुद का विभाजन करने के लिए तैयार हूं, लेकिन Partitioner<KEY,VALUE> कक्षा में केवल एक ही समय में एक कुंजी-मूल्य रिकॉर्ड तक पहुंच नहीं है, पूरी सूची में। मुझे पता है कि हैडोप मैपर्स द्वारा बनाए गए रिकॉर्ड टाइप करता है, इसलिए यह सूची कहीं मौजूद होनी चाहिए। इसे कई विभाजक नोड्स के बीच वितरित किया जा सकता है, इस मामले में मैं उपन्यासकारों में से एक पर विभाजन प्रक्रिया करूँगा और किसी भी तरह से अन्य सभी विभाजन नोड्स को परिणाम संवाद दूंगा। (यह मानते हुए कि चुने हुए विभाजक नोड एक यादृच्छिक सबसेट को देखता है, परिणाम अभी भी लगभग लोड-संतुलित किया जाएगा।) किसी को भी पता है जहां चाबियों का क्रमबद्ध सूची संग्रहीत किया जाता है, और यह कैसे उपयोग करने के लिए?
मैं दो नक्शा-कम नौकरियां लिखना नहीं चाहता, एक विभाजन को खोजने के लिए और दूसरा वास्तव में उनका उपयोग करने के लिए, क्योंकि यह अपमानजनक लगता है। (मैपर्स को दो बार एक ही काम करना होगा।) यह एक सामान्य समस्या की तरह लगता है: असमान वितरण बहुत आम हैं।