Database
 sql >> डेटाबेस >  >> RDS >> Database

MapReduce प्रकार और स्वरूपों को समझना

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

MapReduce प्रकार

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

map: (K1, V1) -> list (K2, V2)
reduce: (K2, list(V2)) -> list (K3, V3)

कुंजी और मूल्य जोड़ी के इनपुट पैरामीटर, क्रमशः K1 और V1 द्वारा दर्शाए गए, आउटपुट जोड़ी प्रकार से भिन्न होते हैं:K2 और V2। कम करें फ़ंक्शन मानचित्र द्वारा समान प्रारूप आउटपुट को स्वीकार करता है, लेकिन कम ऑपरेशन के आउटपुट का प्रकार फिर से भिन्न होता है:K3 और V3। इसके लिए जावा एपीआई इस प्रकार है:

public interface Mapper<K1, V1, K2, V2> extends JobConfigurable,
      Closeable {
   void map(K1 key, V1 value, OutputCollector<K2, V2> output,
      Reporter reporter) throws IOException;
}

public interface Reducer<K2, V2, K3, V3> extends JobConfigurable,
      Closeable {
   void reduce(K2 key, Iterator<V2> values,
      OutputCollector<K3, V3> output, Reporter reporter)throws
         IOException;
}

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

map: (K1, V1) -> list (K2, V2)
combine: (K2, list(V2)) -> list (K2, V2)
reduce: (K2, list(V2)) -> list (K3, V3)

ध्यान दें कि कंबाइन और रिड्यूस फंक्शन एक ही प्रकार का उपयोग करते हैं, वेरिएबल नामों को छोड़कर जहां K3 K2 है और V3 V2 है।

विभाजन फ़ंक्शन मध्यवर्ती कुंजी-मान प्रकारों पर कार्य करता है। यह मध्यवर्ती मानचित्र आउटपुट की कुंजियों के विभाजन को नियंत्रित करता है। कुंजी एक विशिष्ट हैश फ़ंक्शन का उपयोग करके विभाजन प्राप्त करती है। विभाजन की कुल संख्या नौकरी के लिए कम किए गए कार्यों की संख्या के समान है। विभाजन केवल मूल्य की अनदेखी करने वाली कुंजी द्वारा निर्धारित किया जाता है।

public interface Partitioner<K2, V2> extends JobConfigurable {
   int getPartition(K2 key, V2 value, int numberOfPartition);
}

संक्षेप में यह MapReduce प्रकारों का मुख्य सार है।

इनपुट प्रारूप

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

public interface InputSplit extends Writable {
   long getLength() throws IOException;
   String[] getLocations() throws IOException;
}

इनपुट स्प्लिट मैपर . द्वारा संसाधित किए जाने वाले डेटा का प्रतिनिधित्व करता है . यह लंबाई को बाइट्स में लौटाता है और इसमें इनपुट डेटा का संदर्भ होता है। यह इनपुट पर एक बाइट-उन्मुख दृश्य प्रस्तुत करता है और RecordReader की जिम्मेदारी है इसे संसाधित करने और एक रिकॉर्ड-उन्मुख दृश्य प्रस्तुत करने के लिए कार्य का। ज्यादातर मामलों में, हम इनपुटस्प्लिट के साथ डील नहीं करते हैं सीधे तौर पर क्योंकि वे एक InputFormat . द्वारा बनाए गए हैं . यह InputFormat . की जिम्मेदारी है इनपुट स्प्लिट बनाने और उन्हें रिकॉर्ड में विभाजित करने के लिए।

public interface InputFormat<K, V> {
   InputSplit[] getSplits(JobConf job, int numSplits) throws
      IOException;

   RecordReader<K, V> getRecordReader(InputSplit split,
      JobConf job, throws IOException;
}

JobClient getSplits() . को आमंत्रित करता है विभाजित तर्कों की उचित संख्या के साथ विधि। दी गई संख्या एक संकेत है क्योंकि विभाजन की वास्तविक संख्या दी गई संख्या से भिन्न हो सकती है। एक बार विभाजन की गणना हो जाने के बाद इसे जॉबट्रैकर को भेज दिया जाता है। जॉबट्रैकर स्टोरेज लोकेशन का उपयोग करके टास्कट्रैकर्स के लिए मैप टास्क शेड्यूल करता है। तब टास्कट्रैकर getRecordReader() . को कॉल करके स्प्लिट को पास करता है InputFormat . पर विधि रिकॉर्ड रीडर प्राप्त करने के लिए बंटवारे के लिए।

FileInputFormat फ़ाइल डेटा स्रोत के लिए आधार वर्ग है। यह उन फाइलों की पहचान करने की जिम्मेदारी है जिन्हें नौकरी इनपुट और विभाजन उत्पन्न करने की परिभाषा के रूप में शामिल किया जाना है।

Hadoop में असंरचित डेटा का प्रसंस्करण भी शामिल है जो अक्सर पाठ्य प्रारूप में आता है। TextInputFormat डिफ़ॉल्ट InputFormat है ऐसे डेटा के लिए।

SequenceInputFormat बाइनरी इनपुट लेता है और बाइनरी की-वैल्यू पेयर के सीक्वेंस को स्टोर करता है।

इसी तरह, DBInputFormat JDBC का उपयोग करके रिलेशनल डेटाबेस से डेटा पढ़ने की क्षमता प्रदान करता है।

आउटपुट प्रारूप

आउटपुट स्वरूप वर्ग उनके संबंधित इनपुट प्रारूप वर्गों के समान हैं और विपरीत दिशा में काम करते हैं।

उदाहरण के लिए, TextOutputFormat डिफ़ॉल्ट आउटपुट स्वरूप है जो रिकॉर्ड को सादे पाठ फ़ाइलों के रूप में लिखता है, जबकि कुंजी-मान किसी भी प्रकार का हो, और toString() को लागू करके उन्हें एक स्ट्रिंग में बदल देता है तरीका। की-वैल्यू कैरेक्टर को टैब कैरेक्टर द्वारा अलग किया जाता है, हालांकि इसे टेक्स्ट आउटपुट फॉर्मेट की सेपरेटर प्रॉपर्टी में हेर-फेर करके कस्टमाइज किया जा सकता है।

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

रिलेशनल डेटाबेस और HBase के आउटपुट स्वरूपों को DBOutputFormat . द्वारा नियंत्रित किया जाता है . यह कम आउटपुट को SQL टेबल पर भेजता है। उदाहरण के लिए, HBase का TableOutputFormat MapReduce प्रोग्राम को HBase तालिका में संग्रहीत डेटा पर काम करने में सक्षम बनाता है और HBase तालिका में आउटपुट लिखने के लिए इसका उपयोग करता है।

निष्कर्ष

संक्षेप में, यह MapReduce प्रकार और स्वरूपों की जड़ है। उनके बारे में अधिक जानकारी प्राप्त करने के लिए नीचे दिए गए संदर्भ में लिस्टिंग देखें। जावा एपीआई के कार्यों पर कई जटिल विवरण हैं जो प्रोग्रामिंग में गोता लगाने पर ही स्पष्ट हो जाते हैं। अधिक विवरण के लिए Apache Hadoop Java API डॉक्स देखें और कुछ प्रथाओं को कोड करना शुरू करें।

संदर्भ

  • टॉम व्हाइट, Hadoop द डेफिनिटिव गाइड , ओ'रेली
  • अपाचे हडोप जावा एपीआई डॉक्स

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेबल्स को कैसे मास्क करें और रेफरेंशियल इंटिग्रिटी को कैसे सुरक्षित रखें

  2. पुनरावर्तनीय पढ़ें अलगाव स्तर

  3. Easysoft ODBC ड्राइवर और ODBCINST लाइब्रेरी

  4. जावा से ऋषि से जुड़ना

  5. LD_DEBUG पर्यावरण चर