Výukový program HDFS: Architektúra, čítanie a Operácia zápisu pomocou Java API

Obsah:

Anonim

Čo je to HDFS?

HDFS je distribuovaný súborový systém na ukladanie veľmi veľkých dátových súborov, ktorý beží na klastroch komoditného hardvéru. Je odolný voči chybám, škálovateľný a jeho rozšírenie je mimoriadne jednoduché. Hadoop je dodávaný spolu s HDFS ( Hadoop Distributed File Systems ).

Keď dáta presiahnu kapacitu úložiska na jednom fyzickom stroji, je nevyhnutné ich rozdeliť medzi niekoľko samostatných počítačov. Súborový systém, ktorý spravuje operácie špecifické pre úložisko v sieti strojov, sa nazýva distribuovaný súborový systém. HDFS je jeden taký softvér.

V tejto príručke sa dozvieme,

  • Čo je to HDFS?
  • Architektúra HDFS
  • Prečítajte si operáciu
  • Operácia zápisu
  • Prístup k HDFS pomocou rozhrania JAVA API
  • Prístup k HDFS pomocou ROZHRANIA COMMAND-LINE

Architektúra HDFS

Klaster HDFS pozostáva primárne z NameNode, ktorý spravuje metadáta súborového systému, a DataNodes, ktoré ukladajú skutočné údaje .

  • NameNode: NameNode sa môže považovať za majstra systému. Udržuje strom systému súborov a metadáta pre všetky súbory a adresáre v systéme. Na ukladanie informácií o metaúdajoch sa používajú dva súbory, obraz menného priestoru ' a, záznam úprav' . Namenode má vedomosti o všetkých datanódach obsahujúcich dátové bloky pre daný súbor, umiestnenie blokov však trvale neukladá. Tieto informácie sa pri spustení systému zakaždým rekonštruujú z datanód.
  • DataNode: DataNode sú otroci, ktorí sa nachádzajú na každom stroji v klastri a poskytujú skutočné úložisko. Zodpovedá za obsluhu, čítanie a zápis požiadaviek pre klientov.

Operácie čítania a zápisu v HDFS fungujú na úrovni bloku. Dátové súbory v HDFS sú rozdelené na bloky veľkosti bloku, ktoré sú uložené ako nezávislé jednotky. Predvolená veľkosť bloku je 64 MB.

HDFS pracuje na koncepcii replikácie údajov, pri ktorej je vytvorených viac replík dátových blokov a sú distribuované na uzloch v rámci klastra, čo umožňuje vysokú dostupnosť údajov v prípade zlyhania uzla.

Vieš? Súbor v HDFS, ktorý je menší ako jeden blok, nezaberie celé úložisko bloku.

Prečítajte si operáciu v HDFS

Žiadosť o prečítanie údajov slúži HDFS, NameNode a DataNode. Hovorme čitateľovi ako „klient“. Nižšie uvedený diagram zobrazuje operáciu čítania súborov v programe Hadoop.

  1. Klient iniciuje požiadavku na čítanie volaním metódy „open ()“ objektu FileSystem; je to objekt typu DistributedFileSystem .
  2. Tento objekt sa pripája k namenode pomocou RPC a získava informácie o metadátach, ako sú napríklad umiestnenie blokov súboru. Upozorňujeme, že tieto adresy sú prvými niekoľkými blokmi súboru.
  3. V reakcii na túto žiadosť o metaúdaje sa vrátia adresy DataNodes, ktoré majú kópiu tohto bloku.
  4. Po prijatí adries DataNodes sa klientovi vráti objekt typu FSDataInputStream . FSDataInputStream obsahuje DFSInputStream, ktorý sa stará o interakcie s DataNode a NameNode. V kroku 4 zobrazenom na vyššie uvedenom diagrame, klient vyvolá metódu „read ()“, ktorá spôsobí, že DFSInputStream vytvorí spojenie s prvým DataNode s prvým blokom súboru.
  5. Dáta sa čítajú vo forme prúdov, v ktorých klient opakovane vyvoláva metódu „read ()“ . Tento proces operácie read () pokračuje až do konca bloku.
  6. Po dosiahnutí konca bloku DFSInputStream ukončí pripojenie a presunie sa k ďalšiemu bloku DataNode pre nasledujúci blok.
  7. Keď klient dokončí čítanie, zavolá metódu close () .

Operácia zápisu do HDFS

V tejto časti pochopíme, ako sa údaje do súborov HDFS zapisujú.

  1. Klient iniciuje operáciu zápisu volaním metódy 'create ()' objektu DistributedFileSystem, ktorý vytvorí nový súbor - krok č. 1 vo vyššie uvedenom diagrame.
  2. Objekt DistributedFileSystem sa pripája k NameNode pomocou volania RPC a iniciuje vytváranie nových súborov. Tento operátor vytvárania súboru však nepriraďuje k súboru žiadne bloky. Je zodpovednosťou NameNode overiť, či súbor (ktorý sa práve vytvára) už neexistuje a klient má správne povolenia na vytvorenie nového súboru. Ak súbor už existuje alebo klient nemá dostatočné povolenie na vytvorenie nového súboru, klientovi sa vloží IOException . V opačnom prípade bude operácia úspešná a NameNode vytvorí nový záznam pre súbor.
  3. Po vytvorení nového záznamu v NameNode sa klientovi vráti objekt typu FSDataOutputStream. Klient to používa na zápis dát do HDFS. Vyvolá sa metóda zápisu údajov (krok 3 na diagrame).
  4. FSDataOutputStream obsahuje objekt DFSOutputStream, ktorý sa stará o komunikáciu s DataNodes a NameNode. Zatiaľ čo klient pokračuje v zápise údajov, DFSOutputStream pokračuje vo vytváraní paketov s týmito údajmi. Tieto pakety sú zaradené do frontu, ktorý sa nazýva DataQueue .
  5. Existuje ešte jeden komponent s názvom DataStreamer, ktorý tento DataQueue spotrebúva . DataStreamer tiež požiada NameNode o pridelenie nových blokov, čím vyberie požadované DataNodes, ktoré sa majú použiť na replikáciu.
  6. Teraz proces replikácie začína vytvorením kanálu pomocou DataNodes. V našom prípade sme zvolili úroveň replikácie 3, a preto sú v potrubí 3 DataNodes.
  7. DataStreamer naleje pakety do prvého DataNode v potrubí.
  8. Každý DataNode v potrubí ukladá ním prijatý paket a preposiela ho rovnako druhému DataNode v potrubí.
  9. Ďalšiu frontu „Ack Queue“ udržiava DFSOutputStream na ukladanie paketov, ktoré čakajú na potvrdenie od DataNodes.
  10. Po prijatí potvrdenia o pakete vo fronte od všetkých DataNodes v potrubí sa odstráni z „Potvrdeného frontu“. V prípade akéhokoľvek zlyhania DataNode sa pakety z tohto frontu použijú na opätovné zahájenie operácie.
  11. Keď je klient hotový so zápisom údajov, zavolá metódu close () (krok 9 na diagrame) Call to close (), výsledkom bude vyprázdnenie zostávajúcich dátových paketov do potrubia a následné čakanie na potvrdenie.
  12. Po prijatí konečného potvrdenia je kontaktovaný NameNode, ktorý informuje, že operácia zápisu do súboru je dokončená.

Prístup k HDFS pomocou rozhrania JAVA API

V tejto časti sa pokúsime porozumieť rozhraniu Java použitému na prístup k súborovému systému Hadoop.

Za účelom programovej interakcie so súborovým systémom Hadoop poskytuje Hadoop viac tried JAVA. Balík s názvom org.apache.hadoop.fs obsahuje triedy užitočné pri manipulácii so súborom v súborovom systéme Hadoop. Tieto operácie zahŕňajú, otváranie, čítanie, písanie a zatváranie. Súborové API pre Hadoop je v skutočnosti všeobecné a je možné ho rozšíriť tak, aby interagoval s inými súborovými systémami ako HDFS.

Čítanie súboru z HDFS, programovo

Objekt java.net.URL sa používa na čítanie obsahu súboru. Na začiatok musíme urobiť, aby Java rozpoznala Hadoopovu schému URL hdfs. To sa deje tak, že sa na objekt URL zavolá metóda setURLStreamHandlerFactory a odovzdá sa jej inštancia FsUrlStreamHandlerFactory. Túto metódu je potrebné vykonať iba raz za JVM, a preto je uzavretá v statickom bloku.

Príklad kódu je-

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

Tento kód otvára a číta obsah súboru. Cesta tohto súboru na HDFS je programu odovzdaná ako argument príkazového riadku.

Prístup k HDFS pomocou ROZHRANIA COMMAND-LINE

Toto je jeden z najjednoduchších spôsobov interakcie s HDFS. Rozhranie príkazového riadku podporuje operácie so súborovým systémom, ako je čítanie súborov, vytváranie adresárov, presúvanie súborov, mazanie údajov a výpis adresárov.

Môžeme spustiť program „$ HADOOP_HOME / bin / hdfs dfs -help“, aby sme získali podrobnú pomoc s každým príkazom. Tu je 'dfs' príkaz shell HDFS, ktorý podporuje viac čiastkových príkazov.

Niektoré z často používaných príkazov sú uvedené nižšie spolu s podrobnosťami o každom z nich.

1. Skopírujte súbor z lokálneho súborového systému na HDFS

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

Tento príkaz skopíruje súbor temp.txt z lokálneho súborového systému na HDFS.

2. Môžeme vypísať zoznam súborov nachádzajúcich sa v adresári pomocou -ls

$HADOOP_HOME/bin/hdfs dfs -ls /

Vidíme súbor „temp.txt“ (skopírovaný skôr), ktorý je uvedený v adresári „/“ .

3. Príkaz na kopírovanie súboru do lokálneho súborového systému z HDFS

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

Vidíme temp.txt skopírovaný do lokálneho súborového systému.

4. Príkaz na vytvorenie nového adresára

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

Skontrolujte, či je adresár vytvorený alebo nie. Teraz by ste mali vedieť, ako na to ;-)