हमारे पिछले Hadoop ट्यूटोरियल . में , हमने आपको Hadoop Mapper . का विस्तृत विवरण प्रदान किया है और Reducer. अब इस ब्लॉग में, हम MapReduce प्रक्रिया के अन्य घटक यानी Hadoop InputFormat को कवर करने जा रहे हैं।
हम चर्चा करेंगे कि Hadoop में InputFormat क्या है, MapReduce InputFormat द्वारा कौन सी कार्यक्षमता प्रदान की जाती है। हम MapReduce में InputFormat के प्रकारों को भी कवर करेंगे, और InputFormat का उपयोग करके मैपर से डेटा कैसे प्राप्त करें।
Hadoop InputFormat क्या है?
Hadoop InputFormat मैप-रिड्यूस जॉब के निष्पादन के लिए इनपुट-विनिर्देश का वर्णन करता है।
InputFormat वर्णन करता है कि कैसे विभाजित किया जाए और इनपुट फ़ाइलों को पढ़ा जाए। MapReduce कार्य निष्पादन में, InputFormat पहला चरण है। यह इनपुट स्प्लिट बनाने और उन्हें रिकॉर्ड में विभाजित करने के लिए भी जिम्मेदार है।
इनपुट फाइलें MapReduce जॉब के लिए डेटा स्टोर करती हैं। इनपुट फ़ाइलें HDFS में रहती हैं . हालाँकि इन फ़ाइलों का प्रारूप मनमाना है, हम लाइन-आधारित लॉग फ़ाइलों और बाइनरी प्रारूप का भी उपयोग कर सकते हैं। इसलिए, MapReduce में, InputFormat वर्ग मूलभूत वर्गों में से एक है जो नीचे की कार्यक्षमता प्रदान करता है:
- इनपुटफॉर्मेट इनपुट के लिए फाइलों या अन्य वस्तुओं का चयन करता है।
- यह डेटा विभाजन को भी परिभाषित करता है। यह अलग-अलग मानचित्र कार्यों के आकार और इसके संभावित निष्पादन सर्वर दोनों को परिभाषित करता है।
- Hadoop InputFormat RecordReader को परिभाषित करता है। यह इनपुट फाइलों से वास्तविक रिकॉर्ड पढ़ने के लिए भी जिम्मेदार है।
हम मैपर से डेटा कैसे प्राप्त करते हैं?
मैपर से डेटा प्राप्त करने के तरीके हैं:getsplits() और createRecordReader() जो इस प्रकार हैं:
public abstract class InputFormat<K, V> { public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException; public abstract RecordReader<K, V> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException; }
MapReduce में InputFormat के प्रकार
Hadoop में विभिन्न प्रकार के MapReduce InputFormat हैं जिनका उपयोग विभिन्न उद्देश्यों के लिए किया जाता है। आइए नीचे Hadoop InputFormat प्रकारों पर चर्चा करें:
<एच4>1. FileInputFormatयह सभी फ़ाइल-आधारित InputFormats के लिए आधार वर्ग है। FileInputFormat इनपुट निर्देशिका को भी निर्दिष्ट करता है जिसमें डेटा फ़ाइलें स्थान हैं। जब हम MapReduce कार्य निष्पादन प्रारंभ करते हैं, FileInputFormat पढ़ने के लिए फ़ाइलों वाला पथ प्रदान करता है।
यह InpuFormat सभी फाइलों को पढ़ेगा। फिर यह इन फाइलों को एक या अधिक इनपुटस्प्लिट्स में विभाजित करता है।
<एच4>2. TextInputFormatयह डिफ़ॉल्ट इनपुटफॉर्मेट है। यह InputFormat प्रत्येक इनपुट फ़ाइल की प्रत्येक पंक्ति को एक अलग रिकॉर्ड के रूप में मानता है। यह कोई पार्सिंग नहीं करता है। TextInputFormat बिना स्वरूपित डेटा या लॉग फ़ाइलों जैसे लाइन-आधारित रिकॉर्ड के लिए उपयोगी है। इसलिए,
- कुंजी – यह फ़ाइल के भीतर लाइन की शुरुआत का बाइट ऑफ़सेट है (पूरी फ़ाइल एक विभाजन नहीं)। तो फ़ाइल नाम के साथ संयुक्त होने पर यह अद्वितीय होगा।
- मान - यह लाइन की सामग्री है। इसमें लाइन टर्मिनेटर शामिल नहीं हैं।
यह TextInputFormat के समान है। यह इनपुटफ़ॉर्मैट इनपुट की प्रत्येक पंक्ति को एक अलग रिकॉर्ड के रूप में भी मानता है। जबकि अंतर यह है कि TextInputFormat पूरी लाइन को मान के रूप में मानता है, लेकिन KeyValueTextInputFormat एक टैब कैरेक्टर ('/ t') द्वारा लाइन को कुंजी और मान में ही तोड़ देता है। इसलिए,
- कुंजी – टैब वर्ण तक सब कुछ।
- मान - यह टैब वर्ण के बाद पंक्ति का शेष भाग है।
यह एक InputFormat है जो सीक्वेंस फाइल्स को पढ़ता है। अनुक्रम फ़ाइलें बाइनरी फ़ाइलें हैं। ये फाइलें बाइनरी की-वैल्यू पेयर के सीक्वेंस को भी स्टोर करती हैं। ये ब्लॉक-संपीड़ित हैं और कई मनमाने डेटा के प्रत्यक्ष क्रमांकन और अक्रमांकन प्रदान करते हैं। इसलिए,
कुंजी और मान दोनों उपयोगकर्ता-परिभाषित हैं।
5. SequenceFileAsTextInputFormat
यह SequenceFileInputFormat का प्रकार है। यह प्रारूप अनुक्रम फ़ाइल कुंजी मानों को टेक्स्ट ऑब्जेक्ट में परिवर्तित करता है। इसलिए, यह 'tostring() . को कॉल करके रूपांतरण करता है 'कुंजी और मूल्यों पर। इसलिए, SequenceFileAsTextInputFormat अनुक्रम फ़ाइलों को स्ट्रीमिंग के लिए उपयुक्त इनपुट बनाता है।
<एच4>6. SequenceFileAsBinaryInputFormatSequenceFileInputFormat का उपयोग करके हम अनुक्रम फ़ाइल की कुंजियों और मानों को एक अपारदर्शी बाइनरी ऑब्जेक्ट के रूप में निकाल सकते हैं।
<एच4>7. NlineInputFormatयह TextInputFormat का दूसरा रूप है जहाँ कुंजियाँ लाइन की बाइट ऑफ़सेट होती हैं। और मान लाइन की सामग्री हैं। इसलिए, प्रत्येक मैपर को TextInputFormat और KeyValueTextInputFormat के साथ इनपुट की पंक्तियों की एक चर संख्या प्राप्त होती है।
संख्या विभाजन के आकार पर निर्भर करती है। इसके अलावा, लाइनों की लंबाई पर निर्भर करता है। इसलिए, यदि हमारे मैपर को इनपुट की एक निश्चित संख्या प्राप्त करना है, तो हम NLineInputFormat का उपयोग करते हैं।
N- यह इनपुट की पंक्तियों की संख्या है जो प्रत्येक मैपर को प्राप्त होती है।
डिफ़ॉल्ट रूप से (N=1), प्रत्येक मैपर को इनपुट की ठीक एक पंक्ति प्राप्त होती है।
मान लीजिए N=2, तो प्रत्येक विभाजन में दो रेखाएँ होती हैं। तो, एक मैपर पहले दो की-वैल्यू पेयर प्राप्त करता है। दूसरे मैपर को दूसरे दो की-वैल्यू पेयर मिलते हैं।
8. डीबीइनपुटफ़ॉर्मैट
यह InputFormat JDBC का उपयोग करके रिलेशनल डेटाबेस से डेटा पढ़ता है। यह छोटे डेटासेट भी लोड करता है, शायद मल्टीपल इनपुट का उपयोग करके एचडीएफएस से बड़े डेटासेट के साथ जुड़ने के लिए। इसलिए,
- कुंजी – लॉन्ग राइटेबल्स
- मान - DBWritables.
निष्कर्ष
इसलिए, InputFormat परिभाषित करता है कि किसी फ़ाइल से डेटा को मैपर इंस्टेंस में कैसे पढ़ा जाए। इस ट्यूटोरियल में, हमने कई प्रकार के InputFormat जैसे FileInputFormat, TextInputFormat आदि सीखे हैं।
डिफ़ॉल्ट इनपुट प्रारूप TextInputFormat है। यदि आपके पास MapReduce InputFormat से संबंधित कोई प्रश्न है, तो बेझिझक हमारे साथ साझा करें। आशा है कि हम उन्हें सुलझा लेंगे।