Verstehen Sie Ihre Hadoop-Umgebung

LinuxBeginner
Jetzt üben

Einführung

Sie können eine Datei in HDFS hochladen. Doch wohin hat Ihr Terminal sie tatsächlich gesendet? Die Tagesdatei eines Einzelhändlers könnte auf einem Laptop, auf dem aktuellen Server oder in einem gemeinsam genutzten Speicher liegen. Wenn Sie die falsche Kopie lesen, kann eine technisch einwandfreie Berechnung auf falschen Daten beruhen. Bevor Sie weitere Dateien verwalten, müssen Sie erkennen, welchen Speicher Ihre Befehle verwenden.

Hadoop trennt die Zuständigkeiten. Hadoop Common stellt gemeinsame Bibliotheken und Hilfsprogramme bereit. HDFS speichert Dateien. MapReduce beschreibt Stapelverarbeitungsaufgaben und führt sie aus. YARN weist Anwendungen Ressourcen zu, darunter auch MapReduce-Jobs. Sie lernen diese Namen schrittweise kennen. Heute untersuchen Sie Speicher und Konfiguration, ohne eine Berechnung auszuführen oder Dienste zu installieren.

Dieses Lab hat drei Ziele: das Standarddateisystem ermitteln, nachweisen, dass identischer Pfadtext auf unterschiedliche Dateien verweisen kann, und die laufenden HDFS-Dienste identifizieren. Am Ende haben Sie Beobachtungen aus Ihrer eigenen Umgebung festgehalten. Alle Beispieldaten werden unabhängig vom vorherigen Lab vorbereitet. Verwenden Sie das Terminal; Programmierkenntnisse sind nicht erforderlich.

Ermitteln Sie das konfigurierte Ziel

In diesem Schritt ermitteln Sie das Standarddateisystem und lesen die konfigurierte Ausführungsart für MapReduce.

Ihr Terminal führt einen Clientbefehl aus. Ein Client fordert einen Dienst zur Ausführung einer Aufgabe auf; der Dienst kann auf diesem oder einem anderen Rechner laufen. Die Konfiguration verbindet den kurzen Clientbefehl mit dem richtigen Ziel. Beginnen Sie in Ihrem lokalen Arbeitsverzeichnis:

cd /home/labex/project

Der Befehl hdfs getconf liest die Hadoop-Konfiguration. Seine Option -confKey fragt eine benannte Einstellung ab. fs.defaultFS bezeichnet das Standarddateisystem, das bei einem Hadoop-Dateisystempfad ohne ausdrücklich angegebenes Schema verwendet wird:

hdfs getconf -confKey fs.defaultFS

Erwarteter Wert:

hdfs://localhost:9000

Dies ist eine URI, also eine Adresse, die auch die Zugriffsart auf eine Ressource angibt. Hier wählt hdfs HDFS aus, localhost bezeichnet diesen Rechner und 9000 den Verbindungsport des Dienstes. Ein Port kennzeichnet einen Netzwerkendpunkt, den ein Dienst verwendet. Sie müssen diesen Port nicht selbst öffnen.

Speichern Sie den beobachteten Wert. Wie im ersten Lab schreibt > die Befehlsausgabe in eine lokale Datei und ersetzt deren bisherigen Inhalt:

hdfs getconf -confKey fs.defaultFS > /home/labex/project/output/default-filesystem.txt

Hadoops Konfigurationsdateien verwenden XML: Eine Eigenschaft besitzt einen name und einen value. Vorerst müssen Sie nur eine Eigenschaft lesen. grep wählt passende Textzeilen aus, und -A 1 schließt die Zeile unmittelbar nach einem Treffer ein:

grep -A 1 '<name>mapreduce.framework.name</name>' /etc/labex-bigdata/hadoop/mapred-site.xml

Die beiden relevanten Zeilen lauten:

    <name>mapreduce.framework.name</name>
    <value>yarn</value>

yarn bedeutet, dass MapReduce-Anwendungen für die Ressourcenverwaltung YARN verwenden sollen. Diese Einstellung allein beweist nicht, dass eine Anwendung läuft. Für dieses Lab wurde HDFS gestartet; die Berechnungsdienste verwenden Sie später beim Erlernen der Jobübermittlung.

Speichern Sie diese Konfigurationszeilen als Beleg, anstatt den erwarteten Wert selbst einzutippen:

grep -A 1 '<name>mapreduce.framework.name</name>' /etc/labex-bigdata/hadoop/mapred-site.xml > /home/labex/project/output/execution-setting.txt

Für eine winzige temporäre Tabelle kann das lokale Dateisystem genügen. Für Archive, die Hadoop-Jobs gemeinsam verwenden, ist das HDFS-Ziel wichtig. Die Wahl eines Werkzeugs beginnt bei einem Bedarf; Sie müssen nicht automatisch jede Datei nach Hadoop hochladen.

Lösen Sie denselben Pfad in zwei Dateisystemen auf

In diesem Schritt lesen Sie zwei vorbereitete Dateien mit identischem Pfadtext und weisen nach, welches Dateisystem der jeweilige Befehl auswählt.

Nur für diesen Vergleich hat die Vorbereitung in jedem Dateisystem eine andere Datei unter /home/labex/project/data/location.txt abgelegt. Das ist möglich, weil das lokale Dateisystem und HDFS getrennte Verzeichnisbäume haben. Das übliche HDFS-Arbeitsverzeichnis des Kurses ist /user/labex; der heute übereinstimmende Pfad macht den Unterschied gut sichtbar.

Eine URI mit file:/// wählt ausdrücklich das lokale Dateisystem aus. Die drei Schrägstriche setzen sich aus dem Schematrenner und dem absoluten Pfad zusammen. Sagen Sie vor dem nächsten Befehl voraus, ob er die lokale oder die gemeinsam genutzte Version liest:

hdfs dfs -cat file:///home/labex/project/data/location.txt

Erwartete Ausgabe:

Local store: draft product file

Obwohl Sie den Hadoop-Client verwendet haben, hat die URI eine lokale Datei ausgewählt. Wählen Sie nun HDFS ausdrücklich mit der in Schritt 1 beobachteten Dienstadresse aus:

hdfs dfs -cat hdfs://localhost:9000/home/labex/project/data/location.txt

Erwartete Ausgabe:

HDFS store: shared product file

Lassen Sie schließlich Schema und Dienstadresse weg. Sagen Sie voraus, welche Version die Standardeinstellung aus Schritt 1 auswählt:

hdfs dfs -cat /home/labex/project/data/location.txt

Die gemeinsam genutzte HDFS-Version erscheint. Ein absoluter Pfad legt den Ort innerhalb eines Dateisystems fest; er wählt nicht selbst das Dateisystem aus. Ein normaler Linux-Befehl cat /home/labex/project/data/location.txt würde weiterhin die lokale Version lesen.

Erfassen Sie die drei Ergebnisse einzeln, um Ihre Vorhersagen mit Belegen zu vergleichen:

hdfs dfs -cat file:///home/labex/project/data/location.txt > /home/labex/project/output/local-result.txt
hdfs dfs -cat hdfs://localhost:9000/home/labex/project/data/location.txt > /home/labex/project/output/hdfs-result.txt
hdfs dfs -cat /home/labex/project/data/location.txt > /home/labex/project/output/default-result.txt

Das HDFS-Ergebnis und das Ergebnis des Standardpfads sollten übereinstimmen. Verwenden Sie diff, das bei gleichen Dateien nichts ausgibt:

diff /home/labex/project/output/hdfs-result.txt /home/labex/project/output/default-result.txt

Dieser Versuch erklärt, warum ein Pfad allein bei der Fehlersuche irreführend sein kann: Prüfen Sie sowohl den Pfad als auch das Dateisystem, zu dem er gehört.

Identifizieren Sie die Speicherdienste

In diesem Schritt verknüpfen Sie die Dateioperationen mit den Rollen von NameNode und DataNode und stellen Ihre Beobachtungen zur Umgebung zusammen.

HDFS trennt die Namens- und Ortsinformationen einer Datei von ihren Daten. Der NameNode verwaltet den Verzeichnisbaum und weiß, welche DataNodes die Blöcke der Datei enthalten. DataNodes speichern diese Blöcke und liefern Dateiinhalte aus. Denken Sie an den Katalog und die Regale einer Bibliothek: Der Katalog hilft, ein Buch zu finden; in den Regalen liegen seine Seiten.

HDFS-Client → NameNode: Speicherort der Dateidaten erfragen
HDFS-Client ↔ DataNode: Dateidaten übertragen

Ein Block ist ein von HDFS verwalteter Teil einer Datei. Später untersuchen Sie Blöcke und Replikate direkt. Prüfen Sie vorerst, ob die Dienste für diese beiden Rollen aktiv sind. systemctl is-active fragt das Betriebssystem nach dem Zustand jedes benannten Dienstes. Dieser Befehl liest den Zustand nur aus:

systemctl is-active labex-hdfs-namenode labex-hdfs-datanode

Sie sollten zwei Zeilen mit active sehen, eine pro Dienst. Speichern Sie diese Beobachtung:

systemctl is-active labex-hdfs-namenode labex-hdfs-datanode > /home/labex/project/output/storage-services.txt

HDFS meldet auch seine Sicht auf die Speicherknoten. dfsadmin -report ist ein administrativer Bericht, der ausschließlich Informationen liest. Der folgende Befehl verwendet die vorbereitete Dienstidentität hdfs über sudo -u hdfs nur zum Lesen dieses Berichts. Führen Sie normale Dateioperationen weiterhin unter Ihrer eigenen Identität labex aus:

sudo -u hdfs /usr/local/bin/hdfs dfsadmin -report

Suchen Sie nach Live datanodes (1) und einem Knoten, dessen Decommission Status den Wert Normal hat. Kapazität, belegter Speicher, Hostkennungen und Zeitstempel variieren; diese Werte müssen nicht mit der VM einer anderen Person übereinstimmen. Ein aktiver Knoten kommuniziert mit dem NameNode. Normal bedeutet, dass er nicht aus dem Betrieb genommen wird.

Speichern Sie den Bericht:

sudo -u hdfs /usr/local/bin/hdfs dfsadmin -report > /home/labex/project/output/storage-report.txt

Dies ist der pseudoverteilte Einzelknotenmodus: Getrennte Hadoop-Dienstprozesse laufen auf einem Rechner. Im lokalen Modus kann ein Programm lokale Dateien ohne HDFS-Dienste verarbeiten; in einem Cluster mit mehreren Rechnern sind Dienste und Speicher auf Hosts verteilt. Ein einzelner DataNode demonstriert hier keine Ausfallsicherheit beim Ausfall des gesamten Rechners.

Wenn Sie später einen Job übermitteln, weist der ResourceManager von YARN Ressourcen zu, und ein NodeManager verwaltet die Arbeit auf jedem Arbeitsrechner. Die heutigen Speicherbeobachtungen erfordern keinen laufenden Job.

Erstellen Sie einen kleinen Bericht, indem Sie Ihre gespeicherten Beobachtungen aneinanderhängen. cat akzeptiert mehrere lokale Eingabepfade in der angegebenen Reihenfolge; > speichert ihren zusammengeführten Inhalt:

cat /home/labex/project/output/default-filesystem.txt /home/labex/project/output/execution-setting.txt /home/labex/project/output/storage-services.txt /home/labex/project/output/storage-report.txt > /home/labex/project/output/environment-report.txt

Lesen Sie ihn zurück:

cat /home/labex/project/output/environment-report.txt

Suchen Sie die Dateisystem-URI, die Einstellung yarn, die beiden Dienstzustände und die Anzahl aktiver Knoten. Sie haben nun Belege, die Ihre Befehle mit der tatsächlichen Umgebung verbinden. Als Nächstes verwalten Sie den Lebenszyklus einer Datei im richtigen Dateisystem.

Zusammenfassung

Sie haben das konfigurierte Dateisystem und die Ausführungsart untersucht und anschließend mit lokalen, ausdrücklichen HDFS- und Standardpfaden nachgewiesen, woher die Daten stammen. Sie haben diese Ergebnisse mit der Metadatenrolle des NameNode und der Speicherrolle des DataNode verknüpft und die Grenzen einer Lernumgebung auf einem einzelnen Rechner erkannt.

Ihre nächste Aufgabe ist die gezielte Verwaltung von Eingaben: kopieren, archivieren, exportieren, messen und ausschließlich die vorgesehenen temporären Dateien entfernen.