Bereiten Sie Dateien für einen Batch-Job vor

Big DataBeginner
Jetzt üben

Einführung

Ihr Einzelhändler erhält nun Dateien von zwei Filialen für zwei Tage. Das Zählprogramm verarbeitet die Dateien, die Sie ihm geben. Es kann weder erraten, welchen Tag Sie meinen, noch erkennen, dass eine alte Ergebnisdatei ausgeschlossen werden soll. Ein korrektes Programm kann daher eine falsche geschäftliche Antwort liefern, wenn die Eingaben falsch ausgewählt wurden.

Sie haben gelernt, einzelne Dateien aufzubewahren, zu kopieren, zu archivieren und zu exportieren. Hier gehen Sie von einer Datei zu einer Batch-Eingabe über, also einer bewusst ausgewählten Menge von Dateien. Sie halten Tage getrennt, vergleichen Dateianzahlen und Inhalte und speichern ein Manifest: eine Liste genau der HDFS-Dateien, die für einen Lauf ausgewählt wurden.

HDFS speichert Dateiinhalte, ohne Handelsspalten, Datumsangaben oder CSV-Kopfzeilen zu verstehen. Sie untersuchen diese Grenze, bevor Sie die Eingaben ordnen. Dieses Lab bereitet seine lokalen Dateien und ein früheres Beispielergebnis unabhängig vor; es setzt keinen Zustand aus vorherigen Labs voraus. Verwenden Sie das Terminal.

Unterscheiden Sie gespeicherten Text von seiner Bedeutung

In diesem Schritt sehen Sie sich die lokalen Lieferungen an und beobachten, dass beim Hochladen einer CSV-Datei ihre Kopfzeile als gewöhnlicher Text erhalten bleibt.

Beginnen Sie in Ihrem lokalen Arbeitsverzeichnis:

cd /home/labex/project

Listen Sie die Lieferung des ersten Tages auf. Ein Datum im Verzeichnisnamen ist eine nützliche Konvention und kein von HDFS erzwungener Datentyp:

ls /home/labex/project/data/2026-10-14

Sie sollten store-east.txt und store-west.txt sehen. Lesen Sie die Dateien in dieser Reihenfolge mit dem lokalen Befehl cat:

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt

Erwarteter Text:

notebook pen
notebook
folder pen

Hier ist jedes Wort eine aufgezeichnete Produktbezeichnung. Diese Dateien eignen sich für den Wortzählungsablauf, den Sie später kennenlernen. Ein anderes System hat ein anderes Format geliefert. Lesen Sie die kleine CSV-Vorschau:

cat /home/labex/project/data/orders-preview.csv

Erwarteter Text:

product,quantity
notebook,2
pen,1

CSV verwendet Kommas, um Felder zu trennen. Die erste Zeile ist eine Kopfzeile (Header) mit den Spaltennamen; die anderen beiden Zeilen sind Geschäftsdatensätze. HDFS entfernt diese erste Zeile nicht automatisch und interpretiert quantity auch nicht als Ganzzahl.

Bewahren Sie diese Vorschau getrennt vom Batch mit Produktbezeichnungen auf. Erstellen Sie dafür ein HDFS-Verzeichnis:

hdfs dfs -mkdir -p /user/labex/batch-inputs/preview

Laden Sie die CSV-Datei hoch:

hdfs dfs -put /home/labex/project/data/orders-preview.csv /user/labex/batch-inputs/preview/orders.csv

Lesen Sie sie zurück:

hdfs dfs -cat /user/labex/batch-inputs/preview/orders.csv

Alle drei Zeilen einschließlich der Kopfzeile bleiben erhalten. Ob eine Kopfzeile übersprungen oder eine Zahl eingelesen werden soll, ist eine Entscheidung der Verarbeitung. Wenn Sie diese Datei mit der Eingabe aus Produktbezeichnungen mischen, verändert das die Bedeutung der Berechnung, obwohl jede Datei lesbar ist.

Ordnen Sie Lieferungen nach Datum

In diesem Schritt erhält jeder Tag ein eigenes Rohdatenverzeichnis, in das Sie die beiden zugehörigen Filialdateien hochladen.

Verwenden Sie eine Verzeichnisstruktur, die den Unterschied zwischen Eingaben und Ausgaben sichtbar macht:

batch-inputs/
  raw/2026-10-14/       Produktdateien des ersten Tages
  raw/2026-10-15/       Produktdateien des nächsten Tages
  preview/             Beispiel für das CSV-Format
  results/previous-run/  vorbereitete Ausgabe eines früheren Laufs

Das frühere Ergebnis dient nur als Beispieldatei, an der Sie die Eingabeauswahl lernen. Es darf nicht Teil des neuen Rohdatenbatches werden. Erstellen Sie die beiden Tagesverzeichnisse:

hdfs dfs -mkdir -p /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

Das Shell-Muster *.txt passt auf lokale Dateinamen mit der Endung .txt. Im nächsten Befehl erweitert Ihre Shell das nicht in Anführungszeichen gesetzte lokale Muster zu den beiden Quellpfaden, bevor sie den HDFS-Client ausführt. Das letzte Argument ist ein vorhandenes HDFS-Verzeichnis:

hdfs dfs -put /home/labex/project/data/2026-10-14/*.txt /user/labex/batch-inputs/raw/2026-10-14/

Ändern Sie nun nur das Datum an beiden Stellen, um die zweite Lieferung hochzuladen:

hdfs dfs -put /home/labex/project/data/2026-10-15/*.txt /user/labex/batch-inputs/raw/2026-10-15/

Falls die Zieldateien schon existieren, prüfen Sie sie, bevor Sie etwas überschreiben. Eine Rohdateneingabe aufzubewahren ist sinnvoller, als sie nur zu löschen, damit ein Uploadbefehl erneut läuft.

Prüfen Sie jeden Batch mit -count, das Sie im Lab zum Dateilebenszyklus kennengelernt haben:

hdfs dfs -count /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

Jeder Tag sollte ein Verzeichnis und zwei Dateien enthalten. Die Spalten für die Inhaltsgröße müssen nicht übereinstimmen: Die Tage enthalten unterschiedliche Datensätze. Die Dateianzahl allein beweist nicht, dass Sie den richtigen Tag ausgewählt haben. Listen Sie deshalb auch den ersten Tag auf:

hdfs dfs -ls /user/labex/batch-inputs/raw/2026-10-14

Beide Einträge sollten die erwarteten Filialnamen unter 2026-10-14 zeigen. Einige kleine Dateien machen diese Übung übersichtlich. In viel größerem Maßstab verursachen viele winzige Dateien zusätzlichen Metadatenaufwand in HDFS. Das bedeutet aber nicht, dass jede kleine Datei immer zusammengeführt werden muss.

Wählen und prüfen Sie einen Batch

In diesem Schritt erstellen Sie ein genaues Dateimanifest für den 14. Oktober und vergleichen dessen Eingabetext mit der erwarteten lokalen Lieferung.

Überlegen Sie vor dem nächsten Befehl, welches Verzeichnis in das Manifest gehört: der gesamte Baum batch-inputs, der gesamte Baum raw oder nur raw/2026-10-14? Das eng abgegrenzte Tagesverzeichnis entspricht dem angeforderten Tag und schließt den nächsten Tag, die CSV-Vorschau und alte Ergebnisse aus.

Die HDFS-Option -ls -C gibt Pfade ohne die zusätzlichen Spalten der ausführlichen Auflistung aus. Verwenden Sie sie für den ausgewählten Tag:

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14

Die beiden Pfade sollten auf store-east.txt und store-west.txt enden. Damit die gespeicherte Liste leicht vergleichbar ist, leitet eine Shell-Pipeline, geschrieben als |, die Ausgabe des ersten Befehls an einen zweiten weiter. sort sortiert die Zeilen; > speichert das Ergebnis lokal:

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14 | sort > /home/labex/project/output/input-manifest.txt

Lesen Sie Ihr Manifest:

cat /home/labex/project/output/input-manifest.txt

Erwartete Pfade:

/user/labex/batch-inputs/raw/2026-10-14/store-east.txt
/user/labex/batch-inputs/raw/2026-10-14/store-west.txt

Sie können auch auf der HDFS-Seite ein Muster verwenden. Einfache Anführungszeichen erhalten *.txt, damit der HDFS-Client statt Ihrer lokalen Shell die entfernten Pfade abgleicht:

hdfs dfs -cat '/user/labex/batch-inputs/raw/2026-10-14/*.txt' > /home/labex/project/output/selected-input.txt

Bei diesen Dateinamen liest HDFS die east-Datei vor der west-Datei. Speichern Sie den entsprechenden lokalen Text ausdrücklich in derselben Reihenfolge:

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt > /home/labex/project/output/expected-input.txt

Vergleichen Sie beide:

diff /home/labex/project/output/expected-input.txt /home/labex/project/output/selected-input.txt

Es sollten keine Unterschiede erscheinen. Als weitere Prüfung zählt wc -l die durch einen Zeilenumbruch abgeschlossenen Zeilen jeder Datei:

wc -l /home/labex/project/output/selected-input.txt

Das Ergebnis sollte mit 3 beginnen. Das sind drei Textzeilen mit fünf Produktbezeichnungen und nicht drei Bestellungen. Die Bedeutung eines Datensatzes ergibt sich aus Dateiformat und Aufgabe, nicht aus HDFS. Ihr Manifest, die Dateiinhalte und die Zeilenanzahl machen gemeinsam die Auswahl der Eingabe nachvollziehbar.

Zusammenfassung

Sie haben eine CSV-Vorschau von einfachen Dateien mit Produktbezeichnungen getrennt, die Rohdateneingaben jedes Tages in einem eigenen Verzeichnis aufbewahrt und einen Batch mithilfe eines Manifests ausgewählt. Sie haben sowohl Dateinamen als auch Inhalte geprüft, statt sich allein auf einen Upload oder eine Dateianzahl zu verlassen.

In der nächsten Challenge ordnen Sie eine neue Lieferung mithilfe der bereits geübten Dateiverwaltung und Eingabeauswahl.