hadoop
Was ist HDFS?
Suche…
Bemerkungen
Eine gute Erklärung für HDFS und wie es funktioniert.
Die Syntax sollte die Befehle enthalten, die möglicherweise in HDFS verwendet werden.
HDFS - Hadoop Distributed File System
Hadoop Distributed File System (HDFS) ist ein Java-basiertes Dateisystem, das eine skalierbare und zuverlässige Datenspeicherung bietet, die große Cluster von Commodity-Servern umfasst. HDFS, MapReduce und YARN bilden den Kern von Apache ™ Hadoop®.
HDFS ist hochfehlertolerant. Dies wird durch das Speichern mehrerer Kopien (standardmäßig 3) eines bestimmten Datenblocks auf mehreren Knoten erreicht.
Dateien in HDFS suchen
So finden Sie eine Datei im verteilten Hadoop-Dateisystem:
hdfs dfs -ls -R / | grep [search_term]
In dem obigen Befehl
-ls
ist zum Auflisten von Dateien
-R
ist für rekursiv (durch Unterverzeichnisse iterieren)
/
bedeutet aus dem Wurzelverzeichnis
|
um die Ausgabe des ersten Befehls an den zweiten zu übergeben
Befehl grep
, um übereinstimmende Zeichenfolgen zu extrahieren
[search_term]
Dateiname, nach dem in der Liste aller Dateien im hadoop-Dateisystem gesucht werden soll.
Alternativ können Sie auch den folgenden Befehl verwenden, um einige Ausdrücke zu finden und anzuwenden:
hadoop fs -find / -name test -print
Sucht alle Dateien, die dem angegebenen Ausdruck entsprechen, und wendet ausgewählte Aktionen auf sie an. Wenn kein Pfad angegeben ist, wird standardmäßig das aktuelle Arbeitsverzeichnis verwendet. Wenn kein Ausdruck angegeben ist, wird standardmäßig -print verwendet.
Die folgenden primären Ausdrücke werden erkannt:
-
name pattern
-
iname pattern
Wird als wahr ausgewertet, wenn der Basisname der Datei mit dem Muster übereinstimmt, wobei Standard-Dateisystem-Globbing verwendet wird. Wenn -iname verwendet wird, unterscheidet die Groß- und Kleinschreibung nicht.
-
print
-
print0Always
Bewertet zu wahr. Bewirkt, dass der aktuelle Pfadname in die Standardausgabe geschrieben wird. Wenn der Ausdruck -print0
verwendet wird, wird ein ASCII-NULL-Zeichen angehängt.
Folgende Operatoren werden erkannt:
expression -a expression
expression -and expression
expression expression
Blockiert und teilt HDFS
Blockgröße und Blöcke in HDFS : Beim HDFS werden Daten in Blöcken gespeichert, wenn eine Datei geladen wird. Blöcke sind die physischen Partitionen von Daten in HDFS (oder in einem anderen Dateisystem).
Wenn eine Datei auf das HDFS geladen wird, wird sie physisch aufgeteilt (ja, die Datei wird in verschiedene Teile aufgeteilt), die als Blöcke bezeichnet werden. Die Anzahl der Blöcke hängt vom Wert von
dfs.block.size
inhdfs-site.xml
Idealerweise ist die Blockgröße auf einen großen Wert wie 64/128/256 MB gesetzt (im Vergleich zu 4 KB im normalen FS). In den meisten Distributionen von Hadoop 2.x beträgt der Standardwert für die Blockgröße 128 MB. Der Grund für eine höhere Blockgröße liegt darin, dass Hadoop mit PetaBytes von Daten umgehen muss, wobei jede Datei von einigen hundert MegaBytes bis zu TeraBytes reicht.
Angenommen, Sie haben beispielsweise eine Datei mit der Größe 1024 MB. Bei einer Blockgröße von 128 MB erhalten Sie 8 Blöcke mit je 128 MB. Dies bedeutet, dass Ihr Name-Knoten Metadaten von
8 x 3 = 24
Dateien speichern muss (3 ist der Replikationsfaktor).Betrachten Sie dasselbe Szenario mit einer Blockgröße von 4 KB. Dies führt zu
1GB / 4KB = 250000
Blöcken, und der Name-Knoten muss die Metadaten für750000
Blöcke für nur eine 1 GB-Datei speichern. Da alle diese auf Metadaten bezogenen Informationen im Speicher abgelegt werden, wird eine größere Blockgröße bevorzugt, um das zusätzliche Bit des Namensknotens zu speichern.Jetzt wird die Blockgröße nicht auf einen extrem hohen Wert wie 1 GB usw. gesetzt, da idealerweise 1 Mapper für jeden Datenblock gestartet wird. Wenn Sie also die Blockgröße auf 1 GB setzen, verlieren Sie möglicherweise die Parallelität, was insgesamt zu einem langsameren Durchsatz führen kann.
2.) Aufteilungsgröße in HDFS : Aufteilungen in der Hadoop-Verarbeitung sind die logischen Datenblöcke. Wenn Dateien in Blöcke unterteilt werden, werden von Hadoop keine Dateibündel berücksichtigt. Es teilt die Daten nur in Abhängigkeit von der Blockgröße auf. Angenommen, Sie haben eine Datei mit 400 MB, 4 Zeilen und jede Zeile mit 100 128 MB x 3
Daten. Sie erhalten 3 Blöcke mit 128 MB x 3
und 16 MB x 1
. Bei der Berechnung der Eingangssplits während der Datenprognose werden jedoch die Datei- / Datensatzgrenzen berücksichtigt. In diesem Fall haben wir 4 Eingangssplits von jeweils 100 MB, wenn Sie beispielsweise NLineInputFormat
.
Die Split-Größe kann auch pro Job mit der Eigenschaft mapreduce.input.fileinputformat.split.maxsize
Eine sehr gute Erklärung für Blöcke vs. Splits finden Sie in dieser SO Antwort / Antwort