HDFS டுடோரியல்: ஜாவா ஏபிஐ பயன்படுத்தி கட்டமைப்பு, வாசிப்பு மற்றும் எழுதுதல் செயல்பாடு

HDFS என்றால் என்ன?

எச்டிஎஃப்எஸ் என்பது மிகப் பெரிய தரவு கோப்புகளை சேமிப்பதற்கான விநியோகிக்கப்பட்ட கோப்பு அமைப்பாகும், இது பொருட்களின் வன்பொருளின் கொத்துக்களில் இயங்குகிறது. இது தவறு சகிப்புத்தன்மை, அளவிடக்கூடியது மற்றும் விரிவாக்க மிகவும் எளிது. ஹடூப் மூட்டையாக வருகிறது HDFS ( ஹடூப் விநியோகிக்கப்பட்ட கோப்பு அமைப்புகள் )

தரவு ஒரு இயற்பியல் இயந்திரத்தில் சேமிப்பு திறனை தாண்டும்போது, ​​அதை பல தனி இயந்திரங்களில் பிரிப்பது அவசியம். இயந்திரங்களின் நெட்வொர்க் முழுவதும் சேமிப்பு குறிப்பிட்ட செயல்பாடுகளை நிர்வகிக்கும் ஒரு கோப்பு முறைமை விநியோகிக்கப்பட்ட கோப்பு முறைமை என்று அழைக்கப்படுகிறது. HDFS அத்தகைய ஒரு மென்பொருள்.

இந்த டுடோரியலில், நாம் கற்றுக்கொள்வோம்,

HDFS கட்டிடக்கலை

HDFS கிளஸ்டர் முதன்மையாக a ஐ கொண்டுள்ளது பெயர் முனை அது கோப்பு முறைமையை நிர்வகிக்கிறது மெட்டாடேட்டா மற்றும் ஒரு தரவு முனைகள் என்று சேமிக்கிறது உண்மையான தரவு .

  • பெயர் முனை: நேம்நோட் கணினியின் தலைவராகக் கருதப்படலாம். இது கோப்பு முறைமை மரம் மற்றும் கணினியில் உள்ள அனைத்து கோப்புகள் மற்றும் கோப்பகங்களுக்கான மெட்டாடேட்டாவை பராமரிக்கிறது. இரண்டு கோப்புகள் 'நேம்ஸ்பேஸ் படம்' மற்றும் இந்த பதிவைத் திருத்து ' மெட்டாடேட்டா தகவல்களைச் சேமிக்கப் பயன்படுகிறது. கொடுக்கப்பட்ட கோப்பிற்கான தரவுத் தொகுதிகளைக் கொண்ட அனைத்து தரவுத்தொகுப்புகளையும் நேமனோட் கொண்டுள்ளது, இருப்பினும், அது தொடர்ந்து பிளாக் இருப்பிடங்களை சேமிக்காது. கணினி தொடங்கும் போது இந்த தகவல் ஒவ்வொரு முறையும் தரவுத்தளங்களிலிருந்து புனரமைக்கப்படுகிறது.
  • டேட்டாநோட்: டேட்டாநோட்கள் அடிமைகள், அவை ஒவ்வொரு இயந்திரத்திலும் ஒரு கொத்தாக வசித்து உண்மையான சேமிப்பை வழங்குகின்றன. வாடிக்கையாளர்களுக்கான கோரிக்கைகளுக்கு சேவை செய்வதற்கும், படிப்பதற்கும் எழுதுவதற்கும் இது பொறுப்பு.

HDFS இல் படித்தல்/எழுதுதல் செயல்பாடுகள் ஒரு தொகுதி அளவில் செயல்படுகின்றன. HDFS இல் உள்ள தரவு கோப்புகள் தொகுதி அளவிலான துண்டுகளாக உடைக்கப்படுகின்றன, அவை சுயாதீன அலகுகளாக சேமிக்கப்படுகின்றன. இயல்புநிலை தொகுதி அளவு 64 MB ஆகும்.

எச்டிஎஃப்எஸ் தரவு நகலெடுக்கும் ஒரு கருத்தின் அடிப்படையில் செயல்படுகிறது, இதில் தரவுத் தொகுதிகளின் பல பிரதிகள் உருவாக்கப்பட்டு, முனை செயலிழப்பு ஏற்பட்டால் தரவு அதிக அளவில் கிடைக்கச் செய்வதற்காக ஒரு கிளஸ்டர் முழுவதும் முனையங்களில் விநியோகிக்கப்படுகிறது.

உங்களுக்கு தெரியுமா? எச்டிஎஃப்எஸ் -ல் உள்ள ஒரு கோப்பு, ஒரு தொகுதியை விடச் சிறியது, ஒரு தொகுதியின் முழுச் சேமிப்பிடத்தை ஆக்கிரமிக்காது.

HDFS இல் செயல்பாட்டைப் படிக்கவும்

தரவு வாசிப்பு கோரிக்கை HDFS, NameNode மற்றும் DataNode மூலம் வழங்கப்படுகிறது. வாசகரை 'வாடிக்கையாளர்' என்று அழைப்போம். கீழே உள்ள வரைபடம் ஹடூப்பில் கோப்பு வாசிப்பு செயல்பாட்டை சித்தரிக்கிறது.

  1. ஒரு வாடிக்கையாளர் அழைப்பதன் மூலம் வாசிப்பு கோரிக்கையைத் தொடங்குகிறார் 'திறந்த ()' ஃபைல்சிஸ்டம் பொருளின் முறை; இது ஒரு வகை பொருள் விநியோகிக்கப்பட்ட கோப்பு அமைப்பு .
  2. இந்த பொருள் RPC ஐப் பயன்படுத்தி namenode உடன் இணைக்கிறது மற்றும் கோப்பின் தொகுதிகளின் இருப்பிடங்கள் போன்ற மெட்டாடேட்டா தகவலைப் பெறுகிறது. இந்த முகவரிகள் ஒரு கோப்பின் முதல் சில தொகுதிகள் என்பதை தயவுசெய்து கவனிக்கவும்.
  3. இந்த மெட்டாடேட்டா கோரிக்கைக்கு பதிலளிக்கும் விதமாக, அந்த தொகுதியின் நகலைக் கொண்ட டேட்டாநோட்களின் முகவரிகள் திருப்பித் தரப்படும்.
  4. டேட்டாநோட்களின் முகவரிகள் கிடைத்தவுடன், வகை பொருள் FSDataInputStream வாடிக்கையாளருக்கு திருப்பி அனுப்பப்படுகிறது. FSDataInputStream கொண்டுள்ளது DFSInputStream இது டேட்டாநோட் மற்றும் நேம்நோட் உடனான தொடர்புகளை கவனித்துக்கொள்கிறது. மேலே உள்ள வரைபடத்தில் காட்டப்பட்டுள்ள படி 4 இல், ஒரு வாடிக்கையாளர் அழைக்கிறார் 'படி()' ஏற்படுத்தும் முறை DFSInputStream ஒரு கோப்பின் முதல் தொகுதியுடன் முதல் டேட்டாநோட் உடன் இணைப்பை நிறுவ.
  5. தரவு ஸ்ட்ரீம்களின் வடிவத்தில் படிக்கப்படுகிறது, அதில் வாடிக்கையாளர் அழைக்கிறார் 'படி()' முறை மீண்டும் மீண்டும். இந்த செயல்முறை படி() தொகுதியின் முடிவை அடையும் வரை செயல்பாடு தொடர்கிறது.
  6. ஒரு தொகுதியின் முடிவை அடைந்தவுடன், DFSInputStream இணைப்பை மூடிவிட்டு அடுத்த தொகுதிக்கு அடுத்த DataNode ஐக் கண்டுபிடிக்க செல்கிறது
  7. ஒரு வாடிக்கையாளர் வாசிப்பை முடித்தவுடன், அது அழைக்கிறது ஒரு நெருக்கமான () முறை

HDFS இல் செயல்பாட்டை எழுதுங்கள்

இந்த பிரிவில், கோப்புகள் மூலம் எச்டிஎஃப்எஸ்ஸில் தரவு எவ்வாறு எழுதப்படுகிறது என்பதை நாம் புரிந்துகொள்வோம்.

  1. ஒரு வாடிக்கையாளர் ஒரு புதிய கோப்பை உருவாக்கும் டிஸ்ட்ரிபியூட்டட் ஃபைல் சிஸ்டம் பொருளின் 'உருவாக்கு ()' முறையை அழைப்பதன் மூலம் எழுத்து செயல்பாட்டைத் தொடங்குகிறார் - படி எண். மேலே உள்ள வரைபடத்தில் 1.
  2. டிஎஸ்டிபியூட்டட் ஃபைல் சிஸ்டம் பொருள் ஆர்எப்சி அழைப்பைப் பயன்படுத்தி நேம்நோடுடன் இணைக்கிறது மற்றும் புதிய கோப்பு உருவாக்கத்தைத் தொடங்குகிறது. இருப்பினும், இந்த கோப்பு செயல்பாட்டை உருவாக்குகிறது, கோப்புகளுடன் எந்தத் தொகுதியையும் இணைக்காது. கோப்பு (உருவாக்கப்பட்டு வருகிறது) ஏற்கனவே இல்லை மற்றும் ஒரு புதிய கோப்பை உருவாக்க ஒரு வாடிக்கையாளருக்கு சரியான அனுமதிகள் உள்ளனவா என்பதை சரிபார்க்க நேம்நோட்டின் பொறுப்பு. ஒரு கோப்பு ஏற்கனவே இருந்தால் அல்லது புதிய கோப்பை உருவாக்க வாடிக்கையாளருக்கு போதுமான அனுமதி இல்லை என்றால், பிறகு IOException வாடிக்கையாளருக்கு வீசப்படுகிறது. இல்லையெனில், செயல்பாடு வெற்றி பெறுகிறது மற்றும் கோப்பிற்கான புதிய பதிவு நேம்நோட் மூலம் உருவாக்கப்படும்.
  3. NameNode இல் ஒரு புதிய பதிவு உருவாக்கப்பட்டவுடன், FSDataOutputStream வகை ஒரு பொருள் வாடிக்கையாளருக்குத் திரும்பும். HDFS இல் தரவை எழுத ஒரு வாடிக்கையாளர் அதைப் பயன்படுத்துகிறார். தரவு எழுதும் முறை அழைக்கப்படுகிறது (வரைபடத்தில் படி 3).
  4. FSDataOutputStream DFSOutputStream பொருளைக் கொண்டுள்ளது, இது DataNodes மற்றும் NameNode உடன் தொடர்புகொள்வதை கவனித்துக்கொள்கிறது. வாடிக்கையாளர் தரவை எழுதும் போது, DFSOutputStream இந்தத் தரவைக் கொண்டு தொடர்ந்து பாக்கெட்டுகளை உருவாக்குகிறது. இந்த பாக்கெட்டுகள் ஒரு வரிசையில் இணைக்கப்பட்டுள்ளன தரவு வரிசை .
  5. என்று அழைக்கப்படும் இன்னும் ஒரு கூறு உள்ளது டேட்டா ஸ்ட்ரீமர் இதை நுகரும் தரவு வரிசை . DataStreamer புதிய தொகுதிகளை ஒதுக்குமாறு NameNode ஐ கேட்கிறது, இதன் மூலம் விரும்பத்தக்க DataNodes ஐ நகலெடுப்பதற்குப் பயன்படுத்தலாம்.
  6. இப்போது, ​​டேட்டாநோட்களைப் பயன்படுத்தி பைப்லைனை உருவாக்குவதன் மூலம் நகலெடுக்கும் செயல்முறை தொடங்குகிறது. எங்கள் விஷயத்தில், நாங்கள் 3 இன் நகல் அளவைத் தேர்ந்தெடுத்துள்ளோம், எனவே குழாயில் 3 டேட்டாநோட்கள் உள்ளன.
  7. டேட்டா ஸ்ட்ரீமர் பாக்கெட்டுகளை குழாயில் உள்ள முதல் டேட்டாநோடில் ஊற்றுகிறார்.
  8. ஒரு குழாயில் உள்ள ஒவ்வொரு டேட்டாநோடும் அது பெற்ற பாக்கெட்டை சேமித்து, அதை ஒரு குழாயில் உள்ள இரண்டாவது டேட்டாநோடிற்கு அனுப்புகிறது.
  9. மற்றொரு வரிசை, 'அக் க்யூ' DFSOutputStream ஆல் பேக்கேட்களை சேமிப்பதற்காக பராமரிக்கப்படுகிறது, அவை டேட்டாநோட்களின் ஒப்புதலுக்காகக் காத்திருக்கின்றன.
  10. வரிசையில் உள்ள ஒரு பாக்கெட்டுக்கான ஒப்புதல் பைப்லைனில் உள்ள அனைத்து டேட்டாநோட்களிலிருந்தும் பெறப்பட்டவுடன், அது 'அக் க்யூ'விலிருந்து அகற்றப்படும். ஏதேனும் டேட்டாநோட் செயலிழந்தால், இந்த வரிசையில் இருந்து பாக்கெட்டுகள் செயல்பாட்டை மீண்டும் பயன்படுத்த பயன்படுகிறது.
  11. ஒரு வாடிக்கையாளர் எழுதும் தரவைச் செய்த பிறகு, அது ஒரு நெருக்கமான () முறையை அழைக்கிறது (வரைபடத்தில் படி 9) அழைப்பு மூடுவதற்கு (), இதன் விளைவாக மீதமுள்ள தரவு பாக்கெட்டுகளை பைப்லைனுக்குப் பறித்த பிறகு ஒப்புதலுக்காகக் காத்திருக்கிறது.
  12. இறுதி ஒப்புதல் கிடைத்தவுடன், கோப்பு எழுதும் செயல்பாடு முடிந்தது என்று சொல்ல நேம்நோட் தொடர்பு கொள்ளப்படுகிறது.

JAVA API ஐ பயன்படுத்தி HDFS ஐ அணுகவும்

இந்த பிரிவில், ஹடூப்பின் கோப்பு முறைமையை அணுகுவதற்குப் பயன்படுத்தப்படும் ஜாவா இடைமுகத்தைப் புரிந்துகொள்ள முயற்சிக்கிறோம்.

ஹடூப்பின் கோப்பு முறைமையுடன் நிரலாக்கத்துடன் தொடர்புகொள்வதற்காக, ஹடூப் பல JAVA வகுப்புகளை வழங்குகிறது. Org.apache.hadoop.fs என்ற பெயரிடப்பட்ட தொகுப்பில் ஹடூப்பின் கோப்பு முறைமையில் ஒரு கோப்பை கையாளுவதற்கு பயனுள்ள வகுப்புகள் உள்ளன. இந்த செயல்பாடுகளில், திறந்த, படிக்க, எழுத மற்றும் மூடுதல் அடங்கும். உண்மையில், ஹடூப்பிற்கான கோப்பு ஏபிஐ பொதுவானது மற்றும் எச்டிஎஃப்எஸ் தவிர மற்ற கோப்பு முறைமைகளுடன் தொடர்பு கொள்ள நீட்டிக்கப்படலாம்.

HDFS இலிருந்து ஒரு கோப்பை நிரலாக்கமாக வாசித்தல்

பொருள் java.net.URL ஒரு கோப்பின் உள்ளடக்கங்களைப் படிக்கப் பயன்படுகிறது. தொடங்குவதற்கு, ஹடூப்பின் எச்டிஎஃப்எஸ் யூஆர்எல் திட்டத்தை ஜாவா அங்கீகரிக்க வேண்டும். அழைப்பதன் மூலம் இது செய்யப்படுகிறது setURLStreamHandlerFactory URL பொருளின் முறை மற்றும் FsUrlStreamHandlerFactory இன் ஒரு நிகழ்வு அதற்கு அனுப்பப்பட்டது. இந்த முறை JVM க்கு ஒரு முறை மட்டுமே செயல்படுத்தப்பட வேண்டும், எனவே இது ஒரு நிலையான தொகுதியில் இணைக்கப்பட்டுள்ளது.

ஒரு எடுத்துக்காட்டு குறியீடு- | _+_ |

இந்தக் குறியீடு ஒரு கோப்பின் உள்ளடக்கத்தைத் திறந்து படிக்கிறது. HDFS இல் இந்த கோப்பின் பாதை நிரலுக்கு ஒரு கட்டளை வரி வாதமாக அனுப்பப்படுகிறது.

COMMAND-LINE இன்டர்ஃபேஸைப் பயன்படுத்தி HDFS ஐ அணுகவும்

HDFS உடன் தொடர்புகொள்வதற்கான எளிய வழிகளில் இதுவும் ஒன்றாகும். கட்டளை வரி இடைமுகம் கோப்பைப் படித்தல், கோப்பகங்களை உருவாக்குதல், கோப்புகளை நகர்த்துவது, தரவை நீக்குதல் மற்றும் கோப்பகங்களைப் பட்டியலிடுவது போன்ற கோப்பு முறைமை செயல்பாடுகளுக்கு ஆதரவைக் கொண்டுள்ளது.

நாம் ஓடலாம் '$ HADOOP_HOME/bin/hdfs dfs -help' ஒவ்வொரு கட்டளையிலும் விரிவான உதவியைப் பெற. இங்கே, 'dfs' பல துணை கட்டளைகளை ஆதரிக்கும் HDFS இன் ஷெல் கட்டளை.

பரவலாகப் பயன்படுத்தப்படும் சில கட்டளைகள் ஒவ்வொன்றின் சில விவரங்களுடன் கீழே பட்டியலிடப்பட்டுள்ளன.

1. உள்ளூர் கோப்பு அமைப்பிலிருந்து ஒரு கோப்பை HDFS க்கு நகலெடுக்கவும் | _+_ |

இந்த கட்டளை உள்ளூர் கோப்பு முறைமையிலிருந்து HDFS க்கு கோப்பு temp.txt ஐ நகலெடுக்கிறது.

2. பயன்படுத்தி ஒரு கோப்பகத்தில் இருக்கும் கோப்புகளை நாம் பட்டியலிடலாம் -எல்

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); } } }

நாம் ஒரு கோப்பைப் பார்க்கலாம் 'temp.txt' (முன்னர் நகலெடுக்கப்பட்டது) கீழ் பட்டியலிடப்பட்டுள்ளது '/' அடைவு

3. எச்டிஎஃப்எஸ் | _+_ | இலிருந்து உள்ளூர் கோப்பு முறைமைக்கு ஒரு கோப்பை நகலெடுக்க கட்டளை

எங்களால் பார்க்க முடிகிறது temp.txt உள்ளூர் கோப்பு முறைமைக்கு நகலெடுக்கப்பட்டது.

4. புதிய கோப்பகத்தை உருவாக்க கட்டளை | _+_ |

ஒரு அடைவு உருவாக்கப்பட்டதா இல்லையா என்பதைச் சரிபார்க்கவும். இப்போது, ​​அதை எப்படி செய்வது என்று நீங்கள் தெரிந்து கொள்ள வேண்டும் ;-)