用户行为日志概述
用户行为日志:用户每次访问网站时所有的行为数据(访问、浏览、搜索、点击…)
用户行为轨迹、流量日志
日志数据内容:
百条测试数据链接地址:https://download.csdn.net/download/bingdianone/10800924
每行日志如下:
117.35.88.11 - - [10/Nov/2016:00:01:02 +0800] “GET /article/ajaxcourserecommends?id=124 HTTP/1.1” 200 2345 “www.imooc.com” “http://www.imooc.com/code/1852” - “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36” “-” 10.100.136.65:80 200 0.616 0.616
- 访问的系统属性: 操作系统、浏览器等等
- 访问特征:点击的url、从哪个url跳转过来的(referer)、页面上的停留时间等
- 访问信息:session_id、访问ip(访问城市)等
数据处理流程
-
数据采集
Flume: web日志写入到HDFS -
数据清洗
脏数据
Spark、Hive、MapReduce 或者是其他的一些分布式计算框架
清洗完之后的数据可以存放在HDFS(Hive/Spark SQL) -
数据处理
按照我们的需要进行相应业务的统计和分析
Spark、Hive、MapReduce 或者是其他的一些分布式计算框架 -
处理结果入库
结果可以存放到RDBMS、NoSQL -
数据的可视化
通过图形化展示的方式展现出来:饼图、柱状图、地图、折线图
ECharts、HUE、Zeppelin
本实战只有mapreduce清洗和处理离线数据
项目需求
需求:统计一个网站访问日志的浏览器访问次数
- 根据日志信息抽取出浏览器信息
https://github.com/LeeKemp/UserAgentParser
这个插件是可以满足本条需求;需要下载编译
编译:
安装到本地maven仓库
将依赖加入pom文件中
<!--添加UserAgent解析的依赖-->
<dependency>
<groupId>com.kumkee</groupId>
<artifactId>UserAgentParser</artifactId>
<version>0.0.1</version>
</dependency>
- 针对不同的浏览器进行统计操作
测试
环境参考,接上博文大数据入门学习笔记(叁)- 布式文件系统HDFS 中的环境
package com.kun.hadoop.project;
import com.kumkee.userAgent.UserAgent;
import com.kumkee.userAgent.UserAgentParser;
/**
* UserAgent测试类
*/
public class UserAgentTest {
public static void main(String[] args) {
String source="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36";
UserAgentParser userAgentParser = new UserAgentParser();
UserAgent agent = userAgentParser.parse(source);
String browser = agent.getBrowser();//浏览器
String engine = agent.getEngine();//引擎
String engineVersion = agent.getEngineVersion();//引擎版本
String os = agent.getOs();//操作系统
String platform = agent.getPlatform();//平台
boolean mobile = agent.isMobile();//移动
System.out.println(browser+ ","+engine+ ","+engineVersion+ ","+os+ ","+platform+ ","+mobile);
//Chrome,Webkit,537.36,Windows 7,Windows,false
}
}
/**
* 本地测试聚合计算浏览器分类个数
* @throws Exception
*/
@Test
public void testReadFile() throws Exception{
String path="D:\\SoftWare\\myGit\\hadoop-train\\100-access.log";
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(new File(path)))
);
String line="";//此字符串不代表null值
Map<String, Integer> browserMap = new HashMap<String, Integer>();//浏览器类型和出现次数
UserAgentParser userAgentParser = new UserAgentParser();
while (line!=null){
line = reader.readLine();//一次读入一行数据
if (StringUtils.isNotBlank(line))