Einführung
Der Einzelhändler hat eine Produktdatei erhalten. Ein Kollege braucht eine Kopie zur Prüfung, ein anderer eine archivierte Version, und Sie müssen die geprüfte Datei zur Kontrolle herunterladen. Werden dabei versehentlich die Originaldaten ersetzt oder gelöscht, verliert das Team seine verlässliche Eingabe.
Der Lebenszyklus einer Datei umfasst alle Aktionen, die sie durchläuft: Eingang, Nutzung, Archivierung, Export und schließlich Entfernung. HDFS bietet für jede Aktion Operationen, deren Auswirkungen sich jedoch unterscheiden. Hoch- und Herunterladen kopieren zwischen Dateisystemen; Kopieren und Verschieben innerhalb von HDFS bleiben in HDFS.
Sie richten getrennte Verzeichnisse für Rohdaten, Archive und temporäre Arbeit ein, bewahren die Rohdatei auf, exportieren ein Archiv und entfernen nur eine entbehrliche Kopie. HDFS-Pfade sowie Befehle zum Hochladen und Lesen kennen Sie bereits; dieses Lab ergänzt die sorgfältige Dateiverwaltung. Umgebung und Daten sind unabhängig von vorherigen Labs. Verwenden Sie durchgehend das Terminal.
Bewahren Sie eine Rohdateneingabe auf
In diesem Schritt laden Sie die Eingabe des Einzelhändlers in ein Verzeichnis hoch, das für Originaldateien vorgesehen ist.
Eine Rohdatei ist eine Eingabe, die in ihrer ursprünglichen Form aufbewahrt wird. Ein separates scratch-Verzeichnis enthält temporäre Arbeit, ein archive-Verzeichnis eine aufbewahrte Kopie. Verzeichnisnamen setzen diese Regeln nicht automatisch durch; sie machen Ihre Absichten sichtbar.
Beginnen Sie im lokalen Arbeitsverzeichnis:
cd /home/labex/project
Lesen Sie die Eingabe vor dem Speichern:
cat /home/labex/project/data/products.txt
Sie enthält:
notebook pen notebook
folder pen
notebook folder
Verwenden Sie -mkdir -p mit drei Verzeichnispfaden. HDFS erstellt jedes benannte Verzeichnis und alle fehlenden übergeordneten Verzeichnisse:
hdfs dfs -mkdir -p /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive /user/labex/file-lifecycle/scratch
Laden Sie die lokale Eingabe in das Rohdatenverzeichnis hoch:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/file-lifecycle/raw/products.txt
Ein erfolgreicher Upload gibt normalerweise nichts aus. Bei einer Wiederholung schützt ein Fehler wegen des bereits vorhandenen Ziels die gespeicherte Datei vor versehentlichem Überschreiben. Prüfen Sie die gespeicherte Eingabe, anstatt sie zu löschen, nur um den Fehler zu beseitigen:
hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt
Der Text sollte mit dem lokalen Original übereinstimmen. Auch im lokalen Dateisystem bleibt das Original erhalten: -put kopiert seine lokale Quelle und verschiebt sie nicht. Für die folgenden Arbeiten verwenden Sie Kopien, damit diese Rohdateneingabe unverändert bleibt.
Kopieren und archivieren Sie innerhalb von HDFS
In diesem Schritt erstellen Sie eine Kopie zur Prüfung und verschieben diese anschließend ins Archiv, ohne die Rohdateneingabe zu verschieben.
Die Operation -cp kopiert eine HDFS-Quelle an ein HDFS-Ziel. Anders als bei -put beziehen sich hier beide Pfade auf HDFS:
hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/review.txt
Prüfen Sie die Arbeitskopie:
hdfs dfs -cat /user/labex/file-lifecycle/scratch/review.txt
Sie sollten dieselben Produktbezeichnungen sehen. Ein anderer Name bedeutet weiterhin dieselben Daten und keinen neuen Verkaufsbatch.
Sobald die geprüfte Kopie aufbewahrt werden soll, verschieben Sie sie mit -mv. Das Verschieben innerhalb dieses Dateisystems ändert ihren Pfad; der Quellpfad bleibt dabei nicht bestehen. Sagen Sie vor dem Befehl voraus, welche Datei verschwinden und welche erhalten bleiben wird:
hdfs dfs -mv /user/labex/file-lifecycle/scratch/review.txt /user/labex/file-lifecycle/archive/products-reviewed.txt
Listen Sie das Arbeitsverzeichnis und das Archiv gemeinsam auf. -ls akzeptiert mehrere Pfade:
hdfs dfs -ls /user/labex/file-lifecycle/scratch /user/labex/file-lifecycle/archive
Der Archiveintrag sollte auf /archive/products-reviewed.txt enden; im Arbeitsverzeichnis sollte kein Eintrag review.txt mehr vorhanden sein. Bestätigen Sie, dass die Rohdatei unverändert geblieben ist:
hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt
Ihre drei Zeilen sollten weiterhin übereinstimmen. Wenn Sie nach Abschluss zu diesem Schritt zurückkehren, prüfen Sie das vorhandene Archiv, anstatt das Kopieren und Verschieben zu wiederholen: -mv hat die Quelle im Arbeitsverzeichnis bereits entfernt, und ein vorhandenes Archiv sollte nicht unbedacht überschrieben werden.
Exportieren und vermessen Sie Ihre Dateien
In diesem Schritt laden Sie die archivierte Datei herunter und untersuchen Dateianzahlen und Speicherverbrauch.
Die Operation -get kopiert eine HDFS-Quelle an ein lokales Ziel. Der erste Pfad liegt in HDFS, der zweite ist lokal:
hdfs dfs -get /user/labex/file-lifecycle/archive/products-reviewed.txt /home/labex/project/output/products-exported.txt
Die Eingabeaufforderung sollte ohne Ausgabe zurückkehren. Bei einem bereits abgeschlossenen Download prüfen Sie das lokale Ziel; ein erneuter Download auf eine vorhandene Datei kann melden, dass sie bereits existiert. Prüfen Sie den Inhalt wie im ersten Lab mit dem lokalen Befehl diff:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-exported.txt
Es sollten keine Unterschiede erscheinen. Dies ist eine exportierte Kopie: Sowohl das HDFS-Archiv als auch das lokale Original bleiben bestehen.
Zum Vermessen von Verzeichnisinhalten gibt -count die Verzeichnisanzahl, die Dateianzahl, die Inhaltsgröße in Byte und den Pfad aus. Das angegebene Verzeichnis selbst wird bei der Verzeichnisanzahl mitgezählt:
hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive
Jede Zeile sollte ein Verzeichnis mit einer Datei beschreiben. Beide Zeilen sollten dieselbe Inhaltsgröße aufweisen, da die archivierten Bytes mit den Rohdaten übereinstimmen. Speichern Sie die tatsächlichen Zeilen:
hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive > /home/labex/project/output/file-counts.txt
Die Operation -du fasst Dateigrößen zusammen. -h wählt bei Bedarf gut lesbare Einheiten:
hdfs dfs -du -h /user/labex/file-lifecycle/raw
Die Spalten zeigen die Inhaltsgröße, den durch Replikate belegten Speicherplatz und den Pfad. Diese Umgebung verwendet den Replikationsfaktor 1, daher sollten die beiden Größenspalten für diese Datei übereinstimmen. Blöcke und Replikation erkunden Sie in einem späteren Lab. Eine größere zweite Spalte in einer anderen Umgebung bedeutet nicht unbedingt zusätzliche Geschäftsdatensätze.
Machen Sie sich vor dem nächsten Schritt die Grenzen klar: -cp blieb innerhalb von HDFS, -mv änderte einen HDFS-Pfad und -get erstellte eine lokale Kopie.
Entfernen Sie nur eine entbehrliche Kopie
In diesem Schritt prüfen Sie die Löschrichtlinie und entfernen eine bekannte temporäre Datei, während Eingabe und Archiv erhalten bleiben.
Löschen ist eine andere Art von Operation: Wird eine Datei nicht mehr benötigt, kann ihr Pfad entfernt werden. HDFS kann eine Aufbewahrungsrichtlinie für den Papierkorb (Trash) haben. Eine Wiederherstellung ist aber nicht allein deshalb garantiert, weil Sie HDFS verwenden. Lesen Sie zuerst das konfigurierte Papierkorbintervall in Minuten:
hdfs getconf -confKey fs.trash.interval
Die vorbereitete Umgebung verwendet 0, also ist die Papierkorbaufbewahrung deaktiviert. Betrachten Sie eine Löschung hier als sofortige Entfernung. Ein positiver Wert aktiviert in anderen Umgebungen ein Aufbewahrungsintervall, ersetzt aber nicht das Bewahren verlässlicher Eingaben.
Erstellen Sie eine Kopie, deren einziger Zweck das Üben des Entfernens ist:
hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/disposable.txt
Listen Sie vor jeder Löschung das genaue Ziel auf:
hdfs dfs -ls /user/labex/file-lifecycle/scratch/disposable.txt
Prüfen Sie, dass der Pfad auf scratch/disposable.txt endet, nicht auf raw/products.txt oder die Archivdatei. Die Operation -rm entfernt die angegebene Datei. Sie benötigen weder rekursives Löschen noch einen Platzhalter:
hdfs dfs -rm /user/labex/file-lifecycle/scratch/disposable.txt
Der Befehl meldet, dass die benannte Datei gelöscht wurde. Bei einer Wiederholung würde er eine fehlende Datei melden. Das ist ein Anlass, den Zustand zu prüfen, statt das Löschziel auszuweiten. Listen Sie das Arbeitsverzeichnis auf, um zu bestätigen, dass keine temporären Dateien übrig sind:
hdfs dfs -ls /user/labex/file-lifecycle/scratch
Ein leeres Verzeichnis liefert keine Dateieinträge. Prüfen Sie abschließend die beiden Dateien, die erhalten bleiben müssen:
hdfs dfs -ls /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/archive/products-reviewed.txt
Beide Pfade sollten aufgelistet werden. Sie haben einen Lebenszyklus abgeschlossen, ohne das Original zu verlieren: hochladen, kopieren, archivieren, exportieren, vermessen und ausschließlich temporäre Arbeit entfernen.
Zusammenfassung
Sie haben Rohdaten unverändert aufbewahrt, eine Kopie zur Prüfung erstellt, diese ins Archiv verschoben und in das lokale Dateisystem exportiert. Sie haben Dateianzahlen und Speichergrößen interpretiert, die Papierkorbeinstellung geprüft und nur eine ausdrücklich benannte entbehrliche Datei entfernt.
Als Nächstes wenden Sie diese Vorgehensweisen auf tägliche Batches mit mehreren Dateien an. Zu wissen, welche Dateien in einen Batch gehören, ist genauso wichtig wie zu wissen, wie man sie hochlädt.



