Hadoop एक पुस्तकालय http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/KeyFieldBasedPartitioner.html
अपने स्ट्रीमिंग का नौकरी के लिए विभाजक के रूप में अपने काम के प्रक्षेपण में एक विकल्प के रूप में इस का उपयोग करके आप कुंजी/मान जोड़े में अपने नक्शाकार उत्पादन तोड़ने के लिए और चाबी टुकड़ों में बांटा पाने की अनुमति देता है KeyFieldBasedPartitioner कहा जाता है एक साथ एक ही कम करने के लिए जा रहा और मूल्यों http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#More+Usage+Examples
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D mapreduce.map.output.key.field.separator=. \
-D mapreduce.partition.keypartitioner.options=-k1,2 \
-D mapreduce.job.reduces=12 \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
यहाँ, डी stream.map.output.field.separator = सहित छँटाई। और -D stream.num.map.output.key.fields = 4 को यहां बताया गया है http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#Customizing+How+Lines+are+Split+into+Key%2FValue+Pairs मूल रूप से वे हैं कि आपने कुंजी/मूल्य जोड़े को परिभाषित करने के लिए अपने मैपर फ़ील्ड को कैसे आउटपुट किया है।
उपरोक्त MapReduce नौकरी के मानचित्र आउटपुट कुंजियों में आम तौर पर चार फ़ील्ड "।" से अलग होते हैं। हालांकि, MapReduce ढांचे -D mapreduce.partition.keypartitioner.options = -k1,2 विकल्प का उपयोग कर कुंजी के पहले दो फ़ील्ड द्वारा मानचित्र आउटपुट को विभाजित करेगा। यहां, -D mapreduce.map.output.key.field.separator =। विभाजन के लिए विभाजक निर्दिष्ट करता है। यह गारंटी देता है कि कुंजी में पहले दो फ़ील्ड वाले सभी कुंजी/मान जोड़े को एक ही reducer में विभाजित किया जाएगा।
यह प्रभावी रूप से पहले दो फ़ील्ड को प्राथमिक कुंजी और अगले दो फ़ील्ड माध्यमिक के रूप में निर्दिष्ट करने के बराबर है। विभाजन के लिए प्राथमिक कुंजी का उपयोग किया जाता है, और प्राथमिक और माध्यमिक कुंजी के संयोजन को सॉर्ट करने के लिए उपयोग किया जाता है।
शामिल होने के लिए यह आपके मैपर से फ़ील्ड्स को आउटपुट करने और कुंजी और रेड्यूसर वाले फ़ील्ड के लिए आपके कॉन्फ़िगरेशन लॉन्च पर विकल्पों को सेट करने के समान सरल होगा, आपके सभी मूल्य उचित रूप से कुंजी से जुड़ जाएंगे । यदि आप एकाधिक स्रोतों से डेटा लेना चाहते हैं तो कमांड लाइन पर अधिक-इनपुट जोड़ना जारी रखें ... यदि वे अलग-अलग इनपुट लंबाई हैं तो आपके मैपर में आप इसे पहचान सकते हैं और मैपर से मानक प्रारूप आउटपुट बना सकते हैं।
स्रोत
2010-11-15 01:08:31