hadoop
Wat is HDFS?
Zoeken…
Opmerkingen
Een goede uitleg van HDFS en hoe het werkt.
Syntaxis moet de opdrachten bevatten die mogelijk in HDFS worden gebruikt.
HDFS - Hadoop gedistribueerd bestandssysteem
Hadoop Distributed File System (HDFS) is een op Java gebaseerd bestandssysteem dat schaalbare en betrouwbare gegevensopslag biedt die is ontworpen voor grote clusters van commodity-servers. HDFS, MapReduce en YARN vormen de kern van Apache ™ Hadoop®.
HDFS is ontworpen om zeer fouttolerant te zijn, wat wordt bereikt door meerdere exemplaren (standaard 3) van een gegeven gegevensblok op meerdere knooppunten op te slaan.
Bestanden zoeken in HDFS
Een bestand zoeken in het Hadoop Distributed-bestandssysteem:
hdfs dfs -ls -R / | grep [search_term]
In het bovenstaande commando
-ls
is voor het weergeven van bestanden
-R
is voor recursief (itereren via submappen)
/
betekent uit de hoofdmap
|
om de uitvoer van het eerste commando naar het tweede te leiden
grep
opdracht om overeenkomende tekenreeksen te extraheren
[search_term]
bestandsnaam [search_term]
moet worden gezocht in de lijst met alle bestanden in het hadoop-bestandssysteem.
Als alternatief kan de onderstaande opdracht ook worden gebruikt om enkele uitdrukkingen te zoeken en toe te passen:
hadoop fs -find / -name test -print
Zoekt alle bestanden die overeenkomen met de opgegeven expressie en past daarop geselecteerde acties toe. Als er geen pad is opgegeven, wordt standaard de huidige werkmap gebruikt. Als er geen expressie is opgegeven, wordt standaard de waarde -print gebruikt.
De volgende primaire uitdrukkingen worden herkend:
-
name pattern
-
iname pattern
Evalueert als waar als de basisnaam van het bestand overeenkomt met het patroon met behulp van standaard bestandssysteem globbing. Als -iname wordt gebruikt, is de overeenkomst niet hoofdlettergevoelig.
-
print
-
print0Always
Evalueert naar waar. Zorgt ervoor dat de huidige padnaam naar standaarduitvoer wordt geschreven. Als de expressie -print0
wordt gebruikt, wordt een ASCII NULL-teken toegevoegd.
De volgende operatoren worden herkend:
expression -a expression
expression -and expression
expression expression
Blokkeert en splitst HDFS
Blokgrootte en blokken in HDFS : HDFS heeft het concept om gegevens in blokken op te slaan wanneer een bestand wordt geladen. Blokken zijn de fysieke partities van gegevens in HDFS (of in een ander bestandssysteem, wat dat betreft).
Wanneer een bestand op de HDFS wordt geladen, wordt het fysiek opgesplitst (ja, het bestand is verdeeld) in verschillende delen die blokken worden genoemd. Het aantal blokken is afhankelijk van de waarde van
dfs.block.size
inhdfs-site.xml
In het ideale geval wordt de blokgrootte ingesteld op een grote waarde zoals 64/128/256 MB (in vergelijking met 4KB's in normale FS). De standaardblokgroottewaarde op de meeste distributies van Hadoop 2.x is 128 MB. De reden voor een grotere blokgrootte is omdat Hadoop is gemaakt om PetaBytes aan gegevens af te handelen met elk bestand variërend van enkele honderden MegaBytes tot de volgorde van TeraBytes.
Stel dat u bijvoorbeeld een bestand van 1024 MB heeft. als uw blokgrootte 128 MB is, krijgt u elk 8 blokken van 128 MB. Dit betekent dat uw naamode metadata van
8 x 3 = 24
bestanden moet opslaan (waarvan 3 de replicatiefactor is).Overweeg hetzelfde scenario met een blokgrootte van 4 KB. Het resulteert in
1GB / 4KB = 250000
blokken en daarvoor is de naamode vereist om de metagegevens voor750000
blokken op te slaan voor slechts een 1GB-bestand. Omdat al deze metadata-gerelateerde informatie in het geheugen wordt opgeslagen, verdient een grotere blokgrootte de voorkeur om dat beetje extra belasting op de NameNode te besparen.Nogmaals, de blokgrootte is niet ingesteld op een extreem hoge waarde zoals 1 GB enz., Omdat idealiter 1 mapper wordt gelanceerd voor elk gegevensblok. Dus als u de blokgrootte instelt op 1 GB, kunt u parallelliteit verliezen, wat in het algemeen tot een langzamere doorvoer kan leiden.
2.) Splitgrootte in HDFS : splitsingen in Hadoop-verwerking zijn de logische brokken gegevens. Wanneer bestanden in blokken worden verdeeld, respecteert hadoop geen enkele bestandsoverschrijdingen. Het splitst alleen de gegevens op, afhankelijk van de blokgrootte. Stel dat u een bestand hebt van 400 MB, met 4 regels en elke regel met 100 MB gegevens, u krijgt 3 blokken van 128 MB x 3
en 16 MB x 1
. Maar wanneer invoersplitsingen worden berekend terwijl de gegevens worden berekend, worden bestands- / recordgrenzen in gedachten gehouden en in dit geval hebben we 4 invoersplitsingen van elk 100 MB, als u bijvoorbeeld NLineInputFormat
.
De mapreduce.input.fileinputformat.split.maxsize
kan ook per taak worden ingesteld met de eigenschap mapreduce.input.fileinputformat.split.maxsize
Een zeer goede uitleg van Blocks vs Splits is te vinden in dit SO Answer /