前面一篇应该算是比较详细的介绍了spark的基础知识,在了解了一些spark的知识之后相必大家对spark应该不算陌生了吧!如果你之前写过MapReduce,现在对spark也很熟悉的话我想你再也不想用MapReduce去写一个应用程序了,不是说MapReduce有多繁琐(相对而言),还有运行的效率等问题。而且用spark写出来的程序比较优雅,这里我指的是scala版的,如果你用java版的spark去写一个应用程序,对比scala版的,想必你肯定会爱上scala这门语言的,哈哈哈(以上纯属个人观点,具体场景具体对待)

实现目标1:根据采集的日志信息,统计总的pv量 。

需求分析:在大数据领域,采集数据的常采用的手段就是怼网站进行埋点然后根据需求收集相关的数据,这里我们用的是最基本的日志信息来做处理,数据来源于某网站,可以分享出来给大家使用,完了后我会将代码还有数据 文件放到GitHub上供大家下载。首先我们来看看日志文件(access.log)的格式:

这是标准的一条日志信息,当然我们如果是统计网站的pv总量的话不需要考虑对日志进行清洗的工作。以下是pv统计的代码:

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} //todo:利用Spark程序统计运营商pv总量
object PV extends App{
//创建sparkConf对象
private val sparkConf: SparkConf = new SparkConf().setAppName("PV").setMaster("local[2]")
//创建SparkContext对象
private val sc: SparkContext = new SparkContext(sparkConf)
//设置输出的日志级别
sc.setLogLevel("WARN")
//读取日志数据
private val dataRDD: RDD[String] = sc.textFile("E:\\access.log")
//统计pv总量====方式一:计算有多少行及pv总量
private val finalResult1: Long = dataRDD.count()
println(finalResult1)
//方式二:每一条日志信息记为一条数据1
private val pvOne: RDD[(String, Int)] = dataRDD.map(x=>("PV",))
//对pv根据key进行累加
private val resultPV: RDD[(String, Int)] = pvOne.reduceByKey(_+_)
//打印pv总量
resultPV.foreach(x=>println(x))
//关闭资源
sc.stop()
}

结果如下:

实现目标2:根据采集的日志信息,统计总的uv量 。

需求分析:目标数据文件还是access.log,比较简单,直接看代码:

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD //todo:利用spark统计运营商uv总量
object UV extends App{
//创建sparkConf对象
private val sparkConf: SparkConf = new SparkConf().setAppName("PV").setMaster("local[2]")
//创建SparkContext对象
private val sc: SparkContext = new SparkContext(sparkConf)
//设置输出的日志级别
sc.setLogLevel("WARN")
//读取日志数据
private val dataRDD: RDD[String] = sc.textFile("E:\\access.log")
//切分每一行,获取对应的ip地址
private val ips: RDD[String] = dataRDD.map(_.split(" ")())
//去重
private val ipNum: Long = ips.distinct().count()
println(ipNum)
//g关闭资源
sc.stop()
}

结果 如下:

实现目标3:根据采集的日志信息,统计访问最多的前五位网站降序排列 TopN。

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD //todo:利用spark计算运营商访问url最多的前n位=====TopN
object TopN extends App{
//创建sparkConf对象
private val sparkConf: SparkConf = new SparkConf().setAppName("PV").setMaster("local[2]")
//创建SparkContext对象
private val sc: SparkContext = new SparkContext(sparkConf)
//设置输出的日志级别
sc.setLogLevel("WARN")
//读取日志数据
private val dataRDD: RDD[String] = sc.textFile("E:\\access.log")
//对每一行的日志信息进行切分并且过滤清洗掉不符合规则的数据
//通过对日志信息的分析,我们知道按照空格切分后,下标为10的是url,长度小于10的暂且认为是不符合规则的数据
private val urlAndOne: RDD[(String, Int)] = dataRDD.filter(_.split(" ").size>).map(x=>(x.split(" ")(),))
//相同url进行累加
private val result: RDD[(String, Int)] = urlAndOne.reduceByKey(_+_)
//访问最多的url并进行倒叙排序
private val sortResult: RDD[(String, Int)] = result.sortBy(_._2,false)
//取前五位
private val finalResult: Array[(String, Int)] = sortResult.take()
//打印输出
finalResult.foreach(println)
sc.stop()
}

运行结果:

spark实战之网站日志分析的更多相关文章

  1. 基于Spark的网站日志分析

    本文只展示核心代码,完整代码见文末链接. Web Log Analysis 提取需要的log信息,包括time, traffic, ip, web address 进一步解析第一步获得的log信息,如 ...

  2. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...

  3. Spark SQL慕课网日志分析(1)--系列软件(单机)安装配置使用

    来源: 慕课网 Spark SQL慕课网日志分析_大数据实战 目标: spark系列软件的伪分布式的安装.配置.编译 spark的使用 系统: mac 10.13.3 /ubuntu 16.06,两个 ...

  4. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...

  5. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  6. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  7. Hadoop学习笔记—20.网站日志分析项目案例

    1.1 项目来源 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖.回帖,如图1所示. 图1 项目来源网站-技术学习论坛 本次实践的目的就在于 ...

  8. Apache 网站日志分析

    1.获得访问前 10 位的 ip 地址 [root@apache ~]# cat access_log |awk '{print $1}'|sort|uniq -c|sort -nr|head -10 ...

  9. Spark 实践——基于 Spark Streaming 的实时日志分析系统

    本文基于<Spark 最佳实践>第6章 Spark 流式计算. 我们知道网站用户访问流量是不间断的,基于网站的访问日志,即 Web log 分析是典型的流式实时计算应用场景.比如百度统计, ...

随机推荐

  1. QQ的全国地址编码

    D:\Program Files (x86)\Tencent\QQ\I18N\2052\LocList.xml

  2. 几种复杂度的斐波那契数列的Java实现

    一:斐波那契数列问题的起源 13世纪初期,意大利数论家Leonardo Fibonacci在他的著作Liber Abaci中提出了兔子的繁殖问题: 如果一开始有一对刚出生的兔子,兔子的长大需要一个月, ...

  3. ThinkPHP- 3.1

    基础: 1. 基础概念 LAMP LAMP是基于Linux,Apache,MySQL和PHP的开放资源网络开发平台.这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境.名字来源于每个程序的第一 ...

  4. 【Python】python2 str 编码检测

    python2 str 编码检测 import chardet s = 'sdffdfd' print type(s) print chardet.detect(s) s2 = '反反复复' prin ...

  5. 移动端真机调试工具--DebugGap (VIDE)

    越来越多的移动端开发工作,需要我们有一个好的调试工具,以解决各类真机才会遇到的BUG,最近使用了一款DebugGap 的工具,非常方便,在这里推荐给大家. 官网地址 DebugGap  . 按需求下载 ...

  6. Android RecycleView实现混合Item布局

    首先来看看效果吧: 效果预览.png 本实例来自于慕课网的视屏http://www.imooc.com/video/13046,实现步骤可以自己去观看视屏,这里只记录了下实现的代码. 添加依赖: (1 ...

  7. 【Mood-13】Android --如何从初级工程师进化为高级工程师

    一  明确自我定位 现在你是初级工程师,但是你想当个高级工程师,所 以,你就要给自己定个目标,即:我是要成为高级工程师的男人.有了这个定位,并且努力朝着这个目标去努力,然后内心深处就会有一个感觉,这个 ...

  8. 【C++】【MFC】创建新的线程函数

    DWORD WINAPI MyThreadProc (LPVOID lpParam){ somestruct* pN = (somestruct*)lpParam; // 将参数转为你的类型 ... ...

  9. [SVN]TortoiseSVN报“500 Internal Server Error”错误的解决方法

    背景:由于某种原因,本人重启了一下SVN服务的物理机,重启过后发现所有人访问SVN都报如下错误. 由于重启之前是没有做过任何改动,所以面对这个错误有点摸不着头脑,防火墙.网管.清缓存等方法都试过,还没 ...

  10. Mysql update后insert造成死锁原因分析及解决

    系统中出现死锁的日志如下: ) TRANSACTION: , ACTIVE sec inserting mysql tables , locked LOCK WAIT lock struct(s), ...