2017-10-26 7 views
1

Meine Frage ist, dass ich eine Textdatei mit 100 Wörtern durch Leerzeichen getrennt habe und ich muss ein Wort zählen Programm zu tun.Hadoop Mapreduce HDFS Blocksplit

Also, wenn mein Name Knoten die Datei in HDFS-Blöcke teilt, wie können wir sicher sein, dass die Aufspaltung nur am Ende des Wortes erfolgt?

Dh, wenn ich mein 50. Wort in der Textdatei als Hadoop habe, was wäre, wenn es in 64MB Blöcke aufteilt, könnte der Speicher des aktuellen Blocks 64MB in der Mitte des Wortes Hadoop erreichen und somit enthält ein Block ' hatte 'und der andere' oop 'in einem anderen Block.

Sorry, wenn die Frage albern klingen mag, aber bitte geben Sie die Antwort. Danke.

Antwort

1

Ihre Antwort darauf ist inputsplit.

Da HDFS den Inhalt der Datei nicht kennt. Beim Speichern von Daten in mehreren Blöcken kann der letzte Datensatz jedes Blocks unterbrochen werden. Der erste Teil des Datensatzes kann sich in einem Block befinden und der letzte Teil desselben Datensatzes kann in einem anderen Block sein.

Um diese Art von Problemen in Blöcken zu lösen, verwendet MapReduce das Konzept der Input Splits.

"Block" ist nichts anderes als die physische Aufteilung von Daten mit einer Größe von 128 MB, die über mehrere Datenknoten verteilt sind, während "Input Split" eine logische Teilung von Daten ist.

Beim Ausführen von MapReduce-Programm hängt die Anzahl der Mapper von der Anzahl der Eingabeaufteilungen ab, und während der Verarbeitung der Eingabeaufteilung die Position des nächsten Blocks enthält, der den unterbrochenen Datensatz enthält.

Das obige Diagramm zeigt, dass drei HDFS-Blöcke vorhanden sind und der letzte Teil der Block-1-Daten in Block-2 gespeichert ist. In diesem Fall erhält die Eingabeaufteilung die Position von Block-2, um den fehlerhaften Datensatz abzurufen.

hadoopchannel