2010-11-13 5 views
11

मैं निम्न स्वरूपों में दो फ़ाइलें,:आप हडोप स्ट्रीमिंग के साथ "जॉइन" करने का सुझाव कैसे देंगे?

field1, field2, field3 
field4, field1, field5 

एक अलग क्षेत्र संख्या एक अलग अर्थ इंगित करता है।

मैं आपसी क्षेत्र (उपरोक्त उदाहरण में field1) के आधार पर Hadoop स्ट्रीमिंग का उपयोग कर दो फ़ाइलों में शामिल करना चाहते तो उत्पादन field1, field2, field3, field4, field5 हो जाएगा (अन्य orderings साथ वे सभी क्षेत्रों है के रूप में के रूप में ठीक कर रहे हैं)।

उत्तर

6

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 में विभाजित किया जाएगा।

यह प्रभावी रूप से पहले दो फ़ील्ड को प्राथमिक कुंजी और अगले दो फ़ील्ड माध्यमिक के रूप में निर्दिष्ट करने के बराबर है। विभाजन के लिए प्राथमिक कुंजी का उपयोग किया जाता है, और प्राथमिक और माध्यमिक कुंजी के संयोजन को सॉर्ट करने के लिए उपयोग किया जाता है।

शामिल होने के लिए यह आपके मैपर से फ़ील्ड्स को आउटपुट करने और कुंजी और रेड्यूसर वाले फ़ील्ड के लिए आपके कॉन्फ़िगरेशन लॉन्च पर विकल्पों को सेट करने के समान सरल होगा, आपके सभी मूल्य उचित रूप से कुंजी से जुड़ जाएंगे । यदि आप एकाधिक स्रोतों से डेटा लेना चाहते हैं तो कमांड लाइन पर अधिक-इनपुट जोड़ना जारी रखें ... यदि वे अलग-अलग इनपुट लंबाई हैं तो आपके मैपर में आप इसे पहचान सकते हैं और मैपर से मानक प्रारूप आउटपुट बना सकते हैं।

0

Cascading फ़ील्ड द्वारा फ़िल्टरिंग, जुड़ने और समूह करने के लिए उपयोगी सार तत्व प्रदान करता है। https://stackoverflow.com/questions/4626356 कैस्केडिंग में हडोप स्ट्रीमिंग का उपयोग करने के तरीके के सहायक उदाहरण के लिए लिंक।

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