2012-08-24 18 views
7

मैं 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] <= ki == N-1 के लिए मिलेगा।

मैं जावा में अपना खुद का विभाजन करने के लिए तैयार हूं, लेकिन Partitioner<KEY,VALUE> कक्षा में केवल एक ही समय में एक कुंजी-मूल्य रिकॉर्ड तक पहुंच नहीं है, पूरी सूची में। मुझे पता है कि हैडोप मैपर्स द्वारा बनाए गए रिकॉर्ड टाइप करता है, इसलिए यह सूची कहीं मौजूद होनी चाहिए। इसे कई विभाजक नोड्स के बीच वितरित किया जा सकता है, इस मामले में मैं उपन्यासकारों में से एक पर विभाजन प्रक्रिया करूँगा और किसी भी तरह से अन्य सभी विभाजन नोड्स को परिणाम संवाद दूंगा। (यह मानते हुए कि चुने हुए विभाजक नोड एक यादृच्छिक सबसेट को देखता है, परिणाम अभी भी लगभग लोड-संतुलित किया जाएगा।) किसी को भी पता है जहां चाबियों का क्रमबद्ध सूची संग्रहीत किया जाता है, और यह कैसे उपयोग करने के लिए?

मैं दो नक्शा-कम नौकरियां लिखना नहीं चाहता, एक विभाजन को खोजने के लिए और दूसरा वास्तव में उनका उपयोग करने के लिए, क्योंकि यह अपमानजनक लगता है। (मैपर्स को दो बार एक ही काम करना होगा।) यह एक सामान्य समस्या की तरह लगता है: असमान वितरण बहुत आम हैं।

उत्तर

1

मेरी समझ का सबसे अच्छा में - वहाँ एमआर प्रसंस्करण में कोई भी जगह है जहां सभी कुंजी मौजूद नहीं है है। इसके बाद - इस बात की कोई गारंटी नहीं है कि एकल मशीन इस डेटा को स्टोर कर सकती है। मुझे लगता है कि इस समस्या में मौजूदा एमआर ढांचे में आदर्श समाधान नहीं है। मुझे ऐसा लगता है क्योंकि आदर्श समाधान है - हमें अंतिम मैपर के अंत की प्रतीक्षा करनी है और केवल तभी इस ज्ञान के साथ कुंजी वितरण और पैरामीट्रिज विभाजनकर्ता का विश्लेषण करना है।
यह दृष्टिकोण काफी प्रणाली को जटिल और विलंबता बढ़ा देंगे।
मैं अच्छा सन्निकटन डेटा कुंजी वितरण के विचार प्राप्त करने के लिए और फिर इसे के अनुसार काम करने partiotioner बनाने से अधिक यादृच्छिक नमूना करने के लिए हो सकता है लगता है।
जहां तक ​​मैं समझता हूं कि टेरासोर्ट कार्यान्वयन कुछ ऐसा ही कर रहा है: http://sortbenchmark.org/YahooHadoop.pdf

2

मैं भी इस समस्या के बारे में सोच रहा हूं। अगर कोई मुझे मजबूर करता है तो यह उच्च स्तर का दृष्टिकोण होगा।

  • नक्शाकार तर्क आप जगह में अपने व्यापार समस्या को हल करने के अलावा, कोड कुछ तर्क इकट्ठा करने के लिए जो कुछ भी आंकड़े आप विभाजनर में की आवश्यकता होगी एक संतुलित ढंग से कुंजी-मान जोड़ों वितरित करने के लिए। बेशक, प्रत्येक मैपर केवल कुछ डेटा देखेंगे।
  • प्रत्येक मैपर अपनी कार्य आईडी ढूंढ सकता है और एकत्रित आंकड़ों को पकड़ने के लिए निर्दिष्ट एचडीएफएस फ़ोल्डर में एक अद्वितीय फ़ाइल नाम बनाने के लिए उस आईडी का उपयोग कर सकता है। इस फ़ाइल को क्लीनअप() विधि में लिखें जो कार्य के अंत में चलता है।
  • निर्दिष्ट एचडीएफएस निर्देशिका में सभी फ़ाइलों को पढ़ने के लिए विभाजनकर्ता में आलसी प्रारंभिक उपयोग करें। यह आपको मैपर चरण के दौरान एकत्रित सभी आंकड़े प्राप्त करता है। वहां से आपको डेटा को सही तरीके से विभाजित करने के लिए आवश्यक विभाजन तर्क को कार्यान्वित करने के साथ छोड़ दिया गया है।

यह सब मानते हैं कि सभी मैपर समाप्त होने तक विभाजनकर्ता को तब तक नहीं बुलाया जाता है, लेकिन यह सबसे अच्छा है कि मैं अब तक ऐसा करने में सक्षम हूं।

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