网站运营
位置:首页>> 网站运营>> 详解如何使用Spark和Scala分析Apache访问日志

详解如何使用Spark和Scala分析Apache访问日志

作者:解道JDON  发布时间:2023-08-04 23:24:07 

标签:Spark,Scala,Apache,日志

安装

首先需要安装好Java和Scala,然后下载Spark安装,确保PATH 和JAVA_HOME 已经设置,然后需要使用Scala的SBT 构建Spark如下:


$ sbt/sbt assembly

构建时间比较长。构建完成后,通过运行下面命令确证安装成功:


$ ./bin/spark-shell

scala> val textFile = sc.textFile("README.md") // 创建一个指向 README.md 引用
scala> textFile.count // 对这个文件内容行数进行计数
scala> textFile.first // 打印出第一行

Apache访问日志分析器

首先我们需要使用Scala编写一个对Apache访问日志的分析器,所幸已经有人编写完成,下载Apache logfile parser code。使用SBT进行编译打包:


sbt compile
sbt test
sbt package

打包名称假设为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 work
spark> :cp AlsApacheLogParser.jar

上传成功后,在Spark REPL创建AccessLogParser 实例:


import com.alvinalexander.accesslogparser._
val p = new AccessLogParser

现在就可以像之前读取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=309225062
14/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>:15
scala> log.count
(a lot of output here)
res0: Long = 100000

分析Apache日志

我们可以分析Apache日志中404有多少个,创建方法如下:


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

这个统计将返回httpStatusCode是404的行数。

深入挖掘

下面如果我们想知道哪些URL是有问题的,比如URL中有一个空格等导致404错误,显然需要下面步骤:

  1. 过滤出所有 404 记录

  2. 从每个404记录得到request字段(分析器请求的URL字符串是否有空格等)

  3. 不要返回重复的记录

创建下面方法:


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

将这些代码贴入Spark REPL,再运行如下代码:


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

总结

对于访问日志简单分析当然是要grep比较好,但是更复杂的查询就需要Spark了。很难判断 Spark在单个系统上的性能。这是因为Spark是针对分布式系统大文件。

来源:https://www.jdon.com/bigdata/analyzing-apache-access-logs-files-spark-scala.html

0
投稿

猜你喜欢

  • 国内著名IT类Blog《awflasher》上最近发布了一篇文章《ByeBye Google Adsense ---全面撤下我的内容广告》。
  • 所谓&ldquo;病毒式网络营销&rdquo;,是通过用户的口碑宣传网络,信息像病毒一样传播和扩散,利用快速复制的方式传向数
  • 之前升级Wordpress用的是最土最不安全的方法,就是不做备份直接覆盖,还好rp好没出过大问题,小问题如果解决不了就请Denis解决。不过
  • 在del.icio.us网摘中,标签是一个字描述,用户可以把它加到书签中。在Technorati网摘中,标签则更象是一个简单的名字分类,用户
  • 近日研究Google Adsense,终于知道了一条赚钱规则,按这个规则,应该可以优化Adsense提高收入了吧。这条规则其实非常的简单就是
  • 核心提示:一个真正有生命力的网站不一定依赖搜索引擎。为什么我坚信淘宝比阿里巴巴更有价值? 一个理由就够了:淘宝现在能做到不理睬百度们,而阿里
  • 【WordPress(或者说任何一个web-based app)可以参考的优化策略】单服务器优化策略:DB优化;缓存优化和页面加载速度优化(
  • 网赚,诈骗是避不开的一个话题。如果你是一个新手,骗子网站对你可能就是一场灾难!不仅N久的努力白忙活了,对新手的信心也是一个很大的打击。那么,
  • 终端服务是在Windows NT中首先引入的一个服务。终端服务使用RDP协议(远程桌面协议)客户端连接,使用终端服务的客户可以在远程以图形界
  • 网站主题就是一辆车。一个网站因为拥有一个热门主题而被网友广知,一个网站因为拥有一个知名主题而四处扩张。主题就象是一架马车,肩负着网站的使命四
  • 小编日前发现,美国搜索巨头Google开始实施“更有进攻性”的搜索广告策略,具体是在搜索结果的顶部显示关键词广告,将广告和搜索结果“在视觉上
  • 经常在一此站长论坛里看到一些站长朋友提问:“为什么我的网站收录这么少?为什么我的收录慢慢减少“等等问题。今天就对这个问题说说自己的看法 其实
  • 大家好!我是拍客网站长【一修】,很荣幸在站长站跟大家分享关于IDC方面的一些名词解释!希望我的解释可以帮助到大家!如果有解释不够清楚 不够明
  • 信息服务器IIS是BACKOFFICE系列产品 * 能最强大、最流行的应用程序,它与整个BACKOFFICE组件一样,IIS也是围绕WINDO
  • 公司内部邮件服务器系统采用的是Microsoft的Exchange 2000,操作平台是Windows 2000 Server,使用近两年来
  • 做网站秘诀有很多高手总结的很好,不管那一种能引导站长成功影响部分人的人生价值观,才是真的成功。作者总结十种也是一种新的领悟。做网站其实心态相
  • 对企业客户来说,Exchange 2007的很多功能相当富有吸引力,包括有:系统管理员——或者用户——可以发动远程设备数据抹除:在Excha
  • 包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(AC
  • 做SEO的人都知道链接在SEO中的重要性,我原来也写过关于正确使用链接认识链接的一些文章,但现在仍然还是存在者各式各样的垃圾链接形式。今天这
  • 有的服务器可以用sql溢出,可惜就是找不到进一步的入侵方法,因而一直也没有拿下来。今天在校盟看到一篇文章,说是在cmd下也可以中入sql账号
手机版 网站运营 asp之家 www.aspxhome.com