wake-up-neo.com

Datenblockgröße in HDFS, warum 64 MB?

Die Standarddatenblockgröße von HDFS/Hadoop beträgt 64 MB. Die Blockgröße auf der Festplatte beträgt in der Regel 4 KB. Was bedeutet 64 MB Blockgröße? -> Bedeutet dies, dass die kleinste von der Festplatte gelesene Einheit 64 MB beträgt?

Wenn ja, was ist der Vorteil davon? -> einfach für den kontinuierlichen Zugriff auf große Dateien in HDFS?

Können wir dasselbe tun, indem wir die ursprüngliche Blockgröße von 4 KB auf der Festplatte verwenden?

41
dykw
What does 64MB block size mean?

Die Blockgröße ist die kleinste Dateneinheit, die ein Dateisystem speichern kann. Wenn Sie eine Datei speichern, die 1 KB oder 60 MB groß ist, nimmt sie einen Block ein. Sobald Sie die 64-MB-Grenze überschritten haben, benötigen Sie einen zweiten Block.

If yes, what is the advantage of doing that?

HDFS ist für den Umgang mit großen Dateien gedacht. Nehmen wir an, Sie haben eine 1000-MB-Datei. Bei einer Blockgröße von 4 KB müssten Sie 256.000 Anfragen stellen, um diese Datei zu erhalten (1 Anfrage pro Block). In HDFS gehen diese Anforderungen über ein Netzwerk und verursachen viel Overhead. Jede Anfrage muss mit dem Namen Node) bearbeitet werden, um herauszufinden, wo sich dieser Block befindet. Das ist viel Verkehr! Wenn Sie 64-MB-Blöcke verwenden, verringert sich die Anzahl der Anfragen auf 16. Dies reduziert die Kosten für Overhead und Belastung des Namensknotens erheblich.

77
bstempi

Das Design von HDFS wurde ursprünglich vom Design des Google File System (GFS) inspiriert. Hier sind die beiden Gründe für große Blockgrößen, wie im Original-GFS-Papier angegeben (Hinweis 1 zur GFS-Terminologie im Vergleich zur HDFS-Terminologie: chunk = block, chunkserver = datanode, master = namenode; Hinweis 2: Fettdruck gehört mir):

Eine große Blockgröße bietet mehrere wichtige Vorteile. Erstens reduziert es die Notwendigkeit für Clients, mit dem Master zu interagieren, da Lese- und Schreibvorgänge für denselben Block nur eine erste Anforderung an den Master für Informationen zum Blockstandort erfordern . Die Reduzierung ist besonders wichtig für unsere Workloads, da Anwendungen große Dateien meist nacheinander lesen und schreiben. [...] Zweitens : Da ein Client in einem großen Block mit höherer Wahrscheinlichkeit viele Operationen in einem bestimmten Block ausführt, kann dies den Netzwerk-Overhead verringern Durch Beibehalten einer dauerhaften TCP Verbindung zum Chunkserver über einen längeren Zeitraum. Drittens wird die Größe der auf dem Master gespeicherten Metadaten reduziert. Dies ermöglicht es uns, die Metadaten im Speicher zu behalten Dies bringt wiederum andere Vorteile mit sich, die wir in Abschnitt 2.6.1 erörtern werden.

Schließlich sollte ich darauf hinweisen, dass aktuelle Standardgröße in Apache Hadoop 128 MB beträgt.

17
cabad

In HDFS steuert die Blockgröße die Stufe der Replikationsdeklusterung. Je kleiner die Blockgröße, desto gleichmäßiger sind Ihre Blöcke auf die DataNodes verteilt. Je höher die Blockgröße, desto weniger gleichmäßig sind Ihre Daten möglicherweise in Ihrem Cluster verteilt.

Was nützt es dann, eine höhere Blockgröße anstelle eines niedrigen Werts zu wählen? Während theoretisch eine gleichmäßige Verteilung der Daten eine gute Sache ist, hat eine zu geringe Blockgröße einige erhebliche Nachteile. Die Kapazität von NameNode ist begrenzt. Wenn Sie also eine Blockgröße von 4 KB anstelle von 128 MB haben, müssen Sie auch 32768-mal mehr Informationen speichern. MapReduce könnte auch von gleichmäßig verteilten Daten profitieren, indem mehr Kartenaufgaben auf mehr NodeManager und mehr CPU-Kernen gestartet werden. In der Praxis gehen jedoch theoretische Vorteile verloren, wenn keine sequentiellen, gepufferten Lesevorgänge ausgeführt werden können und die einzelnen Kartenaufgaben eine Latenz aufweisen.

4
kosii

Bei normalen Betriebssystemen beträgt die Blockgröße 4 KB und bei Hadoop 64 MB. Denn zur einfachen Pflege der Metadaten in Namenode.

Angenommen, wir haben nur 4 KB Blockgröße in Hadoop und wir versuchen, 100 MB Daten in diese 4 KB zu laden, dann benötigen wir hier immer mehr 4 KB Blöcke. Und namenode muss all diese 4K-Metadatenblöcke verwalten.

Wenn Sie eine Blockgröße von 64 MB verwenden, werden die Daten nur in zwei Blöcke (64 MB und 36 MB) geladen. Dadurch wird die Größe der Metadaten verringert.

Fazit: Um die Belastung des Namensknotens zu verringern, bevorzugen HDFS 64 MB oder 128 MB Blockgröße. Die Standardgröße des Blocks beträgt in Hadoop 1.0 64 MB und in Hadoop 2.0 128 MB.

3
Shivakumar
  1. Wenn die Blockgröße auf weniger als 64 festgelegt wurde, gibt es im gesamten Cluster eine große Anzahl von Blöcken, wodurch NameNode eine enorme Menge an Metadaten verwaltet.
  2. Da wir für jeden Block einen Mapper benötigen, gibt es viele Mapper, die jeweils ein Datenbit verarbeiten, was nicht effizient ist.
1
dpaluy

Dies hat mehr mit Festplattensuchen der Festplatte (Hard Disk Drives) zu tun. Im Laufe der Zeit war die Festplattensuchzeit im Vergleich zum Datenträgerdurchsatz nicht sehr lang. Wenn also die Blockgröße klein ist (was zu zu vielen Blöcken führt), werden zu viele Festplattensuchen durchgeführt, was nicht sehr effizient ist. Während wir von der Festplatte zur SDD wechseln, ist die Zeit für die Festplattensuche nicht sehr sinnvoll, da sie Teile der SSD bewegt.

Wenn zu viele Blöcke vorhanden sind, wird der Name Node belastet. Beachten Sie, dass der Name Node) die gesamten Metadaten (Daten zu Blöcken) im Speicher speichern muss. Im Apache Hadoop beträgt die Standardblockgröße 64 MB und im Cloudera Hadoop 128 MB MB.

1
Praveen Sripati

Der Grund, warum Hadoop 64 MB gewählt hat, war, dass Google 64 MB gewählt hat. Der Grund, warum sich Google für 64 MB entschieden hat, war ein Argument von Goldilocks.

Eine viel kleinere Blockgröße würde den Suchaufwand erhöhen.

Mit einer moderat kleineren Blockgröße werden Map-Tasks so schnell ausgeführt, dass die Kosten für ihre Planung mit den Kosten für ihre Ausführung vergleichbar werden.

Bei einer erheblich größeren Blockgröße verringert sich die verfügbare Leseparallelität und es kann letztendlich schwierig werden, Aufgaben lokal für die Aufgaben zu planen.

Siehe Google Research Publication: MapReduce http://research.google.com/archive/mapreduce.html

1
steven

Nachfolgend wird das Buch "Hadoop: The Definitive Guide", 3. Auflage, erklärt (S. 45).

Warum ist ein Block in HDFS so groß?

HDFS-Blöcke sind im Vergleich zu Plattenblöcken groß, und der Grund dafür ist, die Kosten für Suchvorgänge zu minimieren. Wenn Sie einen Block groß genug machen, kann die Zeit zum Übertragen der Daten von der Festplatte erheblich länger sein als die Zeit zum Suchen des Blockanfangs. Die Zeit zum Übertragen einer großen Datei, die aus mehreren Blöcken besteht, arbeitet mit der Plattenübertragungsrate.

Eine schnelle Berechnung zeigt, dass bei einer Suchzeit von ca. 10 ms und einer Übertragungsrate von 100 MB/s die Blockgröße ca. 100 MB betragen muss, damit die Suchzeit 1% der Übertragungszeit beträgt. Die Standardeinstellung ist 64 MB, obwohl viele HDFS-Installationen 128-MB-Blöcke verwenden. Diese Zahl wird weiter nach oben korrigiert, da die Übertragungsgeschwindigkeiten mit den neuen Laufwerkgenerationen zunehmen.

Dieses Argument sollte jedoch nicht zu weit geführt werden. Map-Tasks in MapReduce werden normalerweise jeweils für einen Block ausgeführt. Wenn Sie also zu wenige Tasks haben (weniger als Knoten im Cluster), werden Ihre Jobs langsamer ausgeführt, als dies ansonsten möglich wäre.

0
deepSleep