HDFS apmācība: arhitektūra, lasīšana un amp; Rakstīšanas operācija, izmantojot Java API

Satura rādītājs:

Anonim

Kas ir HDFS?

HDFS ir izplatīta failu sistēma ļoti lielu datu failu glabāšanai, kas darbojas preču aparatūras kopās. Tas ir izturīgs pret kļūdām, mērogojams un ārkārtīgi vienkārši paplašināms. Hadoop ir komplektā ar HDFS ( Hadoop Distributed File Systems ).

Kad dati pārsniedz vienas fiziskās mašīnas krātuves ietilpību, ir svarīgi tos sadalīt pa vairākām atsevišķām mašīnām. Failu sistēmu, kas pārvalda īpašas krātuves darbības mašīnu tīklā, sauc par sadalītu failu sistēmu. HDFS ir viena no šādām programmatūrām.

Šajā apmācībā mēs iemācīsimies,

  • Kas ir HDFS?
  • HDFS arhitektūra
  • Izlasiet darbību
  • Rakstīšanas operācija
  • Piekļūstiet HDFS, izmantojot JAVA API
  • Piekļūstiet HDFS, izmantojot COMMAND-LINE INTERFACE

HDFS arhitektūra

HDFS kopu galvenokārt veido NameNode, kas pārvalda failu sistēmu Metadati, un DataNodes, kas glabā faktiskos datus .

  • NameNode: NameNode var uzskatīt par sistēmas galveno. Tas uztur failu sistēmu koku un visu sistēmā esošo failu un direktoriju metadatus. Metadatu informācijas glabāšanai tiek izmantoti divi faili 'Vārdtelpas attēls' un 'Rediģēšanas žurnāls' . Namenode ir zināšanas par visiem datanodiem, kas satur dotā faila datu blokus, tomēr tas nepārtraukti neglabā bloku atrašanās vietas. Šī informācija katru reizi tiek rekonstruēta no datanodiem, kad sistēma startē.
  • DataNode: DataNodes ir vergi, kas atrodas katrā klastera mašīnā un nodrošina faktisko krātuvi. Tas ir atbildīgs par klientu apkalpošanu, lasīšanu un rakstīšanu.

HDFS lasīšanas / rakstīšanas darbības darbojas bloka līmenī. Datu faili HDFS ir sadalīti bloka lieluma gabalos, kas tiek glabāti kā neatkarīgas vienības. Noklusējuma bloka lielums ir 64 MB.

HDFS darbojas pēc datu replikācijas koncepcijas, kurā tiek izveidotas vairākas datu bloku kopijas un tās tiek sadalītas mezglos visā klasterī, lai mezglu atteices gadījumā nodrošinātu augstu datu pieejamību.

Vai Tu zini? HDFS fails, kas ir mazāks par vienu bloku, neaizņem pilnu bloka krātuvi.

Lasiet Darbība HDFS

Datu lasīšanas pieprasījumu apkalpo HDFS, NameNode un DataNode. Sauksim lasītāju par “klientu”. Zemāk redzamā diagramma attēlo failu lasīšanas darbību Hadoop.

  1. Klients uzsāk lasīšanas pieprasījumu, izsaucot FileSystem objekta metodi “open ()” ; tas ir DistributedFileSystem tipa objekts .
  2. Šis objekts izveido savienojumu ar namenodu, izmantojot RPC, un iegūst metadatu informāciju, piemēram, faila bloku atrašanās vietas. Lūdzu, ņemiet vērā, ka šīs adreses ir daži pirmie faila bloki.
  3. Atbildot uz šo metadatu pieprasījumu, DataNodes adreses, kurām ir šī bloka kopija, tiek atgrieztas atpakaļ.
  4. Kad DataNodes adreses ir saņemtas, FSDataInputStream tipa objekts tiek atgriezts klientam. FSDataInputStream satur DFSInputStream, kas rūpējas par mijiedarbību ar DataNode un NameNode. Iepriekš 4. diagrammā parādītajā 4. darbībā klients izsauc “read ()” metodi, kas liek DFSInputStream izveidot savienojumu ar pirmo DataNode ar faila pirmo bloku.
  5. Dati tiek lasīti straumju veidā, kur klients atkārtoti izmanto metodi “read ()” . Šis lasīšanas () darbības process turpinās, līdz tas sasniedz bloka beigas.
  6. Kad bloka beigas ir sasniegtas, DFSInputStream aizver savienojumu un pāriet, lai atrastu nākamo bloka nākamo DataNode
  7. Kad klients ir paveicis lasīšanu, tas izsauc metodi close () .

Rakstīšanas operācija HDFS

Šajā sadaļā mēs sapratīsim, kā dati tiek ierakstīti HDFS, izmantojot failus.

  1. Klients uzsāk rakstīšanas darbību, izsaucot objekta DistributedFileSystem metodi “create ()”, kas izveido jaunu failu - solis Nr. 1 augšējā diagrammā.
  2. Objekts DistributedFileSystem izveido savienojumu ar NameNode, izmantojot RPC izsaukumu, un uzsāk jaunu failu izveidi. Tomēr šī faila izveidošanas darbība ar failu nesaista nevienu bloku. NameNode pienākums ir pārbaudīt, vai fails (kas tiek veidots) jau nepastāv un klientam ir pareizas atļaujas izveidot jaunu failu. Ja fails jau pastāv vai klientam nav pietiekamas atļaujas jauna faila izveidei, IOException tiek nodots klientam. Pretējā gadījumā operācija izdodas, un NameNode izveido jaunu faila ierakstu.
  3. Kad NameNode ir izveidots jauns ieraksts, FSDataOutputStream tipa objekts tiek atgriezts klientam. Klients to izmanto, lai ierakstītu datus HDFS. Tiek izmantota datu rakstīšanas metode (diagrammas 3. darbība).
  4. FSDataOutputStream satur objektu DFSOutputStream, kas rūpējas par saziņu ar DataNodes un NameNode. Kamēr klients turpina rakstīt datus, DFSOutputStream turpina veidot paketes ar šiem datiem. Šīs paketes ir izveidotas rindā, ko sauc par DataQueue .
  5. Ir vēl viens komponents sauc DataStreamer kas patērē šo DataQueue . DataStreamer arī lūdz NameNode piešķirt jaunus blokus, tādējādi izvēloties vēlamos DataNodes, kas jāizmanto replikācijai.
  6. Tagad replikācijas process sākas, izveidojot cauruļvadu, izmantojot DataNodes. Mūsu gadījumā mēs esam izvēlējušies 3 replikācijas līmeni, un tāpēc sagatavošanā ir 3 DataNodes.
  7. DataStreamer ielej paketes cauruļvada pirmajā DataNode.
  8. Katrs cauruļvada DataNode glabā tā saņemto paketi un pārsūta to tālāk cauruļvada otrajam DataNode.
  9. Citu rindu “Ack Queue” uztur DFSOutputStream, lai glabātu paketes, kuras gaida apstiprinājumu no DataNodes.
  10. Kad tiek saņemts apstiprinājums par rindā esošo paketi no visiem DataNodes cauruļvadā, tas tiek noņemts no “Ack Queue”. Jebkuras DataNode kļūmes gadījumā paketes no šīs rindas tiek izmantotas, lai atjaunotu darbību.
  11. Pēc tam, kad klients ir pabeidzis datu rakstīšanu, tas izsauc metodi aizvērt () (diagrammas 9. darbība). Zvans, lai aizvērtu (), rezultātā atlikušās datu paketes tiek izskalotas cauruļvadā, pēc tam gaidot apstiprinājumu.
  12. Kad ir saņemts pēdējais apstiprinājums, tiek sazināts ar NameNode, lai paziņotu, ka faila rakstīšanas darbība ir pabeigta.

Piekļūstiet HDFS, izmantojot JAVA API

Šajā sadaļā mēs cenšamies izprast Java saskarni, ko izmanto, lai piekļūtu Hadoop failu sistēmai.

Lai programmatiski mijiedarbotos ar Hadoop failu sistēmu, Hadoop nodrošina vairākas JAVA klases. Paketē ar nosaukumu org.apache.hadoop.fs ir klases, kas noderīgas, manipulējot ar failu Hadoop failu sistēmā. Šīs darbības ietver, atvēršanu, lasīšanu, rakstīšanu un aizvēršanu. Faktiski Hadoop faila API ir vispārīga, un to var paplašināt, lai mijiedarbotos ar citām failu sistēmām, izņemot HDFS.

Programmiski nolasa failu no HDFS

Objekts java.net.URL tiek izmantots faila satura nolasīšanai. Vispirms mums jāpanāk, lai Java atpazīst Hadoopa hdfs URL shēmu. Tas tiek darīts, izsaucot metodi setURLStreamHandlerFactory URL objektā, un tam tiek nodota FsUrlStreamHandlerFactory instance. Šī metode JVM ir jāizpilda tikai vienu reizi, tāpēc tā ir ievietota statiskā blokā.

Koda piemērs ir

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

Šis kods atver un nolasa faila saturu. Šī faila ceļš uz HDFS tiek pārsūtīts programmai kā komandrindas arguments.

Piekļūstiet HDFS, izmantojot COMMAND-LINE INTERFACE

Šis ir viens no vienkāršākajiem veidiem, kā mijiedarboties ar HDFS. Komandrindas interfeiss atbalsta failu sistēmas darbības, piemēram, faila lasīšanu, direktoriju izveidi, failu pārvietošanu, datu dzēšanu un direktoriju uzskaitīšanu.

Mēs varam palaist '$ HADOOP_HOME / bin / hdfs dfs -help', lai saņemtu detalizētu palīdzību par katru komandu. Šeit 'dfs' ir HDFS čaulas komanda, kas atbalsta vairākas apakškomandas.

Dažas no plaši izmantotajām komandām ir norādītas zemāk, kopā ar dažām detaļām par katru no tām.

1. Kopējiet failu no vietējās failu sistēmas uz HDFS

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

Šī komanda kopē failu temp.txt no vietējās failu sistēmas uz HDFS.

2. Mēs varam uzskaitīt direktorijā esošos failus, izmantojot -ls

$HADOOP_HOME/bin/hdfs dfs -ls /

Mēs varam redzēt, ka fails 'temp.txt' (nokopēts iepriekš) ir norādīts direktorijā '/' .

3. Komanda, lai no HDFS nokopētu failu vietējā failu sistēmā

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

Mēs varam redzēt, ka temp.txt ir nokopēts vietējā failu sistēmā.

4. Komanda, lai izveidotu jaunu direktoriju

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

Pārbaudiet, vai direktorijs ir izveidots. Tagad jums vajadzētu zināt, kā to izdarīt ;-)