使用Spark和Scala怎么分析Apache訪問日志

使用Spark和Scala怎么分析Apache訪問日志,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、兩當(dāng)網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為兩當(dāng)?shù)雀鞔蟪鞘刑峁┚W(wǎng)站開發(fā)制作服務(wù)。

安裝

首先需要安裝好Java和Scala,然后下載Spark安裝,確保PATH 和JAVA_HOME 已經(jīng)設(shè)置,然后需要使用Scala的SBT 構(gòu)建Spark如下:

$ sbt/sbt assembly

構(gòu)建時間比較長。構(gòu)建完成后,通過運(yùn)行下面命令確證安裝成功:

$ ./bin/spark-shell

scala> val textFile = sc.textFile("README.md") // 創(chuàng)建一個指向 README.md 引用scala> textFile.count // 對這個文件內(nèi)容行數(shù)進(jìn)行計數(shù)scala> textFile.first // 打印出第一行

Apache訪問日志分析器

首先我們需要使用Scala編寫一個對Apache訪問日志的分析器,所幸已經(jīng)有人編寫完成,下載Apache logfile parser code。使用SBT進(jìn)行編譯打包:

sbt compilesbt testsbt package

打包名稱假設(shè)為AlsApacheLogParser.jar。然后在Linux命令行啟動Spark:

// this works$ MASTER=local[4] SPARK_CLASSPATH=AlsApacheLogParser.jar ./bin/spark-shell

對于Spark 0.9,有些方式并不起效:

// does not work$ MASTER=local[4] ADD_JARS=AlsApacheLogParser.jar ./bin/spark-shell// does not workspark> :cp AlsApacheLogParser.jar

上傳成功后,在Spark REPL創(chuàng)建AccessLogParser 實例:

import com.alvinalexander.accesslogparser._val p = new AccessLogParser

現(xiàn)在就可以像之前讀取readme.cmd一樣讀取apache訪問日志accesslog.small:

scala> val log = sc.textFile("accesslog.small")14/03/09 11:25:23 INFO MemoryStore: ensureFreeSpace(32856) called with curMem=0, maxMem=30922506214/03/09 11:25:23 INFO MemoryStore: Block broadcast_0 stored as values to memory (estimated size 32.1 KB, free 294.9 MB)log: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:15scala> log.count(a lot of output here)res0: Long = 100000

分析Apache日志

我們可以分析Apache日志中404有多少個,創(chuàng)建方法如下:

def getStatusCode(line: Option[AccessLogRecord]) = { line match {  case Some(l) => l.httpStatusCode  case None => "0" }}

其中Option[AccessLogRecord]是分析器的返回值。

然后在Spark命令行使用如下:

log.filter(line => getStatusCode(p.parseRecord(line)) == "404").count

這個統(tǒng)計將返回httpStatusCode是404的行數(shù)。

深入挖掘

下面如果我們想知道哪些URL是有問題的,比如URL中有一個空格等導(dǎo)致404錯誤,顯然需要下面步驟:

  1. 過濾出所有 404 記錄  從每個404記錄得到request字段(分析器請求的URL字符串是否有空格等)  不要返回重復(fù)的記錄

創(chuàng)建下面方法:

// get the `request` field from an access log recorddef getRequest(rawAccessLogString: String): Option[String] = { val accessLogRecordOption = p.parseRecord(rawAccessLogString) accessLogRecordOption match {  case Some(rec) => Some(rec.request)  case None => None }}

將這些代碼貼入Spark REPL,再運(yùn)行如下代碼:

log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).countval recs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_))val distinctRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).distinctdistinctRecs.foreach(println)

看完上述內(nèi)容,你們掌握使用Spark和Scala怎么分析Apache訪問日志的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前文章:使用Spark和Scala怎么分析Apache訪問日志
轉(zhuǎn)載源于:http://muchs.cn/article44/ghishe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站虛擬主機(jī)App設(shè)計、App開發(fā)服務(wù)器托管、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)