首页 > 编程语言 >Spark编程案例:分析tomcat访问日志求访问量最高的前两个网页

Spark编程案例:分析tomcat访问日志求访问量最高的前两个网页

时间:2023-10-26 11:08:05浏览次数:36  
标签:2017 HTTP tomcat 30 192.168 jsp 访问量 Spark MyDemoWeb


需求如题,tomcat 访问日志如下:

192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/ HTTP/1.1" 200 259
192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/head.jsp HTTP/1.1" 200 713
192.168.88.1 - - [30/Jul/2017:12:53:43 +0800] "GET /MyDemoWeb/body.jsp HTTP/1.1" 200 240
192.168.88.1 - - [30/Jul/2017:12:54:37 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:38 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:38 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
192.168.88.1 - - [30/Jul/2017:12:54:40 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:40 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:41 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
192.168.88.1 - - [30/Jul/2017:12:54:41 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:52 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:52 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:53 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:54 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:56 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
192.168.88.1 - - [30/Jul/2017:12:54:56 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
192.168.88.1 - - [30/Jul/2017:12:54:57 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:57 +0800] "GET /MyDemoWeb/java.jsp HTTP/1.1" 200 240
192.168.88.1 - - [30/Jul/2017:12:54:58 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:58 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:59 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:54:59 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:55:00 +0800] "GET /MyDemoWeb/mysql.jsp HTTP/1.1" 200 241
192.168.88.1 - - [30/Jul/2017:12:55:00 +0800] "GET /MyDemoWeb/oracle.jsp HTTP/1.1" 200 242
192.168.88.1 - - [30/Jul/2017:12:55:02 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
192.168.88.1 - - [30/Jul/2017:12:55:02 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242

思路:

  1. 根据日志对每个页面的访问量求和
  2. 降序排序
  3. 取前两条记录

scala 代码如下:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import java.util.regex.Pattern
import java.util.regex.Matcher

object TomcatLogDemo {
  def main(args: Array[String]):Unit = {
    // 定义SparkContext
    val conf = new SparkConf()
    conf.setAppName("MyWebLogDemo")
    conf.setMaster("local")
    val sc = new SparkContext(conf)
    
    // 读取tomcat的访问日志
    val rdd1 = sc.textFile("F:\\localhost_access_log.2017-07-30.txt")
    
    // 对日志中的网页的访问量求和
    val rdd2 = rdd1.map(e => {
      // 提取双引号里面的内容
      val regex:String = "\"(.*?)\""
      val pattern:Pattern = Pattern.compile(regex)
      val matcher:Matcher = pattern.matcher(e)
      var goal:(String, Int) = ("", 0)
      while (matcher.find()) {
        val str = matcher.group()
        // 提取两个空格之间的内容,即URI
        val re:String = " (.*?) "
        val pa:Pattern = Pattern.compile(re)
        val ma:Matcher = pa.matcher(str)
        while (ma.find()) {
          val temp = ma.group().trim
          val index = temp.lastIndexOf("/")
          // 提取jsp文件名
          val result = temp.substring(index + 1)
//          println((result, 1))
          goal = (result, 1)
        }
      }
      goal
    })
    // 对相同的文件名的访问次数求和
    val rdd3 = rdd2.reduceByKey(_+_)
    
    // 针对访问量降序排序
    val rdd4 = rdd3.sortBy(_._2, false)
//    rdd4.foreach(println)
    
    // 取访问量最高的前两条记录
    val result = rdd4.take(2)
    
    result.foreach(println)
    
    sc.stop()
  }
}

结果:

(oracle.jsp,9)
(hadoop.jsp,9)


标签:2017,HTTP,tomcat,30,192.168,jsp,访问量,Spark,MyDemoWeb
From: https://blog.51cto.com/u_14655640/8030914

相关文章

  • Spark编程案例:针对每个分区进行数据库操作
    需求:将有多个分区的RDD中的数据保存到数据库ps:针对分区进行数据库操作的话,建议使用foreachPartition算子,每个分区创建一个Connection,避免一个Connection被多个分区使用而造成的序列化的麻烦。defsaveToMySql(it:Iterator[(String,String)])={varconn:Connection=n......
  • Spark编程案例:创建自定义分区
    需求:根据jsp文件的名字,将各自的访问日志放入到不同的分区文件中,如下:生成的分区文件例如:part-00000文件中的内容:只包含了java.jsp的访问日志日志内容:192.168.88.1--[30/Jul/2017:12:53:43+0800]"GET/MyDemoWeb/HTTP/1.1"200259192.168.88.1--[30/Jul/2017:12:53:4......
  • 配置tomcat出现404错误
    应用程序部署错误:请确保应用程序已正确部署到Tomcat的webapps目录中。检查应用程序的war文件或目录是否位于正确的位置。上下文路径错误:如果应用程序部署到了Tomcat的webapps目录中的子目录中,您需要确保正确配置了应用程序的上下文路径。默认情况下,上下文路径是应用程序的名......
  • pyspark.sql处理多分隔符数据文件生成DF案例
    pyspark程序清洗多分隔符数据案例原始数据可以看到原始数据是以“|#$”多分隔符进行数据分割的POD9_6ec8794bd3297048d6ef7b6dff7b8be1|#$2023-10-24|#$0833|#$#|#$#|#$99999999999|#$#|#$12345678912POD9_352858578708f144bb166a77bad743f4|#$2023-10-24|#$0391|#$#|#$#|#$99......
  • 华为云耀云服务器L实例:初级篇-tomcat配置部署
     华为云耀云服务器L实例是一款可快速部署且易于运维的轻量级云服务器,专为中小企业和入门级开发者打造。它不仅拥有华为云擎天架构的强大性能,还具有多项用户体验优化方案,让用户轻松上手,享受简单上云的乐趣。本产品网址为:https://www.huaweicloud.com/product/hecs-light.html......
  • 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群文章介绍了Bucket优化技术及其在实际业务中的应用,包括SparkBucket的基本原理,重点阐述了火山引擎湖仓一体分析服务LAS(下文以LAS指代)Spark对Bucket优化的功能增强,实现了Bucket易......
  • idea配置tomcat热部署
    idea中配置了tomcat的“updateclassesandresources”后,点击run之后,每次修改代码都没有及时生效,也就是没有成功进行热部署。在idea中实现热部署,要先设置自动编译,再选择正确的运行模式(Debug运行,不是Run)新建一个类或文件都需重新启动tomcat!!!第一步:开启自动编译重点:看自动编译......
  • 知乎 Flink 取代 Spark Streaming 的实战之路
    “数据智能”(DataIntelligence)有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务。从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈能够帮助公司更快的做出决策,......
  • 虚拟机的Spark安装步骤
    相关代码截图//解压压缩包tar-zxvfspark-3.2.4-bin-hadoop3.2.tgz//配置环境变量vi/etc/profile//添加内容#spark$PARK_HOME=/export/server/spark-3.2.4-bin-hadoop3.2exportPATH=$PATH:$SPARK_HOME/bin//进入到spark安装目录的conf目录下//复刻spark--env.s......
  • Tomcat国内安装及乱码解决详细步骤(无f墙)
    1.下载安装包链接:https://pan.baidu.com/s/1x_hWMnUrui4aDYo9UE-GdA?pwd=p8kn提取码:p8kn--来自百度网盘超级会员V4的分享2.一键下载打开安装软件后一直点next和Iagree,无脑一键下载,建议默认在C盘3.打开Tomcat进行测试一般安装软件会默认安装在ProgramFile或ProgramFile......