Installieren Zuerst müssen Sie Java und Scala installieren, dann Spark herunterladen und installieren, sicherstellen, dass PATH und JAVA_HOME festgelegt sind, und dann müssen Sie Scalas SBT verwenden, um Spark wie folgt zu erstellen: $ sbt/sbt-Baugruppe Die Bauzeit ist relativ lang. Sobald der Build abgeschlossen ist, überprüfen Sie, ob die Installation erfolgreich war, indem Sie Folgendes ausführen: $ ./bin/spark-shell scala> val textFile = sc.textFile("README.md") // Erstelle eine Referenz auf README.md scala> textFile.count // Zähle die Anzahl der Zeilen in dieser Datei scala> textFile.first // Drucke die erste Zeile Apache-Zugriffsprotokoll-Analysator Zuerst müssen wir Scala verwenden, um einen Analysator für Apache-Zugriffsprotokolle zu schreiben. Glücklicherweise hat das schon jemand geschrieben. Laden Sie den Code des Apache-Protokolldatei-Parsers herunter. Verwenden Sie SBT zum Kompilieren und Verpacken von: sbt kompilieren SBT-Test sbt-Paket Der Paketname wird als AlsApacheLogParser.jar angenommen. // das funktioniert $ MASTER=local[4] SPARK_CLASSPATH=AlsApacheLogParser.jar ./bin/spark-shell Bei Spark 0.9 funktionieren einige Methoden nicht: // funktioniert nicht $ MASTER=local[4] ADD_JARS=AlsApacheLogParser.jar ./bin/spark-shell // funktioniert nicht spark> :cp AlsApacheLogParser.jar Erstellen Sie nach erfolgreichem Upload eine AccessLogParser-Instanz im Spark REPL: importiere com.alvinalexander.accesslogparser._ val p = neuer AccessLogParser Jetzt können Sie das Apache-Zugriffsprotokoll accesslog.small genauso lesen, wie Sie zuvor readme.cmd gelesen haben: scala> val log = sc.textFile("accesslog.small") 14/03/09 11:25:23 INFO MemoryStore: EnsureFreeSpace(32856) aufgerufen mit curMem=0, maxMem=309225062 14.03.09 11:25:23 INFO MemoryStore: Block broadcast_0 als Werte im Speicher abgelegt (geschätzte Größe 32,1 KB, frei 294,9 MB) log: org.apache.spark.rdd.RDD[String] = MappedRDD[1] bei Textdatei bei <Konsole>:15 scala> log.Anzahl (viel Ausgabe hier) res0: Lang = 100000 Analysieren von Apache-Protokollen Wir können analysieren, wie viele 404-Fehler es im Apache-Protokoll gibt. Die Erstellungsmethode ist wie folgt: def getStatusCode(Zeile: Option[AccessLogRecord]) = { Zeilenübereinstimmung { Fall Some(l) => l.httpStatusCode Fall Keine => "0" } } Option[AccessLogRecord] ist der Rückgabewert des Analysators. Verwenden Sie es dann in der Spark-Befehlszeile wie folgt: log.filter(Zeile => getStatusCode(p.parseRecord(Zeile)) == "404").Anzahl Diese Statistik gibt die Anzahl der Zeilen zurück, deren httpStatusCode 404 ist. Tiefer graben Wenn wir nun wissen möchten, welche URLs problematisch sind, z. B. ein Leerzeichen in der URL, das einen 404-Fehler verursacht, sind offensichtlich die folgenden Schritte erforderlich:
Erstellen Sie die folgende Methode: // Holen Sie sich das Feld „Anforderung“ aus einem Zugriffsprotokolldatensatz def getRequest(rawAccessLogString: String): Option[String] = { val accessLogRecordOption = p.parseRecord(rawAccessLogString) accessLogRecordOption-Übereinstimmung { Fall Einige(rec) => Einige(rec.request) Fall Keine => Keine } } Fügen Sie diesen Code in Spark REPL ein und führen Sie den folgenden Code aus: log.filter(Zeile => getStatusCode(p.parseRecord(Zeile)) == "404").map(getRequest(_)).count val recs = log.filter(Zeile => getStatusCode(p.parseRecord(Zeile)) == "404").map(getRequest(_)) val distinctRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).distinct distinctRecs.foreach(println) Zusammenfassen Für die einfache Analyse von Zugriffsprotokollen ist grep natürlich die bessere Wahl, für komplexere Abfragen ist jedoch Spark erforderlich. Es ist schwierig, die Leistung von Spark auf einem einzelnen System zu beurteilen. Dies liegt daran, dass Spark für verteilte Systeme mit großen Dateien entwickelt wurde. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: So konfigurieren Sie SSL für den Koa2-Dienst
beschreiben Gibt das Zeitintervall zwischen zwei ...
Inhaltsverzeichnis Vorwort Warum müssen wir die T...
Vorwort Manchmal benötigen wir eine Floating-Effe...
Swap-Speicher ist heutzutage ein gängiger Aspekt ...
Inhaltsverzeichnis 1. Kurzbeschreibung 2. Schritt...
Merkmale einer Single-Page-Anwendung „Annahme:“ A...
Inhaltsverzeichnis 1. setTimeout()-Timer 2. Stopp...
1. Erstellen Sie die Skriptdatei backup.sh #!/bin...
Inhaltsverzeichnis 1. Implementierungsprinzip des...
Beim Codieren werden Sie feststellen, dass viele ...
Es ist großartig, CSS zu verwenden, um verschiede...
1. Anforderungsbeschreibung Bei einem bestimmten ...
Inhaltsverzeichnis 1. Wiederholte Erklärung 1,1 v...
Der von ${param} übergebene Parameter wird als Te...
Code kopieren Der Code lautet wie folgt: <span...