HDFS oktatóanyag: építészet, olvasás és amp; Írási művelet Java API használatával

Tartalomjegyzék:

Anonim

Mi az a HDFS?

A HDFS egy elosztott fájlrendszer nagyon nagy adatfájlok tárolására, áruhardver-fürtökön fut. Hibatűrő, méretezhető és rendkívül egyszerűen bővíthető. A Hadoop HDFS ( Hadoop Distributed File Systems ) csomagban van .

Amikor az adatok meghaladják az egyetlen fizikai gépen tárolható kapacitást, elengedhetetlenné válik, hogy ezeket különálló gépekre osztjuk fel. Elosztott fájlrendszernek nevezzük azt a fájlrendszert, amely a tárolóspecifikus műveleteket a gépek hálózatán keresztül kezeli. A HDFS egy ilyen szoftver.

Ebben az oktatóanyagban megtanuljuk,

  • Mi az a HDFS?
  • HDFS architektúra
  • Olvassa el a Műveletet
  • Írási művelet
  • Hozzáférés a HDFS-hez a JAVA API használatával
  • Hozzáférés a HDFS-hez a COMMAND-LINE INTERFACE használatával

HDFS architektúra

HDFS klaszter elsősorban áll NameNode , amely kezeli a fájlrendszer metaadatok és DataNodes amely tárolja az aktuális adatokat .

  • NameNode: A NameNode a rendszer masterének tekinthető. Fenntartja a fájlrendszer fát és a rendszerben található összes fájl és könyvtár metaadatait. Két fájl: „Névtérkép” és „Szerkesztési napló” használható a metaadat-információk tárolására. A Namenode ismeri az összes olyan adatcsomópontot, amelyek tartalmazzák az adott fájl adatblokkjait, azonban a blokkok helyét nem tárolja állandóan. Ezeket az információkat minden alkalommal rekonstruálják a datanode-okból, amikor a rendszer elindul.
  • DataNode: A DataNode olyan rabszolga, amely a fürt minden egyes gépén található és biztosítja a tényleges tárhelyet. Feladata az ügyfelek kéréseinek kiszolgálása, olvasása és írása.

A HDFS olvasási / írási műveletei blokk szinten működnek. A HDFS adatfájljai blokk méretű darabokra vannak bontva, amelyeket önálló egységként tárolnak. Az alapértelmezett blokkméret 64 MB.

A HDFS az adatreplikáció koncepcióján működik, ahol több adattömb replikája jön létre és oszlik el a csomópontokon az egész fürtön, hogy csomópont meghibásodás esetén magas rendelkezésre állást biztosítson.

Tudod? A HDFS-ben található fájl, amely kisebb, mint egy blokk, nem foglalja el a blokk teljes tárhelyét.

Olvassa el a műveletet HDFS-ben

Az adatolvasási kérelmet a HDFS, a NameNode és a DataNode szolgálja ki. Hívjuk az olvasót „kliensnek”. Az alábbi ábra a fájlolvasási műveletet mutatja be a Hadoopban.

  1. Az ügyfél a FileSystem objektum 'open ()' metódusának meghívásával kezdeményezi az olvasási kérelmet ; ez egy DistributedFileSystem típusú objektum .
  2. Ez az objektum az RPC használatával csatlakozik a namenode-hoz, és metaadat-információkat kap, például a fájl blokkjainak helyét. Felhívjuk figyelmét, hogy ezek a címek a fájl első néhány blokkját alkotják.
  3. Erre a metaadat-kérésre válaszként visszaküldik a blokk másolatát tartalmazó DataNodes címét.
  4. Miután megkapta a DataNodes címét, egy FSDataInputStream típusú objektum kerül vissza az ügyfélnek. Az FSDataInputStream tartalmazza a DFSInputStream szoftvert, amely gondoskodik a DataNode és a NameNode kapcsolatokról. A fenti diagramban bemutatott 4. lépésben egy kliens meghívja a „read ()” metódust, amely a DFSInputStream- nek kapcsolatot létesít az első DataNode-tal a fájl első blokkjával.
  5. Az adatokat patakok formájában olvassuk, ahol az ügyfél ismételten meghívja a 'read ()' metódust. Ez a read () művelet addig folytatódik, amíg el nem éri a blokk végét.
  6. Miután elérte a blokk végét, a DFSInputStream bezárja a kapcsolatot, és továbblép a következő blokk következő adatcsomópontjának megkeresésére
  7. Miután az ügyfél elvégezte az olvasást, meghív egy close () metódust.

Írási művelet HDFS-ben

Ebben a szakaszban megértjük, hogyan írják az adatokat a fájlok segítségével a HDFS-be.

  1. Az ügyfél az írási műveletet a DistributedFileSystem objektum „create ()” metódusának meghívásával kezdeményezi, amely új fájlt hoz létre - 1. lépés. 1 a fenti ábrán.
  2. A DistributedFileSystem objektum RPC hívás segítségével csatlakozik a NameNode-hoz, és új fájl létrehozását kezdeményezi. Ez a fájl létrehozási művelet azonban nem társít egyetlen blokkot sem a fájlhoz. A NameNode feladata annak ellenőrzése, hogy a (létrehozás alatt álló) fájl még nem létezik-e, és az ügyfélnek megfelelő engedélyei vannak-e új fájl létrehozására. Ha egy fájl már létezik, vagy az ügyfél nem rendelkezik elegendő engedéllyel új fájl létrehozásához, akkor az IOException átadódik az ügyfélnek. Ellenkező esetben a művelet sikeres, és a NameNode új rekordot hoz létre a fájl számára.
  3. Miután létrehozott egy új rekordot a NameNode-ban, egy FSDataOutputStream típusú objektum kerül vissza az ügyfélnek. Az ügyfél felhasználja az adatok beírására a HDFS-be. Az adatírási módszer meghívásra kerül (a diagram 3. lépése).
  4. Az FSDataOutputStream olyan DFSOutputStream objektumot tartalmaz, amely a DataNodes és a NameNode kommunikációt figyeli. Amíg az ügyfél folytatja az adatok írását, a DFSOutputStream folytatja az ilyen adatokkal rendelkező csomagok létrehozását. Ezeket a csomagokat egy sorba sorolják, amelyet DataQueue- nak hívnak .
  5. Van még egy DataStreamer nevű összetevő, amely ezt a DataQueue-t fogyasztja . A DataStreamer emellett új blokkok kiosztását kéri a NameNode-tól, ezáltal kiválasztva a replikációhoz használandó kívánt DataNode-okat.
  6. Most a replikáció folyamata úgy kezdődik, hogy létrehoz egy folyamatot a DataNodes segítségével. Esetünkben a 3-as replikációs szintet választottuk, ezért 3 DataNode van a folyamatban.
  7. A DataStreamer csomagokat önt a folyamat első DataNode-jába.
  8. A folyamatban lévő minden DataNode tárolja az általa fogadott csomagokat, és továbbítja azokat a folyamat második DataNode-jához.
  9. Egy másik, az „Ack Queue” várólistát a DFSOutputStream tartja fenn azoknak a csomagoknak a tárolására, amelyek nyugtázásra várnak a DataNodes-től.
  10. Miután a sorban lévő csomag nyugtázását megkapta a folyamatban lévő összes DataNode-tól, az eltávolításra kerül az 'Ack Queue'-ból. Bármely DataNode meghibásodás esetén az ebből a sorból származó csomagokat használják a művelet újraindításához.
  11. Miután az ügyfél befejezte az adatok írását, meghív egy bezárás () metódust (a diagram 9. lépése). A bezáráshoz szükséges hívás () eredményeként a fennmaradó adatcsomagokat átöblítik a folyamatra, majd nyugtázásra vár.
  12. Miután megkapta a végső nyugtázást, kapcsolatba lépünk a NameNode-szal, hogy elmondjuk neki, hogy a fájlírás művelete befejeződött.

Hozzáférés a HDFS-hez a JAVA API használatával

Ebben a részben megpróbáljuk megérteni a Hadoop fájlrendszeréhez való hozzáféréshez használt Java felületet.

Annak érdekében, hogy a Hadoop fájlrendszerével programszerűen kapcsolatba léphessen, a Hadoop több JAVA osztályt biztosít. Az org.apache.hadoop.fs nevű csomag olyan osztályokat tartalmaz, amelyek hasznosak lehetnek egy fájl kezelésében a Hadoop fájlrendszerében. Ezek a műveletek magukban foglalják a nyitást, az olvasást, az írást és a bezárást. Valójában a Hadoop fájl API általános és kiterjeszthető a HDFS-től eltérő más fájlrendszerekkel való interakcióra.

Fájl olvasása programozottan a HDFS-ből

A java.net.URL objektum egy fájl tartalmának olvasására szolgál. Először is meg kell tennünk a Java számára, hogy felismerje Hadoop hdfs URL sémáját. Ez úgy történik, hogy a setURLStreamHandlerFactory metódust meghívja az URL-objektumra, és az FsUrlStreamHandlerFactory egy példányát továbbítja neki. Ezt a módszert csak egyszer kell végrehajtani JVM-enként, ezért egy statikus blokkba van zárva.

Példakód a

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

Ez a kód megnyitja és elolvassa a fájl tartalmát. A fájl elérési útja a HDFS-en parancssori argumentumként kerül a programhoz.

Hozzáférés a HDFS-hez a COMMAND-LINE INTERFACE használatával

Ez az egyik legegyszerűbb módszer a HDFS-sel való interakcióra. A parancssori felület támogatja a fájlrendszer műveleteit, mint például a fájl olvasása, könyvtárak létrehozása, fájlok áthelyezése, adatok törlése és könyvtárak listázása.

A '$ HADOOP_HOME / bin / hdfs dfs -help' futtatásával részletes segítséget kaphatunk minden parancsról. Itt a 'dfs' a HDFS shell parancsa, amely több alparancsot támogat.

Az alábbiakban felsoroljuk a széles körben használt parancsok néhányat, az egyesekkel együtt.

1. Másoljon egy fájlt a helyi fájlrendszerből a HDFS-be

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

Ez a parancs átmásolja a temp.txt fájlt a helyi fájlrendszerből a HDFS fájlba.

2. Az -ls használatával felsorolhatjuk a könyvtárban található fájlokat

$HADOOP_HOME/bin/hdfs dfs -ls /

Láthatjuk, hogy a ( temp.txt) fájl (amelyet korábban másoltunk) szerepel a '/' könyvtárban.

3. Parancs egy fájl másolására a helyi fájlrendszerbe a HDFS-ről

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

Láthatjuk, hogy a temp.txt másolva van egy helyi fájlrendszerbe.

4. Parancs egy új könyvtár létrehozására

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

Ellenőrizze, hogy létrejött-e egy könyvtár vagy sem. Most tudnia kell, hogyan kell csinálni ;-)