Hadoop-Lab: HDFS und MapReduce, mit einer Datei zum Ablegen und einer Wortzählung zum Lesen
In diesem Lab erhält jede lernende Person einen kleinen eigenen Hadoop-Cluster: HDFS, das verteilte Dateisystem, mit einem NameNode und einem DataNode, und YARN, mit einem ResourceManager und einem NodeManager, um MapReduce-Jobs auszuführen. Beim Start führt der Cluster die eigene Wortzählung von Hadoop auf einem Beispielsatz aus, und die lernende Person legt eine eigene Datei in HDFS ab, listet sie auf, liest sie wieder und liest die Wortzählung.
Es ist das eigene Image des Apache-Projekts, unverändert ausgeführt, es gibt also nichts Verwundbares anzugreifen: nur ein System zum Erkunden. Die Lab-Kopie hat keine Verbindung ins Internet und keine zu anderen Lernenden.
Was die Lernenden lernen
Wie ein Big-Data-System Daten speichert und verarbeitet. Eine Datei wird von zwei Arten von Maschinen gehalten: dem NameNode, der weiß, welche Blöcke zu welcher Datei gehören, und dem DataNode, der die Bytes speichert. Das Schreiben einer Datei besteht aus zwei Anfragen (der NameNode wählt einen DataNode, der DataNode nimmt die Daten entgegen), und die Lernenden sehen das mit curl selbst. Dann lesen sie die Ausgabe einer MapReduce-Wortzählung, eine Zeile für jedes Wort und wie oft es vorkam, und sehen den Job in YARN als abgeschlossen aufgeführt. Das Lab passt zu Einheiten über Daten, Cloud, Big Data und verteilte Systeme; prüfen Sie die Einheit Ihrer eigenen Prüfungsorganisation für den genauen Wortlaut.
Im Browser ausführen
Das Lab hat fünf Dienste: namenode, datanode, resourcemanager, nodemanager und client. Im Terminal des Labs gibt es keinen Befehl hadoop, daher spricht es mit HDFS per HTTP über curl: WebHDFS liegt unter http://namenode:9870/webhdfs/v1/ und die Liste der Jobs unter http://resourcemanager:8088/ws/v1/cluster/apps. Der Cluster hat beim Start die Wörter eines Beispielsatzes gezählt und das Ergebnis in /user/lab/wordcount-out hinterlassen; diese Zählung starten die Lernenden nicht selbst. Um einen MapReduce-Job auf ihrer eigenen Datei auszuführen, verwenden sie im Terminal docker exec client hadoop jar, denn im Dienst client liegt der Befehl hadoop. Beim Stoppen des Labs wird nichts gespeichert, und der Start dauert etwa eine Minute.
- Container-Seite öffnen. Öffnen Sie in der Leiste „Entwickeln“ und wählen Sie „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Alle anderen Labs brauchen ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und klicken Sie dann auf „Starten“.
- Lab suchen. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie Hadoop: HDFS and MapReduce.
- Auf „Starten“ klicken. „Starten“ führt das Lab unverändert mit einem einzigen Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
- Öffnen. Auf der Seite des Labs hat die Lab-Leiste zwei Links: HDFS NameNode, die Seite, die jede Datei auflistet, und YARN ResourceManager, die Seite, die die Jobs auflistet. Wählen Sie auf der NameNode-Seite Utilities, dann Browse the file system, und öffnen Sie /user/lab. Im Terminal neben dem Lab listet curl http://namenode:9870/webhdfs/v1/user/lab/input?op=LISTSTATUS denselben Ordner auf, und curl -L mit op=OPEN auf /user/lab/wordcount-out/part-r-00000 gibt die Wortzählung aus.
Was Lernende abgeben sollen
Den Pfad einer Datei, die sie in HDFS abgelegt haben, die Zeilen der Wortzählung, die MapReduce daraus erstellt hat, und einen Satz dazu, was NameNode und DataNode jeweils tun. Jede lernende Person kann einen eigenen Text wählen, die Antworten unterscheiden sich also. Für anspruchsvollere Arbeiten fragen Sie, warum eine Datei mit zwei Anfragen gelesen wird und warum ein echter Cluster von jedem Block drei Kopien hält, wenn dieser nur eine hält.
Nichts wird automatisch bewertet. Die Grenzen des Labs sollte man ausdrücklich nennen: Es hat einen DataNode und einen NodeManager, es zeigt also, wie Hadoop aufgebaut ist, aber nicht, wie es den Ausfall einer Maschine übersteht oder einen großen Job beschleunigt, und Berechtigungen sind ausgeschaltet.
Eine Basics-Lektion zu diesem Lab
Hadoop Basics ist eine kleine Lektion, die in diesem Lab durchgearbeitet wird, mit erklärten Schritten und einer Schaltfläche „Ausführen“, die ihren Befehl in das Terminal der lernenden Person tippt. Sie legt mit curl eine Datei mit einem Satz in HDFS ab, listet sie auf und liest sie wieder, liest dann die vom Cluster erstellte Wortzählung und fragt den ResourceManager, wie der Job verlaufen ist.
Ein kostenloses persönliches Konto bekommt die Lektion im Modul Basics auf der Startseite, jede Einrichtung kann sie aus dem Basics-Ordner der Bibliothek kopieren, und eine neue Einrichtung beginnt mit ihr in einem Modul namens Lab Basics (Sample). Sie ist absichtlich klein: Sie zeigt Lehrkräften, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
Der Code auf GitHub
Die Compose-Datei führt ein öffentliches Image fünfmal aus, apache/hadoop auf 3.4.1 festgelegt und unverändert. Apache Hadoop steht unter der Apache License 2.0, und wir verteilen es nicht. Jeder Dienst schreibt beim Start seine eigene Konfiguration, die Heaps sind stark verkleinert und der Job läuft als ein kleiner Job, damit eine Kopie in den Arbeitsspeicher der Plattform passt. Der Test des Repositorys spielt das Lab als lernende Person durch, einschließlich einer geschriebenen, wieder gelesenen und gezählten Datei, unter denselben Grenzen, die die Plattform anwendet.
Als Aufgabe stellen
Schreiben Sie in die Aufgabe, welche Datei in HDFS abzulegen ist und was abgegeben werden soll.
- Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-hadoop mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie es ändern möchten.
- Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, den Sie gesehen haben. Eine spätere Änderung im Repository verändert also kein Lab, das Sie bereits gestellt haben. Starten Sie zuerst Ihre eigene Kopie.
- Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit Fälligkeitsdatum, und schreiben Sie in die Aufgabe, was zu tun ist und was abgegeben werden soll.
- Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und die abgegebene Arbeit, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Häufige Fragen
- Warum kann ich auf der NameNode-Seite keine Datei lesen?
- Die NameNode-Seite listet die Dateien und Ordner auf, aber die Bytes einer Datei liegen auf dem DataNode, und der Browser wird zum Lesen dorthin weitergeleitet, was eine Lab-Kopie nicht öffnet. Lesen Sie eine Datei stattdessen im Terminal mit curl -L und op=OPEN: Das -L folgt der Weiterleitung des NameNode zum DataNode.
- Bleiben die Dateien erhalten, wenn das Lab gestoppt wird?
- Nein. HDFS hält seine Daten in den eigenen Containern des Labs, ein gestopptes Lab startet also wieder leer, und die Beispiel-Wortzählung läuft neu. Bitten Sie die Lernenden, abzugeben, was sie gemacht haben, bevor sie das Lab stoppen.
- Bewertet das Hadoop-Lab die Wortzählung automatisch?
- Nein. Nichts wird automatisch bewertet. Bitten Sie die Lernenden daher, den Pfad der Datei abzugeben, die sie in HDFS abgelegt haben, und die Zeilen der daraus erstellten Wortzählung. Ein Satz dazu, was NameNode und DataNode jeweils tun, zeigt, ob sie es verstanden haben.