Split-Größe vs Blockgröße in Hadoop

9

Was ist die Beziehung zwischen Split-Größe und Blockgröße in Hadoop? Wie ich in dies gelesen habe, muss die Split-Größe n-mal sein Blockgröße (n ist eine ganze Zahl und n & gt; 0), ist das korrekt? Gibt es ein Muss in der Beziehung zwischen Split-Größe und Blockgröße?

    
duong_dajgja 30.05.2015, 17:33
quelle

2 Antworten

45

In der HDFS-Architektur gibt es ein Konzept von Blöcken. Eine typische Blockgröße, die von HDFS verwendet wird, ist 64 MB. Wenn wir eine große Datei in HDFS platzieren, wird sie in 64 MB Chunks zerhackt (basierend auf der Standardkonfiguration von Blöcken). Angenommen, Sie haben eine Datei von 1 GB und möchten diese Datei in HDFS ablegen, dann wird 1 GB / 64 MB = 16 Split / Blöcke und diese Blöcke werden über die DataNodes verteilt. Diese Blöcke / Chunks befinden sich basierend auf Ihrer Cluster-Konfiguration in einem anderen DataNode.

Die Datenaufteilung erfolgt basierend auf Dateioffsets. Das Ziel des Teilens einer Datei und Speichern derselben in verschiedenen Blöcken ist die parallele Verarbeitung und das Failover von Daten.

Unterschied zwischen Blockgröße und Splitgröße.

Split ist eine logische Aufteilung der Daten, die hauptsächlich während der Datenverarbeitung mit dem Map / Reduce-Programm oder anderen Datenverarbeitungstechniken in Hadoop Ecosystem verwendet wird. Die Split-Größe ist ein benutzerdefinierter Wert, und Sie können Ihre eigene Split-Größe basierend auf Ihrem Datenvolumen auswählen (wie viele Daten Sie verarbeiten).

Split wird im Grunde verwendet, um die Anzahl der Mapper im Map / Reduce-Programm zu steuern. Wenn Sie im Map / Reduce-Programm keine Input-Split-Größe definiert haben, wird die Standard-HDFS-Blockaufteilung als Input-Split angesehen.

Beispiel:

Angenommen, Sie haben eine Datei von 100 MB und HDFS Standard-Blockkonfiguration ist 64 MB, dann wird es in 2 geteilt und belegt 2 Blöcke. Jetzt haben Sie ein Map / Reduce-Programm, um diese Daten zu verarbeiten, aber Sie haben keinen Input-Split angegeben, dann wird basierend auf der Anzahl der Blöcke (2 Blöcke) Input Split für die Map / Reduce-Verarbeitung berücksichtigt und 2 Mapper dafür zugewiesen Job.

Angenommen, Sie haben die Split-Größe (sagen wir 100 MB) in Ihrem Map / Reduce-Programm angegeben, dann werden beide Blöcke (2 Blöcke) als eine einzelne Aufteilung für die Map / Reduce-Verarbeitung betrachtet und 1 Mapper wird dafür zugewiesen Job.

Angenommen, Sie haben die Splits (zB 25MB) in Ihrem Map / Reduce-Programm angegeben, dann werden 4 Eingabesplits für das Map / Reduce-Programm und 4 Mapper für den Job zugewiesen.

Fazit:

  1. Split ist eine logische Division der Eingabedaten, während Block eine physische Teilung der Daten ist.
  2. Die HDFS-Standardblockgröße ist die Standard-Splitgröße, wenn keine Eingabeaufteilung angegeben wurde.
  3. Split ist benutzerdefiniert und Benutzer kann die Split-Größe in seinem Map / Reduce-Programm steuern.
  4. Ein Split kann auf mehrere Blöcke abgebildet werden, und es kann mehrere Splits eines Blocks geben.
  5. Die Anzahl der Kartenaufgaben (Mapper) entspricht der Anzahl der Splits.
Sandeep Singh 30.05.2015, 18:22
quelle
9
  • Nehmen wir an, wir haben eine Datei 400MB mit 4 Datensätzen ( zB : csv-Datei von 400 MB und 4 Zeilen, 100 MB) jeder)

  • Wenn HDFS Blockgröße als 128 MB konfiguriert ist, werden die vier Datensätze nicht gleichmäßig auf die Blöcke verteilt. Es wird so aussehen.

  • Block 1 enthält den gesamten ersten Datensatz und einen 28 MB großen Teil des zweiten Datensatzes.
  • Wenn ein Mapper auf Block 1 ausgeführt werden soll, kann der Mapper nicht verarbeitet werden, da er nicht den gesamten zweiten Datensatz enthält.

  • Dies ist das genaue Problem, das Eingabeteilung löst. Eingabeaufteilungen berücksichtigt logische Datensatzgrenzen.

  • Nehmen wir an, die Eingabesplit Größe ist 200MB

  • Daher sollte der Eingangssplit 1 sowohl den Datensatz 1 als auch den Datensatz 2 enthalten. Und der Eingangssplit 2 beginnt nicht mit dem Datensatz 2, da Datensatz 2 dem Eingangssplit 1 zugewiesen wurde. Input Split 2 beginnt mit Record 3.

  • Aus diesem Grund ist eine Eingabeaufteilung nur ein logischer Datenblock . Es zeigt auf Orte mit Blöcken und beginnt und beendet sie.

  • Wenn die Eingabeaufteilungsgröße das n-fache der Blockgröße beträgt, könnte eine Eingabeaufteilung mehrere Blöcke und daher weniger Mappers für den gesamten Job und daher weniger Parallelität enthalten. (Anzahl der Mapper ist die Anzahl der Input-Splits)

  • Eingabeaufteilungsgröße = Blockgröße ist die ideale Konfiguration.

Hoffe, das hilft.

    
tharindu_DG 10.07.2016 18:15
quelle

Tags und Links