2016-04-10 6 views
0

Ich habe eine Eingabedatei von etwa 2 GB. Es enthält Zahlen (Duplikate möglich) von 1 bis 9999 und ist durch Leerzeichen getrennt. Ich möchte die Datei in kleinen Stücken lesen (Stücke von etwa 100000 oder 20000). Welchen Ansatz sollte ich nehmen?Split großen Speicherplatz getrennt Datei von kleinen Dateien Chucks

Ich plane, diese Brocken von Daten auf verschiedenen Knoten in verteilter Weise zu verarbeiten. Ich kann kein HDFS oder ein anderes Dateisystem verwenden, das Daten automatisch aufteilt.

Antwort

0

Wenn Sie diese 2 GB Daten im HDFS speichern, wird es in Blöcke aufgeteilt. Die Standardblockgröße für HDFS beträgt 64 MB. Sie können es auf jede gewünschte Größe einstellen. Wenn Sie beispielsweise die Größe auf 100 MB setzen, werden Ihre Daten in ungefähr 20 Blöcke aufgeteilt.

Wenn Sie andererseits die Daten über MapReduce verarbeiten, können Sie die Anzahl der zu verarbeitenden Daten festlegen, indem Sie die Anzahl der zu verwendenden Mapper definieren. Dazu legen Sie die Split-Größe fest.

Wenn Sie zum Beispiel 20 Blöcke der Größe 100MB in Ihrem HDFS haben, wie oben erwähnt, wenn Sie keine Splitgröße festlegen, wird Hadoop das für Sie herausfinden und 20 Mapper zuweisen. Wenn Sie jedoch beispielsweise die Split-Größe auf 25 MB festlegen, haben Sie 80 Mapper, die Ihre Daten verarbeiten.

Es ist wichtig zu beachten, dies ist nur ein Beispiel. In der Praxis bedeutet die höhere Anzahl von Mappern keine schnellere Verarbeitungszeit. Sie müssten in die Optimierung schauen, um die beste Anzahl an zu verwendenden Splits zu erhalten.

Hoffe, das hilft.

+0

Ich plane nicht, Datei in HDFS zu speichern. Ich suche nach einem Ansatz, um die Datei in Blöcken durch ein Programm zu brechen und später für die Verarbeitung zu verwenden. –