Hadoop MapReduce जॉइन और काउंटर उदाहरण के साथ

मैपरीड्यूस में जॉइन क्या है?

मैपरीड्यूस जॉइन ऑपरेशन का उपयोग दो बड़े डेटासेट को संयोजित करने के लिए किया जाता है। हालाँकि, इस प्रक्रिया में वास्तविक जॉइन ऑपरेशन करने के लिए बहुत सारे कोड लिखना शामिल है। दो डेटासेट को जोड़ने की शुरुआत प्रत्येक डेटासेट के आकार की तुलना करके होती है। यदि एक डेटासेट दूसरे डेटासेट की तुलना में छोटा है, तो क्लस्टर में प्रत्येक डेटा नोड को छोटा डेटासेट वितरित किया जाता है।

एक बार जब मैपरिड्यूस में जॉइन वितरित हो जाता है, तो मैपर या रिड्यूसर बड़े डेटासेट से मेल खाने वाले रिकॉर्ड की खोज करने के लिए छोटे डेटासेट का उपयोग करता है और फिर उन रिकॉर्ड को संयोजित करके आउटपुट रिकॉर्ड बनाता है।

जुड़ने के प्रकार

वास्तविक जॉइन के स्थान के आधार पर, Hadoop में जॉइन को वर्गीकृत किया जाता है-

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

2. रिड्यूस-साइड जॉइन – जब जॉइन को रिड्यूसर द्वारा निष्पादित किया जाता है, तो इसे रिड्यूस-साइड जॉइन कहा जाता है। इस जॉइन में डेटासेट को संरचित रूप (या विभाजित) में रखने की कोई आवश्यकता नहीं है।

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

हाडोप में जॉइन्स की समग्र प्रक्रिया प्रवाह को नीचे दिए गए चित्र में दर्शाया गया है।

Hadoop MapReduce में जॉइन के प्रकार
Hadoop MapReduce में जॉइन के प्रकार

दो डेटासेट को कैसे जोड़ें: मैपरेड्यूस उदाहरण

दो अलग-अलग फ़ाइलों में डेटा के दो सेट हैं (नीचे दिखाया गया है)। कुंजी Dept_ID दोनों फ़ाइलों में समान है। लक्ष्य इन फ़ाइलों को संयोजित करने के लिए MapReduce Join का उपयोग करना है

मैपरिड्यूस उदाहरण
फ़ाइल 1
मैपरिड्यूस उदाहरण
फ़ाइल 2

इनपुट: इनपुट डेटा सेट एक txt फ़ाइल है, DeptName.txt और DepStrength.txt

इनपुट फ़ाइलें यहाँ से डाउनलोड करें

सुनिश्चित करें कि आपके पास Hadoop स्थापित है। MapReduce Join उदाहरण वास्तविक प्रक्रिया के साथ शुरू करने से पहले, उपयोगकर्ता को 'hduser' में बदलें (Hadoop कॉन्फ़िगरेशन के दौरान उपयोग की गई आईडी, आप अपने Hadoop कॉन्फ़िगरेशन के दौरान उपयोग की गई उपयोगकर्ता आईडी पर स्विच कर सकते हैं)।

su - hduser_

मैपरिड्यूस उदाहरण

चरण 1) ज़िप फ़ाइल को अपनी पसंद के स्थान पर कॉपी करें

मैपरिड्यूस उदाहरण

चरण 2) ज़िप फ़ाइल को अनकंप्रेस करें

sudo tar -xvf MapReduceJoin.tar.gz

मैपरिड्यूस उदाहरण

चरण 3) निर्देशिका MapReduceJoin/ पर जाएं

cd MapReduceJoin/

मैपरिड्यूस उदाहरण

चरण 4) Hadoop प्रारंभ करें

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

मैपरिड्यूस उदाहरण

चरण 5) DeptStrength.txt और DeptName.txt इस MapReduce Join उदाहरण प्रोग्राम के लिए प्रयुक्त इनपुट फ़ाइलें हैं।

इन फ़ाइलों को नीचे दिए गए कमांड का उपयोग करके HDFS में कॉपी किया जाना चाहिए-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

मैपरिड्यूस उदाहरण

चरण 6) नीचे दिए गए आदेश का उपयोग करके प्रोग्राम चलाएं-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

मैपरिड्यूस उदाहरण

मैपरिड्यूस उदाहरण

चरण 7) निष्पादन के बाद, आउटपुट फ़ाइल (जिसका नाम 'part-00000' है) HDFS पर /output_mapreducejoin निर्देशिका में संग्रहीत की जाएगी

परिणाम कमांड लाइन इंटरफ़ेस का उपयोग करके देखे जा सकते हैं

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

मैपरिड्यूस उदाहरण

परिणाम वेब इंटरफेस के माध्यम से भी देखे जा सकते हैं-

मैपरिड्यूस उदाहरण

अब चयन 'फ़ाइल सिस्टम ब्राउज़ करें' और ऊपर तक नेविगेट करें /आउटपुट_मैपरीड्यूसजॉइन

मैपरिड्यूस उदाहरण

प्रारंभिक भाग-आर-00000

मैपरिड्यूस उदाहरण

परिणाम दिखाए गए हैं

मैपरिड्यूस उदाहरण

नोट: कृपया ध्यान दें कि इस प्रोग्राम को अगली बार चलाने से पहले, आपको आउटपुट निर्देशिका /output_mapreducejoin को हटाना होगा

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

वैकल्पिक रूप से आउटपुट डायरेक्टरी के लिए एक अलग नाम का उपयोग किया जा सकता है।

मैपरेड्यूस में काउंटर क्या है?

A मैपरिड्यूस में काउंटर MapReduce जॉब्स और इवेंट्स के बारे में सांख्यिकीय जानकारी एकत्र करने और मापने के लिए इस्तेमाल किया जाने वाला एक तंत्र है। काउंटर MapReduce में विभिन्न जॉब सांख्यिकी का ट्रैक रखते हैं जैसे कि ऑपरेशन की संख्या और ऑपरेशन की प्रगति। काउंटर का उपयोग MapReduce में समस्या निदान के लिए किया जाता है।

हाडोप काउंटर मैप या रिड्यूस के लिए कोड में लॉग संदेश डालने के समान हैं। यह जानकारी मैपरिड्यूस जॉब प्रोसेसिंग में किसी समस्या के निदान के लिए उपयोगी हो सकती है।

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

मैपरिड्यूस काउंटर के प्रकार

मूलतः दो प्रकार के होते हैं मानचित्र छोटा करना काउंटरों

  1. हाडोप अंतर्निर्मित काउंटर:कुछ अंतर्निहित Hadoop काउंटर हैं जो प्रत्येक जॉब के लिए मौजूद हैं। नीचे अंतर्निहित काउंटर समूह दिए गए हैं-
    • मैपरिड्यूस टास्क काउंटर - निष्पादन समय के दौरान कार्य-विशिष्ट जानकारी (जैसे, इनपुट रिकॉर्ड की संख्या) एकत्रित करता है।
    • फ़ाइल सिस्टम काउंटर – किसी कार्य द्वारा पढ़ी या लिखी गई बाइट्स की संख्या जैसी जानकारी एकत्रित करता है
    • फ़ाइलइनपुटफ़ॉर्मेट काउंटर – FileInputFormat के माध्यम से पढ़ी गई बाइट्स की संख्या की जानकारी एकत्रित करता है
    • फ़ाइलआउटपुटफ़ॉर्मेट काउंटर – FileOutputFormat के माध्यम से लिखी गई कई बाइट्स की जानकारी एकत्र करता है
    • जॉब काउंटर – इन काउंटरों का उपयोग जॉबट्रैकर द्वारा किया जाता है। उनके द्वारा एकत्रित किए गए आँकड़ों में शामिल हैं, उदाहरण के लिए, किसी जॉब के लिए शुरू किए गए कार्यों की संख्या।
  2. उपयोगकर्ता परिभाषित काउंटर

अंतर्निहित काउंटरों के अतिरिक्त, उपयोगकर्ता द्वारा प्रदान की गई समान कार्यात्मकताओं का उपयोग करके अपने स्वयं के काउंटर परिभाषित किए जा सकते हैं। प्रोग्रामिंग की भाषाएँ। उदाहरण के लिए, में Java 'enum' का उपयोग उपयोगकर्ता परिभाषित काउंटरों को परिभाषित करने के लिए किया जाता है।

काउंटर उदाहरण

गुम और अमान्य मानों की संख्या की गणना करने के लिए काउंटर के साथ एक उदाहरण मैपक्लास। इस ट्यूटोरियल में उपयोग की गई इनपुट डेटा फ़ाइल हमारा इनपुट डेटा सेट एक CSV फ़ाइल है, SalesJan2009.csv

public static class MapClass
            extends MapReduceBase
            implements Mapper<LongWritable, Text, Text, Text>
{
    static enum SalesCounters { MISSING, INVALID };
    public void map ( LongWritable key, Text value,
                 OutputCollector<Text, Text> output,
                 Reporter reporter) throws IOException
    {
        
        //Input string is split using ',' and stored in 'fields' array
        String fields[] = value.toString().split(",", -20);
        //Value at 4th index is country. It is stored in 'country' variable
        String country = fields[4];
        
        //Value at 8th index is sales data. It is stored in 'sales' variable
        String sales = fields[8];
      
        if (country.length() == 0) {
            reporter.incrCounter(SalesCounters.MISSING, 1);
        } else if (sales.startsWith("\"")) {
            reporter.incrCounter(SalesCounters.INVALID, 1);
        } else {
            output.collect(new Text(country), new Text(sales + ",1"));
        }
    }
}

उपरोक्त कोड स्निपेट Hadoop Map Reduce में काउंटरों के कार्यान्वयन का एक उदाहरण दिखाता है।

यहाँ, बिक्री काउंटर एक काउंटर है जिसे का उपयोग करके परिभाषित किया गया है 'एन्यूम'. इसका उपयोग गिनने के लिए किया जाता है लापता और अवैध इनपुट रिकॉर्ड.

कोड स्निपेट में, यदि 'देश' यदि फ़ील्ड की लंबाई शून्य है तो उसका मान लुप्त है और इसलिए संबंधित काउंटर SalesCounters.MISSING वृद्धि की जाती है.

आगे, यदि 'बिक्री' फ़ील्ड a से शुरू होती है " तो रिकॉर्ड को अमान्य माना जाता है। यह बढ़ते काउंटर द्वारा इंगित किया जाता है SalesCounters.अमान्य.