Mikä on HDFS?
HDFS on hajautettu tiedostojärjestelmä erittäin suurten datatiedostojen tallentamiseksi hyödykelaitteistoklustereissa. Se on vikasietoinen, skaalautuva ja erittäin helppo laajentaa. Hadoop toimitetaan HDFS: n ( Hadoop Distributed File Systems ) mukana.
Kun tiedot ylittävät yhden fyysisen koneen tallennuskapasiteetin, on välttämätöntä jakaa se useiden erillisten koneiden kesken. Tiedostojärjestelmää, joka hallitsee tallennuskohtaisia toimintoja koneverkossa, kutsutaan hajautetuksi tiedostojärjestelmäksi. HDFS on yksi tällainen ohjelmisto.
Tässä opetusohjelmassa opimme,
- Mikä on HDFS?
- HDFS-arkkitehtuuri
- Lue käyttö
- Kirjoitustoiminto
- Käytä HDFS: ää JAVA-sovellusliittymän avulla
- Käytä HDFS: ää käyttämällä COMMAND-LINE INTERFACE
HDFS-arkkitehtuuri
HDFS-klusteri koostuu pääasiassa NameNode-järjestelmästä, joka hallinnoi tiedostojärjestelmää Metadata, ja DataNodes-palvelusta, joka tallentaa todelliset tiedot .
- NameNode: NameNodea voidaan pitää järjestelmän isäntänä. Se ylläpitää tiedostojärjestelmäpuuta ja kaikkien järjestelmässä olevien tiedostojen ja hakemistojen metatietoja. Metadatatietojen tallentamiseen käytetään kahta tiedostoa "Namespace image" ja "edit log" . Namenodella on tietoa kaikista tietolohkoista, jotka sisältävät tietyn lohkon tietyn tiedoston, mutta se ei kuitenkaan tallenna lohkojen sijainteja jatkuvasti. Nämä tiedot rekonstruoidaan aina datanodeista järjestelmän käynnistyessä.
- DataNode: DataNode ovat orjia, jotka sijaitsevat jokaisessa klusterin koneessa ja tarjoavat todellisen tallennustilan. Se vastaa asiakkaiden pyyntöjen palvelemisesta, lukemisesta ja kirjoittamisesta.
Luku- / kirjoitusoperaatiot HDFS: ssä toimivat lohkotasolla. HDFS: n datatiedostot on jaettu lohkokokoisiksi paloiksi, jotka tallennetaan itsenäisinä yksikköinä. Oletuslohkon koko on 64 Mt.
HDFS toimii datan replikaation käsitteellä, jossa luodaan useita kopioita datalohkoista ja jaetaan solmuihin koko klusterissa tietojen korkean saatavuuden mahdollistamiseksi solmuvikojen sattuessa.
Tiedätkö? HDFS: ssä oleva tiedosto, joka on pienempi kuin yksi lohko, ei vie lohkon koko tallennustilaa.
Lue käyttö HDFS: ssä
Tietojen lukupyyntöä palvelevat HDFS, NameNode ja DataNode. Kutsu lukija 'asiakkaaksi'. Alla oleva kaavio kuvaa tiedostojen lukutoimintoa Hadoopissa.
- Asiakas käynnistää lukupyynnön kutsumalla FileSystem-objektin "open ()" -menetelmän; se on objektin tyyppi DistributedFileSystem .
- Tämä objekti muodostaa yhteyden nimitilanteeseen RPC: n avulla ja saa metatiedot, kuten tiedoston lohkojen sijainnit. Huomaa, että nämä osoitteet ovat tiedoston muutamia ensimmäisiä lohkoja.
- Vastauksena tähän metatietopyyntöön palautetaan DataNode-osoitteet, joilla on kopio kyseisestä lohkosta.
- Kun DataNodes-osoitteet on vastaanotettu, FSDataInputStream- tyyppinen objekti palautetaan asiakkaalle. FSDataInputStream sisältää DFSInputStream, joka huolehtii vuorovaikutuksesta DataNode- ja NameNode-solmien kanssa. Edellä olevassa kaaviossa esitetyssä vaiheessa 4 asiakas käyttää 'read ()' -menetelmää, joka saa DFSInputStreamin muodostamaan yhteyden ensimmäisen DataNode-tiedoston ja tiedoston ensimmäisen lohkon kanssa.
- Tiedot luetaan virtojen muodossa, joissa asiakas käyttää 'read ()' -menetelmää toistuvasti. Tämä luku () -operaation prosessi jatkuu, kunnes se saavuttaa lohkon loppuun.
- Kun lohkon loppu on saavutettu, DFSInputStream sulkee yhteyden ja etsii seuraavan lohkon seuraavan DataNoden
- Kun asiakas on suorittanut lukemisen, se kutsuu close () -menetelmää.
Kirjoitustoiminto HDFS: ssä
Tässä osassa ymmärretään, miten tiedot kirjoitetaan HDFS: ään tiedostojen kautta.
- Asiakas aloittaa kirjoitusoperaation kutsumalla DistributedFileSystem-objektin "create ()" -menetelmän, joka luo uuden tiedoston - vaihe nro. 1 yllä olevassa kaaviossa.
- DistributedFileSystem-objekti muodostaa yhteyden NameNode-sovellukseen RPC-kutsua käyttäen ja aloittaa uuden tiedoston luomisen. Tämä tiedosto luo operaatio ei kuitenkaan liitä mitään lohkoja tiedostoon. NameNoden vastuulla on varmistaa, että tiedostoa (jota luodaan) ei ole jo olemassa ja asiakkaalla on oikeat oikeudet uuden tiedoston luomiseen. Jos tiedosto on jo olemassa tai asiakkaalla ei ole riittävää lupaa uuden tiedoston luomiseen, IOException heitetään asiakkaalle. Muuten operaatio onnistuu ja NameNode luo uuden tietueen tiedostolle.
- Kun uusi tietue NameNode-palvelussa on luotu, FSDataOutputStream-tyyppinen objekti palautetaan asiakkaalle. Asiakas käyttää sitä tietojen kirjoittamiseen HDFS: ään. Tiedon kirjoitusmenetelmää käytetään (kaavio 3).
- FSDataOutputStream sisältää DFSOutputStream-objektin, joka huolehtii tiedonsiirrosta DataNodes ja NameNode kanssa. Kun asiakas jatkaa tietojen kirjoittamista, DFSOutputStream jatkaa pakettien luomista näillä tiedoilla. Nämä paketit asetetaan jonoon, jota kutsutaan nimellä DataQueue .
- On vielä yksi komponentti nimeltä DataStreamer, joka kuluttaa tätä DataQueue . DataStreamer pyytää myös NameNodelta uusien lohkojen allokointia ja valitsee siten halutut DataNode-tiedostot, joita käytetään replikointiin.
- Nyt replikointiprosessi alkaa luomalla putki DataNodes-sovelluksella. Meidän tapauksessamme olemme valinneet replikointitasoksi 3, joten valmisteilla on 3 DataNodea.
- DataStreamer kaataa paketteja putken ensimmäiseen DataNode-solmuun.
- Jokainen putkilinjan DataNode tallentaa sen vastaanottaman paketin ja välittää sen edelleen putkilinjan toiselle DataNode-solmulle.
- DFSOutputStream ylläpitää toista jonoa, 'Ack Queue', säilyttämään paketteja, jotka odottavat kuittausta DataNodesilta.
- Kun jonossa olevan paketin kuittaus on saatu kaikista putkilinjan DataNodeista, se poistetaan Ack Queue -palvelusta. Jos DataNode epäonnistuu, tämän jonon paketteja käytetään toiminnan aloittamiseen uudelleen.
- Kun asiakas on valmis kirjoittamaan tietoja, se kutsuu close () -menetelmää (kaavio 9). Kutsu sulkemaan () johtaa jäljellä olevien datapakettien huuhteluun putkistoon ja seuraa kuittausta.
- Kun lopullinen kuittaus on vastaanotettu, NameNode-palveluun otetaan yhteyttä kertomaan, että tiedoston kirjoitusoperaatio on suoritettu.
Käytä HDFS: ää JAVA-sovellusliittymän avulla
Tässä osassa yritämme ymmärtää Java-käyttöliittymää, jota käytetään Hadoopin tiedostojärjestelmään pääsyssä.
Hadoop tarjoaa useita JAVA-luokkia voidakseen olla vuorovaikutuksessa Hadoopin tiedostojärjestelmän kanssa ohjelmallisesti. Organ.apache.hadoop.fs-niminen paketti sisältää luokkia, jotka ovat hyödyllisiä Hadoopin tiedostojärjestelmän tiedoston käsittelyssä. Nämä toiminnot sisältävät, avaamisen, lukemisen, kirjoittamisen ja sulkemisen. Itse asiassa Hadoopin tiedosto-sovellusliittymä on yleinen ja sitä voidaan laajentaa vuorovaikutukseen muiden tiedostojärjestelmien kuin HDFS: n kanssa.
Tiedoston lukeminen HDFS: stä ohjelmallisesti
Objektia java.net.URL käytetään tiedoston sisällön lukemiseen. Aluksi meidän on saatava Java tunnistamaan Hadoopin hdfs-URL-malli. Tämä tapahtuu kutsumalla setURLStreamHandlerFactory- menetelmä URL-objektille ja FsUrlStreamHandlerFactory-ilmentymä välitetään sille. Tämä menetelmä on suoritettava vain kerran JVM: ää kohti, joten se on suljettu staattiseen lohkoon.
Esimerkkikoodi 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);}}}
Tämä koodi avaa ja lukee tiedoston sisällön. Tämän tiedoston polku HDFS: llä välitetään ohjelmalle komentoriviargumenttina.
Käytä HDFS: ää käyttämällä COMMAND-LINE INTERFACE
Tämä on yksi yksinkertaisimmista tavoista olla vuorovaikutuksessa HDFS: n kanssa. Komentoriviliittymä tukee tiedostojärjestelmän toimintoja, kuten tiedoston lukemista, hakemistojen luomista, tiedostojen siirtämistä, tietojen poistamista ja hakemistojen luettelointia.
Voimme suorittaa '$ HADOOP_HOME / bin / hdfs dfs -help' saadaksesi yksityiskohtaista apua jokaisesta komennosta. Tässä 'dfs' on HDFS: n komentokomento, joka tukee useita alikomentoja.
Jotkut yleisesti käytetyistä komennoista on lueteltu alla yhdessä joidenkin yksityiskohtien kanssa.
1. Kopioi tiedosto paikallisesta tiedostojärjestelmästä HDFS: ään
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /
Tämä komento kopioi tiedoston temp.txt paikallisesta tiedostojärjestelmästä HDFS: ään.
2. Voimme listata hakemistossa olevat tiedostot -ls: n avulla
$HADOOP_HOME/bin/hdfs dfs -ls /
Voimme nähdä, että tiedosto 'temp.txt' (kopioitu aiemmin) on lueteltu hakemistossa '/' .
3. Komento kopioi tiedosto paikalliseen tiedostojärjestelmään HDFS: stä
$HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt
Voimme nähdä, että temp.txt on kopioitu paikalliseen tiedostojärjestelmään.
4. Luo uusi hakemisto komennolla
$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory
Tarkista, onko hakemisto luotu vai ei. Nyt sinun pitäisi tietää, miten se tehdään ;-)