HDFS-i õpetus: arhitektuur, lugemine & Kirjutamistoiming Java API abil

Lang L: none (table-of-contents):

Anonim

Mis on HDFS?

HDFS on hajutatud failisüsteem väga suurte andmefailide salvestamiseks ja töötab kauba riistvara klastrites. See on rikketaluv, skaleeritav ja seda on äärmiselt lihtne laiendada. Hadoop on komplektis HDFS-iga ( Hadoop Distributed File Systems ).

Kui andmed ületavad ühe füüsilise masina salvestusmahtu, on hädavajalik see jagada mitmele eraldi masinale. Failisüsteemi, mis haldab salvestusspetsiifilisi toiminguid masinate võrgus, nimetatakse hajutatud failisüsteemiks. HDFS on üks sellistest tarkvaradest.

Selles õpetuses õpime,

  • Mis on HDFS?
  • HDFS-i arhitektuur
  • Lugege Operation
  • Kirjutamise operatsioon
  • HDFS-ile pääseb juurde JAVA API abil
  • Juurdepääs HDFS-ile käsurealiidese abil

HDFS-i arhitektuur

HDFS-klaster koosneb peamiselt NameNode'ist, mis haldab failisüsteemi Metadata, ja DataNodes'ist, mis salvestab tegelikud andmed .

  • NameNode: NameNode'i võib pidada süsteemi põhimeistriks. See hoiab kõigi süsteemis olevate failide ja kataloogide failisüsteemipuud ning metaandmeid. Metaandmete teabe salvestamiseks kasutatakse kahte faili 'Nimespace image' ja 'edit log' . Namenode omab kõiki antud faili andmeplokke sisaldavaid datanode, kuid see ei salvesta plokkide asukohti pidevalt. See teave rekonstrueeritakse iga kord datanoodidelt süsteemi käivitamisel.
  • DataNode: DataNode on orjad, mis asuvad igas klastri masinas ja pakuvad tegelikku salvestusruumi. See vastutab klientide päringute esitamise, lugemise ja kirjutamise eest.

HDFS-i lugemis- / kirjutamistoimingud toimivad ploki tasandil. HDFS-is olevad andmefailid jagunevad plokksuurusteks tükkideks, mis salvestatakse iseseisvate üksustena. Vaikimisi on ploki suurus 64 MB.

HDFS töötab andmete replikatsiooni kontseptsioonil, kus luuakse mitu andmeplokkide koopiat ja need jaotatakse sõlmedes kogu klastris, et võimaldada andmete suurt kättesaadavust sõlme rikke korral.

Kas sa tead? HDFS-is olev fail, mis on väiksem kui üks plokk, ei hõivata ploki täielikku salvestusruumi.

Lugege operatsiooni HDFS-is

Andmete lugemise taotlust teenivad HDFS, NameNode ja DataNode. Nimetagem lugejat 'kliendiks'. Allpool olev diagramm kujutab faili lugemise operatsiooni Hadoopis.

  1. Klient algatab lugemispäringu, kutsudes objekti FileSystem meetodi „open ()” ; see on objekti tüüp DistributedFileSystem .
  2. See objekt ühendub RPC-ga nimenoodiga ja saab metaandmete teavet, näiteks faili plokkide asukohad. Pange tähele, et need aadressid on faili paar esimest plokki.
  3. Vastuseks sellele metaandmete taotlusele tagastatakse selle ploki koopiat omavate DataNode'i aadressid.
  4. Kui DataNodes'i aadressid on kätte saadud, tagastatakse kliendile objekt, mille tüüp on FSDataInputStream . FSDataInputStream sisaldab DFSInputStream, mis hoolitseb DataNode ja NameNode interaktsioonide eest. Ülaltoodud diagrammil näidatud etapis 4 kutsub klient meetodit "read ()", mis põhjustab DFSInputStreamil ühenduse loomise esimese DataNode'iga faili esimese plokiga.
  5. Andmeid loetakse voogude kujul, kus klient kutsub meetodit 'read ()' korduvalt. See read () operatsiooni protsess jätkub kuni ploki lõpuni.
  6. Kui ploki lõpp on käes, sulgeb DFSInputStream ühenduse ja asub järgmise ploki järgmise DataNode'i leidmiseks
  7. Kui klient on lugemisega hakkama saanud, kutsub ta meetodit close () .

Kirjutamise operatsioon HDFS-is

Selles jaotises mõistame, kuidas andmed failide kaudu HDFS-i kirjutatakse.

  1. Klient algatab kirjutamistoimingu, kutsudes objekti DistributedFileSystem meetodi „create ()“, mis loob uue faili - samm nr. 1 ülaltoodud diagrammil.
  2. DistributedFileSystem loob ühenduse RPC kõne abil NameNode'iga ja algatab uue faili loomise. See faili loomine ei seosta failiga ühtegi plokki. NameNode'i ülesandeks on kontrollida, kas faili (mida luuakse) pole veel olemas ja kliendil on uue faili loomiseks õiged õigused. Kui fail on juba olemas või kliendil pole uue faili loomiseks piisavat luba, visatakse IOException kliendile. Vastasel juhul õnnestub toiming ja NameNode loob failile uue kirje.
  3. Kui NameNode'is on loodud uus kirje, tagastatakse kliendile objekt, mille tüüp on FSDataOutputStream. Klient kasutab seda HDFS-i andmete kirjutamiseks. Kasutatakse andmete kirjutamise meetodit (diagrammil samm 3).
  4. FSDataOutputStream sisaldab objekti DFSOutputStream, mis hoolitseb suhtluse eest DataNodes ja NameNode. Samal ajal kui klient jätkab andmete kirjutamist, jätkab DFSOutputStream nende andmetega pakettide loomist. Need paketid paiknevad järjekorras, mida nimetatakse DataQueue'ks .
  5. On veel üks komponent nimega DataStreamer, mis tarbib seda DataQueue'i . DataStreamer küsib NameNode'ilt ka uute plokkide eraldamist, valides seeläbi replikatsiooniks kasutatavad soovitavad DataNodes.
  6. Nüüd algab replikatsioon DataNodes'i abil torujuhtme loomisega. Meie puhul oleme valinud replikatsioonitaseme 3 ja seega on käsil 3 DataNode'i.
  7. DataStreamer valab paketid torujuhtme esimesse DataNode'i.
  8. Iga gaasijuhtme DataNode salvestab talle vastuvõetud paketi ja edastab selle torujuhtme teisele DataNode'ile.
  9. DFSOutputStream hoiab teist järjekorda 'Ack Queue', et salvestada pakette, mis ootavad DataNodes'ilt kinnitust.
  10. Kui järjekorras oleva paketi kinnitus on saadud kõikidelt torujuhtme DataNodes'ilt, eemaldatakse see 'Ack Queue'st. Mis tahes DataNode'i tõrke korral kasutatakse operatsiooni taasalustamiseks selle järjekorra pakette.
  11. Pärast seda, kui klient on andmetega kirjutamise lõpetanud, kutsub ta meetodit close () (diagrammil samm 9). Kõne sulgemiseks () annab tulemuseks ülejäänud andmepakettide loputamise torujuhtmele, millele järgneb ootamine kinnituse saamiseks.
  12. Kui lõplik kinnitus on saadud, võetakse ühendust NameNode'iga, et öelda faili kirjutamise toiming lõpule viidud.

HDFS-ile pääseb juurde JAVA API abil

Selles jaotises püüame mõista Java-liidest, mida kasutatakse Hadoopi failisüsteemile juurdepääsemiseks.

Hadoopi failisüsteemiga programmiliselt suhtlemiseks pakub Hadoop mitu JAVA klassi. Pakett nimega org.apache.hadoop.fs sisaldab klasse, mis on kasulikud Hadoopi failisüsteemis oleva faili manipuleerimiseks. Need toimingud hõlmavad avamist, lugemist, kirjutamist ja sulgemist. Tegelikult on Hadoopi faili API üldine ja seda saab laiendada, et see interakteeruks teiste failisüsteemidega peale HDFS-i.

HDFS-ist faili programmiline lugemine

Objekti java.net.URL kasutatakse faili sisu lugemiseks. Alustuseks peame panema Java ära tundma Hadoopi hdfs URL-i skeemi. Selleks tuleb URL-i objektil kutsuda meetod setURLStreamHandlerFactory ja talle edastatakse FsUrlStreamHandlerFactory eksemplar. See meetod tuleb JVM-i jaoks käivitada ainult üks kord, seega on see suletud staatilisse plokki.

Koodi näidis on

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

See kood avab ja loeb faili sisu. Selle faili tee HDFS-is edastatakse programmile käsurea argumendina.

Juurdepääs HDFS-ile käsurealiidese abil

See on üks lihtsamaid viise HDFS-iga suhtlemiseks. Käsurealiides toetab failisüsteemi toiminguid, näiteks faili lugemine, kataloogide loomine, failide teisaldamine, andmete kustutamine ja kataloogide loendamine.

Saame käivitada '$ HADOOP_HOME / bin / hdfs dfs -help', et saada üksikasjalikku abi iga käsu kohta. Siin on 'dfs' HDFS- i shellikäsk, mis toetab mitut alamkäsu.

Mõned laialt kasutatavad käsud on loetletud allpool koos mõnede üksikasjadega.

1. Kopeerige fail kohalikust failisüsteemist HDFS-i

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

See käsk kopeerib faili temp.txt kohalikust failisüsteemist HDFS-i.

2. Saame kataloogis olevad failid loetleda -ls abil

$HADOOP_HOME/bin/hdfs dfs -ls /

Näeme, et fail 'temp.txt' (varem kopeeritud) on loetletud kataloogis '/' .

3. Käsk fail kopeerida HDFS-ist kohalikku failisüsteemi

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

Näeme, et temp.txt on kopeeritud kohalikku failisüsteemi.

4. Käsk uue kataloogi loomiseks

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

Kontrollige, kas kataloog on loodud või mitte. Nüüd peaksite teadma, kuidas seda teha ;-)