当前位置:首页 > 开发 > 开源软件 > 正文

【Spark七十七】Spark分析Nginx和Apache的access.log

发表于: 2015-02-21   作者:bit1129   来源:转载   浏览:
摘要: Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:   Nginx的access.log解析正则表达式   val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\&q

Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:

 

Nginx的access.log解析正则表达式

 

val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*) (\".*?\") (\".*?\")""".r

  

 

Apache的access.log解析正则表达式

val PATTERN = """^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+) (\S+)" (\d{3}) (\d+)""".r

 

注意最后一行的.r用于指明PARTTERN是一个正则表达式对象,String.r返回的是Regex类型的对象

 

 

ApacheAccess日志解析工具类

 

/**
 * information container,like JavaBean
 */
case class ApacheAccessLog(
                            ipAddress: String,
                            clientIdentd: String,
                            userId: String,
                            dateTime: String,
                            method: String,
                            endpoint: String,
                            protocol: String,
                            responseCode: Int,
                            contentSize: Long) {

}

/**
 * Retrieve information from log line using Regular Expression
 */
object ApacheAccessLog {
  val PATTERN = """^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+) (\S+)" (\d{3}) (\d+)""".r

  def parseLogLine(log: String): ApacheAccessLog = {
    val res = PATTERN.findFirstMatchIn(log)
    if (res.isEmpty) {
      throw new RuntimeException("Cannot parse log line: " + log)
    }
    val m = res.get
    ApacheAccessLog(m.group(1), m.group(2), m.group(3), m.group(4),
      m.group(5), m.group(6), m.group(7), m.group(8).toInt, m.group(9).toLong)
  }

  def main(args: Array[String]) {
    val line = """192.13.212.25 - - [04/Aug/2014:15:18:27 +0800] "GET /abc/ HTTP/1.1" 200 280"""
    val log = ApacheAccessLog.parseLogLine(line);
    println(log.ipAddress)
    println(log.clientIdentd)
    println(log.userId)
    println(log.dateTime)
    println(log.method)
    println(log.endpoint)
    println(log.protocol)
    println(log.responseCode)
    println(log.contentSize)

  }

}

 

 

 

http://www.iteblog.com/archives/1250

【Spark七十七】Spark分析Nginx和Apache的access.log

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Zeppelin介绍 Apache Zeppelin提供了web版的类似ipython的notebook,用于做数据分析和可视化。背后
2 spark
环境: Hadoop版本:Apache Hadoop2.7.1 Spark版本:Apache Spark1.4.1 核心代码: 测试数据: Java
一、搬砖 vs. 分布式计算 一个人搬砖很累,几个人一起搬就会轻松很多,也会快很多: 分布并行计算和
什么是Spark Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由
Spark已经被很多巨头使用,包括Amazon、eBay以及Yahoo!。很多组织都在拥有成千上万节点的集群上运行
Apache Spark探秘:Spark Shuffle实现 三月 26, 2014 at 9:40 上午 by Dong Tags: Spark 作者:Dong
本文以wordCount为例,详细说明spark创建和运行job的过程,重点是在进程及线程的创建。 实验环境搭
欢迎转载,转载请注明出处,徽沪一郎。 楔子 Spark计算速度远胜于Hadoop的原因之一就在于中间结果是
欢迎转载,转载请注明出处,徽沪一郎。 楔子 在Spark源码走读系列之2中曾经提到Spark能以Standalone
概述 一个Spark的Job分为多个stage,最后一个stage会包括一个或多个ResultTask,前面的stages会包括
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号