Laut dem Hadoop - The Definitive Guide
Die von FileInputFormats definierten logischen Datensätze passen normalerweise nicht genau in HDFS-Blöcke. Beispielsweise sind die logischen Datensätze eines TextInputFormat Zeilen, die häufig HDFS-Grenzen überschreiten. Dies hat keinen Einfluss auf die Funktionsweise Ihres Programms - Zeilen werden beispielsweise nicht übersehen oder unterbrochen -, aber es lohnt sich zu wissen, da dies bedeutet, dass datenlokale Karten (dh Karten, die auf demselben Host wie ihre ausgeführt werden) Eingabedaten) führt einige Remote-Lesevorgänge durch. Der dadurch verursachte geringfügige Overhead ist normalerweise nicht signifikant.
Angenommen, eine Datensatzzeile ist auf zwei Blöcke (b1 und b2) aufgeteilt. Der Mapper, der den ersten Block (b1) verarbeitet, bemerkt, dass die letzte Zeile kein EOL-Trennzeichen hat, und holt den Rest der Zeile aus dem nächsten Datenblock (b2).
Wie stellt der Mapper, der den zweiten Block (b2) verarbeitet, fest, dass der erste Datensatz unvollständig ist, und sollte ab dem zweiten Datensatz im Block (b2) verarbeiten?
LineReader.readLine
Funktion behandelt werden. Ich denke nicht, dass dies für Ihre Frage relevant ist, kann aber bei Bedarf weitere Details hinzufügen.