HDFS ट्यूटोरियल: आर्किटेक्चर, पढ़ें और amp; जावा एपीआई का उपयोग कर ऑपरेशन लिखें

विषय - सूची:

Anonim

HDFS क्या है?

एचडीएफएस बहुत बड़ी डेटा फ़ाइलों को संग्रहीत करने के लिए एक वितरित फ़ाइल सिस्टम है, जो कमोडिटी हार्डवेयर के समूहों पर चल रहा है। यह दोष सहिष्णु, स्केलेबल, और विस्तार करने के लिए बेहद सरल है। Hadoop HDFS ( Hadoop Distributed File Systems ) के साथ बंडल में आता है ।

जब डेटा एक एकल भौतिक मशीन पर भंडारण की क्षमता से अधिक हो जाता है, तो इसे कई अलग-अलग मशीनों में विभाजित करना आवश्यक हो जाता है। एक फाइल सिस्टम जो मशीनों के एक नेटवर्क में भंडारण विशिष्ट संचालन का प्रबंधन करता है, एक वितरित फाइल सिस्टम कहलाता है। एचडीएफएस ऐसा ही एक सॉफ्टवेयर है।

इस ट्यूटोरियल में हम सीखेंगे,

  • HDFS क्या है?
  • HDFS आर्किटेक्चर
  • ऑपरेशन पढ़ें
  • ऑपरेशन लिखो
  • JAVA API का उपयोग करके HDFS को एक्सेस करें
  • COMMAND-LINE INTERFACE का उपयोग करके HDFS का उपयोग करें

HDFS आर्किटेक्चर

HDFS क्लस्टर मुख्य रूप से एक होते हैं NameNode कि फाइल सिस्टम का प्रबंधन करता है मेटाडाटा और एक DataNodes कि दुकानों वास्तविक डेटा

  • NameNode: NameNode को सिस्टम का मास्टर माना जा सकता है। यह सिस्टम में मौजूद सभी फाइलों और निर्देशिकाओं के लिए फाइल सिस्टम ट्री और मेटाडेटा को बनाए रखता है। मेटाडेटा जानकारी संग्रहीत करने के लिए दो फ़ाइलों 'नेमस्पेस इमेज' और 'एडिट लॉग' का उपयोग किया जाता है। नामेनोड को किसी दिए गए फ़ाइल के डेटा ब्लॉक वाले सभी डेटानेट्स का ज्ञान है, हालांकि, यह ब्लॉक स्थानों को लगातार स्टोर नहीं करता है। सिस्टम शुरू होने पर यह जानकारी डेटेनोड्स से हर बार पुनर्निर्माण की जाती है।
  • DataNode: DataNodes दास होते हैं जो एक क्लस्टर में प्रत्येक मशीन पर रहते हैं और वास्तविक भंडारण प्रदान करते हैं। यह ग्राहकों के लिए अनुरोधों को परोसने, पढ़ने और लिखने के लिए जिम्मेदार है।

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

एचडीएफएस डेटा प्रतिकृति की अवधारणा पर काम करता है जिसमें डेटा ब्लॉक की कई प्रतिकृतियां बनाई जाती हैं और नोड विफलता की स्थिति में डेटा की उच्च उपलब्धता को सक्षम करने के लिए एक क्लस्टर भर में नोड्स पर वितरित किया जाता है।

जानती हो? एचडीएफएस में एक फ़ाइल, जो एकल ब्लॉक से छोटी है, एक ब्लॉक के पूर्ण भंडारण पर कब्जा नहीं करती है।

HDFS में ऑपरेशन पढ़ें

डेटा रीड रिक्वेस्ट HDFS, NameNode और DataNode द्वारा दी जाती है। पाठक को 'ग्राहक' कहते हैं। नीचे चित्र में Hadoop में रीड ऑपरेशन लिखा गया है।

  1. एक ग्राहक फाइलसिस्टम ऑब्जेक्ट के 'ओपन ()' विधि को कॉल करके रीड रिक्वेस्ट शुरू करता है ; यह डिस्ट्रीब्यूटेड फ़ाइलसिस्टम का एक प्रकार है ।
  2. यह ऑब्जेक्ट RPC का उपयोग करके नामेनोड से जुड़ता है और मेटाडेटा जानकारी प्राप्त करता है जैसे कि फ़ाइल के ब्लॉक के स्थान। कृपया ध्यान दें कि ये पते किसी फ़ाइल के पहले कुछ ब्लॉकों के हैं।
  3. इस मेटाडेटा अनुरोध के जवाब में, उस ब्लॉक की प्रतिलिपि रखने वाले DataNodes के पते वापस कर दिए जाते हैं।
  4. एक बार DataNodes के पते प्राप्त हो जाने के बाद, FSDataInputStream का एक प्रकार क्लाइंट को वापस कर दिया जाता है। FSDataInputStream में DFSInputStream शामिल है जो DataNode और NameNode के साथ बातचीत का ध्यान रखता है। उपरोक्त आरेख में दिखाए गए चरण 4 में, एक क्लाइंट 'रीड ()' विधि का आह्वान करता है जिसके कारण DFSInputStream किसी फाइल के पहले ब्लॉक के साथ पहले DataNode के साथ संबंध स्थापित करता है।
  5. डेटा को स्ट्रीम के रूप में पढ़ा जाता है, जिसमें क्लाइंट 'रीड ()' विधि को बार-बार आमंत्रित करता है । यह पढ़ने () संचालन की प्रक्रिया तब तक जारी रहती है जब तक यह ब्लॉक के अंत तक नहीं पहुंच जाती।
  6. एक ब्लॉक का अंत हो जाने के बाद, DFSInputStream कनेक्शन बंद कर देता है और अगले ब्लॉक के अगले DataNode का पता लगाने के लिए आगे बढ़ता है
  7. एक बार एक ग्राहक ने रीडिंग के साथ किया है, यह एक करीबी () विधि को कॉल करता है

HDFS में ऑपरेशन लिखें

इस खंड में, हम समझेंगे कि डेटा को एचडीएफएस में फ़ाइलों के माध्यम से कैसे लिखा जाता है।

  1. एक ग्राहक डिस्ट्रीब्यूटेडफाइलसिस्टम ऑब्जेक्ट की 'क्रिएट ()' विधि को लिखकर ऑपरेशन शुरू करता है जो एक नई फाइल बनाता है - चरण संख्या उपरोक्त आरेख में 1।
  2. DistributedFileSystem ऑब्जेक्ट RPC कॉल का उपयोग करके NameNode से कनेक्ट होता है और नई फ़ाइल निर्माण शुरू करता है। हालाँकि, यह फ़ाइल बनाता है कार्रवाई किसी भी ब्लॉक को फ़ाइल के साथ नहीं जोड़ती है। यह सत्यापित करने के लिए NameNode की ज़िम्मेदारी है कि फ़ाइल (जो बनाई जा रही है) पहले से मौजूद नहीं है और क्लाइंट के पास नई फ़ाइल बनाने के लिए सही अनुमति है। यदि कोई फ़ाइल पहले से मौजूद है या क्लाइंट के पास नई फ़ाइल बनाने के लिए पर्याप्त अनुमति नहीं है, तो IOException क्लाइंट को फेंक दिया जाता है। अन्यथा, ऑपरेशन सफल होता है और फ़ाइल के लिए एक नया रिकॉर्ड NameNode द्वारा बनाया जाता है।
  3. NameNode में एक नया रिकॉर्ड बनने के बाद, क्लाइंट के लिए FSDataOutputStream प्रकार का ऑब्जेक्ट वापस कर दिया जाता है। एक ग्राहक HDFS में डेटा लिखने के लिए इसका उपयोग करता है। डेटा लिखने की विधि लागू है (आरेख में चरण 3)।
  4. FSDataOutputStream में DFSOutputStream ऑब्जेक्ट होता है जो DataNodes और NameNode के साथ संचार के बाद दिखता है। जबकि क्लाइंट डेटा लिखना जारी रखता है, DFSOutputStream इस डेटा के साथ पैकेट बनाना जारी रखता है। इन पैकेटों को एक कतार में रखा गया है, जिसे डेटाक्यूयू कहा जाता है ।
  5. DataStreamer नामक एक और घटक है जो इस DataQueue का उपभोग करता है । DataStreamer नए ब्लॉकों के आवंटन के लिए NameNode भी पूछता है, जिससे प्रतिकृति के लिए वांछनीय DataNodes का उपयोग किया जाता है।
  6. अब, DataNodes का उपयोग करके पाइप लाइन बनाकर प्रतिकृति की प्रक्रिया शुरू होती है। हमारे मामले में, हमने 3 के प्रतिकृति स्तर को चुना है और इसलिए पाइपलाइन में 3 डेटा नोड हैं।
  7. DataStreamer पाइप लाइन में पहले DataNode में पैकेट डालता है।
  8. प्रत्येक DataNode एक पाइपलाइन स्टोर में पैकेट प्राप्त करता है और इसके बाद एक पाइपलाइन में दूसरे DataNode के समान होता है।
  9. एक और कतार, 'एक कतार' को DFSOutputStream द्वारा पैकेट को बनाए रखने के लिए रखा गया है जो DataNodes से पावती की प्रतीक्षा कर रहे हैं।
  10. एक बार कतार में एक पैकेट के लिए स्वीकृति पाइपलाइन में सभी DataNodes से प्राप्त होने के बाद, इसे 'Ack Que' से हटा दिया जाता है। किसी भी DataNode विफलता की स्थिति में, इस कतार से पैकेट का उपयोग ऑपरेशन को फिर से शुरू करने के लिए किया जाता है।
  11. लेखन डेटा के साथ एक क्लाइंट किए जाने के बाद, यह क्लोज़ () (आरेख में चरण 9) कॉल को बंद () करने के लिए कॉल करता है, शेष डेटा पैकेट को पाइपलाइन में फ्लश करने के बाद परिणाम प्राप्त करने के लिए इंतजार कर रहा है।
  12. एक बार अंतिम स्वीकृति प्राप्त हो जाने के बाद, NameNode को यह बताने के लिए संपर्क किया जाता है कि फ़ाइल लिखने का कार्य पूरा हो गया है।

JAVA API का उपयोग करके HDFS को एक्सेस करें

इस खंड में, हम Hadoop के फाइल सिस्टम तक पहुँचने के लिए उपयोग किए जाने वाले Java इंटरफ़ेस को समझने का प्रयास करते हैं।

Hadoop के फाइलसिस्टम के साथ प्रोग्राम करने के लिए, Hadoop कई JAVA क्लासेस प्रदान करता है। Org.apache.hadoop.fs नाम के पैकेज में Hadoop के फाइल सिस्टम में एक फ़ाइल के हेरफेर में उपयोगी कक्षाएं हैं। इन ऑपरेशनों में शामिल हैं, खुला, पढ़ना, लिखना और बंद करना। दरअसल, Hadoop के लिए फ़ाइल API सामान्य है और इसे HDFS के अलावा अन्य फाइल सिस्टम के साथ बातचीत करने के लिए बढ़ाया जा सकता है।

प्रोग्राम से HDFS की फाइल पढ़ना

ऑब्जेक्ट java.net.URL का उपयोग किसी फाइल की सामग्री को पढ़ने के लिए किया जाता है। शुरुआत करने के लिए, हमें जावा को Hadoop की HDfs URL योजना को पहचानने की आवश्यकता है। यह URL ऑब्जेक्ट पर setURLStreamHandlerFactory विधि को कॉल करके किया जाता है और FsUrlStreamHandlerFactory का एक उदाहरण इसे पास किया जाता है। इस विधि को जेवीएम के अनुसार केवल एक बार निष्पादित करने की आवश्यकता है, इसलिए यह एक स्थिर ब्लॉक में संलग्न है।

एक उदाहरण कोड है-

public class URLCat {static {URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());}public static void main(String[] args) throws Exception {InputStream in = null;try {in = new URL(args[0]).openStream();IOUtils.copyBytes(in, System.out, 4096, false);} finally {IOUtils.closeStream(in);}}}

यह कोड किसी फ़ाइल की सामग्री को खोलता और पढ़ता है। एचडीएफएस पर इस फ़ाइल का पथ प्रोग्राम के लिए कमांड लाइन तर्क के रूप में पारित किया गया है।

COMMAND-LINE INTERFACE का उपयोग करके HDFS का उपयोग करें

यह एचडीएफएस के साथ बातचीत करने के सबसे सरल तरीकों में से एक है। कमांड-लाइन इंटरफ़ेस में फाइल पढ़ने, डायरेक्टरी बनाने, फाइल हिलाने, डेटा डिलीट करने, और डायरेक्टरी डायरेक्टरी जैसे फाइलसिस्टम ऑपरेशंस के लिए सपोर्ट है।

हम हर कमांड पर विस्तृत सहायता प्राप्त करने के लिए '$ HADOOP_HOME / bin / hdfs dfs -help' चला सकते हैं । यहाँ, 'dfs' HDFS की एक शेल कमांड है जो मल्टीपल सबकमबैंड को सपोर्ट करता है।

व्यापक रूप से उपयोग किए जाने वाले कुछ कमांड नीचे सूचीबद्ध किए गए हैं, प्रत्येक के कुछ विवरणों के साथ।

1. स्थानीय फाइलसिस्टम से HDFS में फाइल कॉपी करें

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /

यह कमांड स्थानीय फाइल सिस्टम से HDFS में फाइल अस्थायी कॉपी करता है।

2. हम का उपयोग कर एक निर्देशिका में मौजूद फ़ाइलों की सूची कर सकते हैं -LS

$HADOOP_HOME/bin/hdfs dfs -ls /

हम एक फ़ाइल 'temp.txt' (पहले प्रतिलिपि की गई) को '/' निर्देशिका के अंतर्गत सूचीबद्ध देख सकते हैं ।

3. एचडीएफएस से स्थानीय फाइल सिस्टम में फाइल कॉपी करने की आज्ञा

$HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt

हम temp.txt को एक स्थानीय फाइल सिस्टम में कॉपी करके देख सकते हैं ।

4. एक नई निर्देशिका बनाने की आज्ञा

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

जांचें कि कोई निर्देशिका बनाई गई है या नहीं। अब, आपको पता होना चाहिए कि इसे कैसे करना है ;-)