Derzeit verwendet das Unternehmen HDFS, um von jedem Knotenserver hochgeladene Protokolle zu speichern. Aufgrund historischer Probleme sind die Protokolle recht gemischt. Das heißt, dass alle Arten von Daten im Protokoll gespeichert werden. Eine Protokolldatei ist etwa 200 MB groß. Manchmal müssen Sie zum Filtern einiger Inhalte den cat-Befehl von hdfs basierend auf dem Zeitstempel verwenden und dann das Schlüsselwort grep verwenden. Geben Sie es dann über stdin in ein Python-Skript ein, um die relevanten Daten zu verarbeiten.
Jetzt möchte ich es so gestalten, dass ich die abzufragende Zeit, den Knoten, das Schlüsselwort und das passende Modell eingeben und die Aufgabe dann in einem Schritt erledigen kann. Auf diese Weise kann dieses Gadget an alle Personen weitergegeben werden, die Daten benötigen, anstatt den Betrieb und die Wartung jedes Mal um eine Abfrage zu bitten.
Also begann ich, Python-bezogene Module zu studieren. Diese HDFS können hochgeladen und heruntergeladen werden, und der Inhalt von Verzeichnisdateien kann abgefragt werden. Aber wenn es darum geht, diesen Teil zu lesen, wird es schwieriger.
mit client.read(hdfs_path=....., andere Parameter) als Leser:
content = reader.read()
然后再对content处理
Diese Methode ist nicht durchführbar, da zu viele Inhalte auf einmal abgeglichen werden können, wahrscheinlich mehrere Gigabyte an Daten, und es unmöglich ist, alles zu lesen und dann zu verarbeiten. Sie müssen sie während des Lesevorgangs filtern und verarbeiten
Ich habe versucht, den Inhalt einzufügen, aber er passte nicht zum Inhalt.
Wie kann dieses Problem gelöst werden? Ist es möglich, mit Python die Dateipfade aufzuzeichnen, die die Bedingungen erfüllen, dann den HDFS-Befehl auszuführen und dann die passenden Daten an Python zu übertragen? Das scheint zu mühsam zu sein und die Stabilität ist definitiv nicht gut
Später habe ich einen Blick darauf geworfen und herausgefunden, dass beim Erstellen des Clients des HDFS-Moduls dieser mit der Webverwaltungsseite von Hadoop 50070 verbunden war. Ich fragte mich, ob dieses Modul selbst nicht für die Datenanalyse verwendet wurde. Ich hoffe, Sie können mir helfen
多线程呢,并行计算呢?你这样一次性读几个Gb自然慢。既然是hadoop框架,用好mapreduce应该就行了吧。这玩意应该就不是为了快速而设计的。