Einführung
Sie helfen einem Einzelhändler, eine einfache Frage zu beantworten: Welche Produkte kamen in den täglichen Aufzeichnungen unserer Filialen am häufigsten vor? Bevor Sie etwas zählen können, müssen Sie die Dateien sammeln und sicherstellen, dass ihr Inhalt verfügbar und korrekt ist. Dieses Lab ist Ihr erster Schritt auf diesem Weg.
Von alltäglichen Daten zu Big Data
Eine einzelne Filiale kann ihre täglichen Aufzeichnungen in einer kleinen Datei speichern, die sich auf einem Laptop öffnen lässt. Stellen Sie sich nun Tausende von Filialen vor, die täglich Aufzeichnungen senden, zusätzlich zu Website-Aktivitäten und Lageraktualisierungen. Sie müssen mehr Daten aufbewahren, ständig kommen neue hinzu, und die Dateien können unterschiedlich aufgebaut sein.
Big Data bezeichnet Datenverarbeitungsaufgaben, deren Umfang, Eingangsgeschwindigkeit oder Komplexität die bisher verwendeten Werkzeuge und Ressourcen überfordert. Es gibt keine allgemeingültige Zeilenzahl, ab der eine Datei zu Big Data wird. Die praktischen Fragen lauten: Können Sie die Daten speichern, in der verfügbaren Zeit verarbeiten und bei Geräteausfällen weiterarbeiten?
Für eine kleine Verkaufsdatei können eine Tabellenkalkulation, eine Datenbank oder ein Python-Skript ausreichen. Wenn die Aufgaben wachsen, lassen sich Speicherung und Verarbeitung beispielsweise auf mehrere verbundene Computer verteilen. Eine Gruppe zusammenarbeitender Computer heißt Cluster; das Aufteilen der Arbeit auf diese Rechner heißt verteiltes Rechnen.
Welche Rolle Hadoop spielt
Apache Hadoop ist eine Sammlung quelloffener Werkzeuge zum Speichern und Verarbeiten von Daten in einem Cluster. Zwei Bestandteile vermitteln Ihnen ein erstes Bild:
| Bestandteil | Aufgabe | Frage des Einzelhändlers |
|---|---|---|
| HDFS – Hadoop Distributed File System | Dateien auf mehreren Rechnern speichern und bei entsprechender Konfiguration Kopien ihrer Daten vorhalten | Wo können wir die täglichen Eingabedateien speichern? |
| MapReduce – ein Framework für Stapelverarbeitung | Einen Verarbeitungsauftrag in kleinere Aufgaben zerlegen und deren Ergebnisse zusammenführen | Wie können wir die Produktbezeichnungen in diesen Dateien zählen? |
Ein Batch ist eine abgegrenzte Datenmenge, die gemeinsam verarbeitet wird, etwa die Dateien von gestern. In späteren Labs führen Sie ein vorbereitetes Zählprogramm aus. In diesem Lab arbeiten Sie mit HDFS, dem Speicherbestandteil: Eine Berechnung ist nur sinnvoll, wenn sie die vorgesehenen Daten liest.
Hadoop ist ein Teil einer größeren Landschaft von Datenwerkzeugen. Spätere Kurse stellen Hive für SQL-Abfragen über Dateien, Spark für programmierbare Datenverarbeitung und Kafka für die fortlaufende Ereignisübermittlung vor. Sie benötigen diese Werkzeuge für dieses Lab noch nicht und müssen sich ihre Namen jetzt auch nicht merken.
Ihr erster Teil des Arbeitsablaufs
Der vereinfachte Arbeitsablauf des Einzelhändlers sieht so aus:
Produktdateien sammeln → In HDFS speichern → Einen Batch verarbeiten → Zählergebnisse prüfen
Hier beginnen Sie
Ihre Aufgabe besteht darin, eine Datei hochzuladen, zurückzulesen und zu prüfen, ob ihr Inhalt erhalten geblieben ist. Das ist wie die Kontrolle einer Zutat vor dem Kochen: Erfolgreiche Speicherung ist die Voraussetzung für eine vertrauenswürdige Berechnung.
Das Lab stellt Hadoop auf einem Rechner bereit. So lernen Sie echte HDFS-Befehle, ohne einen Cluster installieren zu müssen. Lokale Dateien und HDFS-Dateien haben auch in dieser Umgebung getrennte Pfade und Zugriffsbefehle. Dieser Aufbau demonstriert weder die Speicherung auf mehreren Rechnern noch die Wiederherstellung nach einem Rechnerausfall. Diese Konzepte werden verständlicher, wenn Sie HDFS später weiter erkunden.
Am Ende dieses Labs können Sie:
- Eine lokale Datei von einer in HDFS gespeicherten Datei unterscheiden.
- Ein HDFS-Verzeichnis erstellen und eine Datei hochladen.
- Eine HDFS-Datei lesen und mit dem lokalen Original vergleichen.
- Dieselben Daten unter einem anderen Zieldateinamen hochladen.
Verwenden Sie während des gesamten Labs die Registerkarte Terminal. Grundlegende Terminalkenntnisse genügen; Java- oder Python-Programmierung ist nicht erforderlich. Wenn Pfade und Terminalbefehle neu für Sie sind, beginnen Sie mit dem Linux-Lernpfad.
Laden Sie Ihre erste Datei in HDFS hoch
In diesem Schritt sehen Sie sich eine lokale Datei an, erstellen ein eigenes HDFS-Verzeichnis und laden die Datei dorthin hoch.
Im Terminal geben Sie Ihre Anfragen ein. Der Befehl hdfs ist ein Client: Er sendet diese Anfragen an den laufenden HDFS-Dienst, der die gespeicherten Dateien verwaltet. Im Folgenden sehen Sie sowohl lokale Linux-Befehle als auch HDFS-Befehle. Am Befehl erkennen Sie, auf welchen Speicher Sie zugreifen.
Das Lab hat die HDFS-Dienste bereits gestartet und eine kleine Eingabedatei vorbereitet. Klicken Sie in das Terminal und führen Sie die folgenden Befehle nacheinander aus. Warten Sie jeweils, bis die Eingabeaufforderung wieder erscheint. Kopieren Sie nur den Befehl, ohne Zeichen der Eingabeaufforderung.
Wechseln Sie mit cd in das lokale Projektverzeichnis:
cd /home/labex/project
Der Pfad beginnt mit / und ist daher ein absoluter Pfad. Ihre lokale Eingabe liegt im Unterverzeichnis data. Der normale Linux-Befehl cat zeigt eine lokale Datei an:
cat /home/labex/project/data/products.txt
Erwarteter Inhalt:
notebook pen notebook
folder pen
notebook folder
Jedes Wort ist eine Produktbezeichnung, und jedes Vorkommen steht in diesem vereinfachten Beispiel für einen erfassten Artikel. Die insgesamt fünf Vorkommen von notebook und pen können Sie bereits von Hand zählen: drei Notizbücher und zwei Stifte. Bei vielen großen Dateien könnte ein Batchprogramm diese Zählung übernehmen.
Behalten Sie diese Frage im Hinterkopf, konzentrieren Sie sich vorerst aber darauf, den Text unverändert zu speichern. Wir verwenden drei gut lesbare Zeilen, damit Sie ein korrektes Ergebnis sofort erkennen. Dieses Beispiel selbst benötigt kein Hadoop.
HDFS hat einen eigenen Verzeichnisbaum. In dieser Umgebung sendet hdfs dfs Dateisystembefehle an HDFS. Wenn Sie mit dem Linux-Befehl mkdir ein lokales Verzeichnis erstellen, entsteht dadurch kein HDFS-Verzeichnis.
Erstellen Sie ein Verzeichnis unter Ihrem HDFS-Heimatverzeichnis /user/labex. Die Operation -mkdir erstellt ein Verzeichnis; -p erstellt auch fehlende übergeordnete Verzeichnisse und akzeptiert ein bereits vorhandenes Zielverzeichnis:
hdfs dfs -mkdir -p /user/labex/your-first-hadoop-lab
Bei Erfolg erscheint normalerweise keine Ausgabe. Nach Abschluss der Operation kehrt die Eingabeaufforderung zurück. Dieses Verzeichnis liegt in HDFS, obwohl sein Pfad dieselbe Schreibweise mit Schrägstrichen wie ein lokaler Pfad verwendet.
Die Operation -put kopiert eine lokale Quelldatei an ein HDFS-Ziel. Der erste Pfad ist lokal, der zweite liegt in HDFS:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products.txt
Ein erfolgreicher Upload erzeugt normalerweise keine Ausgabe und lässt das lokale Original bestehen. Wiederholen Sie diesen Befehl nach einem erfolgreichen Upload, meldet HDFS, dass das Ziel bereits existiert. Sehen Sie sich die Datei dann einfach an; Sie müssen sie weder löschen noch überschreiben.
Listen Sie mit -ls den Inhalt des HDFS-Verzeichnisses auf:
hdfs dfs -ls /user/labex/your-first-hadoop-lab
Sie sollten Found 1 items und einen Dateieintrag sehen, der auf diesen Pfad endet:
/user/labex/your-first-hadoop-lab/products.txt
Der Eintrag enthält außerdem Berechtigungen, Eigentümer, Gruppe, Größe und Änderungszeit. Diese Angaben lernen Sie später genauer kennen. Für diesen Schritt bestätigt der Zielpfad, dass die Datei in HDFS vorhanden ist. Als Nächstes prüfen Sie ihren Inhalt.
Lesen Sie die Datei zurück und prüfen Sie den Inhalt
In diesem Schritt lesen Sie die HDFS-Datei, speichern ihren Inhalt lokal und vergleichen ihn mit dem Original.
Der Einzelhändler möchte später die Bezeichnungen in der gespeicherten Datei zählen. Wurde die falsche Datei hochgeladen oder eine Zeile verloren, könnten die späteren Zählergebnisse falsch sein, selbst wenn das Programm erfolgreich läuft. Eine Verzeichnisauflistung belegt, dass eine Datei existiert, aber nicht, dass ihr Inhalt korrekt ist.
Überlegen Sie vor dem Zurücklesen, was Sie erwarten: Sollte der Upload Produktbezeichnungen verändern oder Zeilen entfernen? Die HDFS-Operation -cat liest eine Datei aus HDFS und gibt ihren Inhalt im Terminal aus:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt
Erwarteter Inhalt:
notebook pen notebook
folder pen
notebook folder
Vergleichen Sie dies mit der lokalen Datei aus Schritt 1. Wörter und Zeilenumbrüche sollten übereinstimmen. Beachten Sie den Unterschied zwischen den Befehlen: cat liest die lokale Datei, während hdfs dfs -cat in dieser Umgebung die HDFS-Datei liest.
Um das zurückgelesene Ergebnis lokal aufzubewahren, verwenden Sie den Operator > der Shell. Er leitet die Ausgabe des Befehls in eine lokale Datei um, erstellt sie bei Bedarf oder ersetzt ihren vorhandenen Inhalt. Das vorbereitete Verzeichnis output ist für Ihre Ergebnisse vorgesehen:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt > /home/labex/project/output/products-readback.txt
Dieses Mal erscheint kein Produkttext im Terminal, weil er in die lokale Ausgabedatei geschrieben wurde. Die HDFS-Quelle bleibt unverändert. Lesen Sie das gespeicherte Ergebnis mit dem lokalen Befehl cat:
cat /home/labex/project/output/products-readback.txt
Es sollte dieselben drei Zeilen zeigen. Sie haben nun ein lokales Original, eine HDFS-Datei und eine lokal zurückgelesene Datei.
Vergleichen Sie das Original und das gespeicherte Ergebnis mit diff. Sind zwei Dateien identisch, gibt diff nichts aus und beendet sich erfolgreich:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-readback.txt
Erscheint die Eingabeaufforderung ohne angezeigte Unterschiede wieder, stimmt der zurückgelesene Inhalt mit dem Original überein. Falls Unterschiede erscheinen, wiederholen Sie das Zurücklesen mit genau dem oben angegebenen HDFS-Quellpfad und lokalen Ausgabepfad und vergleichen Sie erneut.
Üben Sie mit einem neuen Zieldateinamen
In diesem Schritt ändern Sie einen Teil des Uploadbefehls und prüfen, ob sich dadurch der Dateiinhalt verändert.
Sagen Sie vor dem nächsten Befehl das Ergebnis voraus: Wenn die lokale Quelle gleich bleibt und Sie nur den HDFS-Zieldateinamen ändern, verändern sich dann die Produktbezeichnungen? Bleibt die erste HDFS-Datei erhalten?
Laden Sie das lokale Original erneut hoch, diesmal mit products-copy.txt als Zieldateinamen:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products-copy.txt
Wie zuvor erzeugt ein erfolgreicher Upload normalerweise keine Ausgabe. Falls Sie diesen Upload bereits durchgeführt haben, bedeutet die Meldung über das vorhandene Ziel, dass Sie die Datei prüfen sollten, anstatt sie erneut hochzuladen.
Listen Sie das HDFS-Verzeichnis auf, um Ihre Vorhersage zu prüfen:
hdfs dfs -ls /user/labex/your-first-hadoop-lab
Nun sollten Sie Found 2 items mit Einträgen sehen, die auf diese Pfade enden:
/user/labex/your-first-hadoop-lab/products-copy.txt
/user/labex/your-first-hadoop-lab/products.txt
Beide Dateien bleiben erhalten, weil -put die lokale Quelle an das benannte Ziel kopiert; die vorherige HDFS-Datei wird nicht umbenannt. Die zweite Datei ist eine Übungskopie derselben Aufzeichnungen und kein neuer Verkaufstag. Wenn Sie später Batch-Eingaben vorbereiten, wählen Sie Dateien sorgfältig aus, damit doppelte Kopien nicht zweimal gezählt werden.
Lesen Sie die neue HDFS-Datei:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt
Die Ausgabe sollte dieselben drei Zeilen mit Produktbezeichnungen enthalten. Eine Änderung des Dateinamens verändert den Dateiinhalt nicht.
Speichern Sie die neue Datei mit derselben Methode lokal:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt > /home/labex/project/output/products-copy-readback.txt
Vergleichen Sie das gespeicherte Ergebnis mit dem Original:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-copy-readback.txt
Es sollten keine Unterschiede ausgegeben werden. Sie haben beide Teile Ihrer Vorhersage geprüft: Die erste HDFS-Datei ist weiterhin vorhanden, und die zweite enthält identische Daten.
Bestimmen Sie vor dem nächsten Lab, welche Befehle lokale Dateien und welche HDFS-Dateien lesen. Im nächsten Lab prüfen Sie die Konfiguration, die den HDFS-Befehlen vorgibt, wohin sie sich verbinden sollen.
Zusammenfassung
Ausgangspunkt war der Bedarf eines Einzelhändlers, Produktaufzeichnungen zu sammeln und zu zählen. Sie haben gelernt, weshalb wachsende Datenaufgaben verteilte Speicherung und Verarbeitung erfordern können und welche Rolle Hadoop spielt: HDFS speichert Dateien, während MapReduce einen Batch verarbeiten kann.
Sie haben den Speicherteil dieses Arbeitsablaufs durchgeführt: eine lokale Textdatei mit Handelsdaten in HDFS hochgeladen, zurückgelesen und mit diff bestätigt, dass ihr Inhalt erhalten geblieben ist. Anschließend haben Sie vorhergesagt und geprüft, was passiert, wenn Sie nur den HDFS-Zieldateinamen ändern.
Sie haben hdfs dfs -mkdir -p, -put, -ls und -cat geübt und diese HDFS-Operationen von lokalem cat und der Ausgabeumleitung der Shell unterschieden. Als Nächstes erkunden Sie, wie der Hadoop-Client HDFS findet und wie Speicherung und Berechnung zusammenwirken.



