Hadoop应用开发实战案例 第2周 Web日志分析项目 张丹
课程内容
本文链接:
张丹博客 http://www.fens.me
用Maven构建Hadoop项目 http://blog.fens.me/hadoop-maven-eclipse/
程序源代码下载:https://github.com/bsspirit/maven_hadoop_template/releases/tag/kpi_v1
Flume部署: http://blog.csdn.net/zhouleilei/article/details/8568147 周雷雷博客
Chukwa部署: 详情见陆嘉恒书第415页
关于张丹
骨灰级程序员, 大数据创业者
DataguruID: bsspirit
Weibo: @Conan_Z
Blog:http://blog.fens.me
Email: bsspirit@gmail.com
项目背景:Web日志分析
需求分析:KPI指标
架构设计:日志分析系统架构
算法模型:Map-Reduce并行算法
程序开发:
–用Maven构建Hadoop项目
–MapReduce程序实现
Web日志由Web服务器产生,可能是Nginx, Apache, Tomcat等。
从Web日志中,我们可以获取网站每个页面的PV值(PageView,页面访问量)、独立IP数;
稍微复杂一些的,可以计算得出用户所检索的关键词排行榜、用户停留时间最高的页面等;
更复杂的,构建广告点击模型、分析用户行为特征等等。
项目背景: Nginx日志
Web日志中,每条日志通常代表着用户的一次访问行为
例如: 下面就是一条nginx日志
222.68.172.190 - - [18/Sep/2013:06:49:57 +0000] "GET /images/my.jpg HTTP/1.1" 200 19939 "http://www.angularjs.cn/A00n" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"
流行网站分析工具
1.Webtrends
2.Google分析
3.百度统计
项目背景:少量数据的情况
少量数据的情况(10Mb,100Mb,10G),在单机处理尚能忍受的时候,我可以直接利用各种Unix/Linux工具,awk、grep、sort、join等都是日志分析的利器,再配合perl, python,正则表达式,基本就可以解决所有的问题。
例如,从nginx日志中得到访问量最高前5个IP,实现很简单:
~ cat access.log.10 | awk '{a[$1]++} END {for(b in a) print b"\t"a[b]}' | sort -k2 -r | head -n 5
项目背景: 海量数据的情况
当数据量每天以10G、100G增长的时候,单机处理能力已经不能满足需求。我们就需要增加系统的复杂性,用计算机集群,存储阵列来解决。
在Hadoop出现之前,海量数据存储,和海量日志分析都是非常困难的。只有少数一些公司,掌握着高效的并行计算,分步式计算,分步式存储的核心技术。
Hadoop的出现,大幅度的降低了海量数据处理的门槛,让小公司甚至是个人都能力,搞定海量数据。并且,Hadoop非常适用于日志分析系统。
分布式日志的收集
1.脚本方案
2.Flume
3.Chukwa
架构设计:应用系统及日志系统架构
左边: Application业务系统
右边: Hadoop的HDFS, MapReduce。
架构设计:应用系统及日志系统架构
日志是由业务系统产生的,我们可以设置web服务器每天产生一个新的目录,目录下面会产生多个日志文件,每个日志文件64M。
设置系统定时器CRON,夜间在0点后,向HDFS导入昨天的日志文件。
完成导入后,设置系统定时器,启动MapReduce程序,提取并计算统计指标。
完成计算后,设置系统定时器,从HDFS导出统计指标数据到数据库,方便以后的即使查询。
架构设计:数据流
Flume
Cloudera提供的分布式、可靠、和高可用的海量日志采集、聚合和传输的系统
Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。同时,Flume的数据接受方,可以是console(控制台)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系统)等。
体系架构
data flow描述了数据从产生,传输、处理并最终写入目标的一条路径(图中的实线)。
Agent用于采集数据,是flume中产生数据流的地方,将产生的数据流传输到collector。
collector用于对数据进行聚合,往往会产生一个更大的流。
收集数据有2种主要工作模式,如下: Push Sources:外部系统会主动地将数据推送到Flume中。 Polling Sources:Flume到外部系统中获取数据。
Flume Master
用于管理数据流的配置
部署详情见:http://blog.csdn.net/zhouleilei/article/details/8568147 周雷雷博客
Chukwa
在印度神话中Chukwa是一只最古老的龟。它支撑着世界。在它的背上还支撑着一种叫做Maha-Pudma的大象,在大象的背上顶着这个地球。呵呵,大 象?Hadoop?不难理解为什么在Hadoop中的这个子项目叫做Chukwa了,或许Chukwa的其中一位开发者是印度人?呵呵,我瞎猜的,神话中 的Chukwa的,貌似是这样
架构图
部署Chukwa:详情见陆嘉恒书第415页
需求分析:案例介绍
某电子商务网站,在线团购业务。每日PV数100w,独立IP数5w。用户通常在工作日上午10:00-12:00和下午15:00-18:00访问量最大。日间主要是通过PC端浏览器访问,休息日及夜间通过移动设备访问较多。网站搜索浏量占整个网站的80%,PC用户不足1%的用户会消费,移动用户有5%会消费。
通过简短的描述,我们可以粗略地看出,这家电商网站的经营状况,并认识到愿意消费的用户从哪里来,有哪些潜在的用户可以挖掘,网站是否存在倒闭风险等。
需求分析: KPI指标设计
PV(PageView): 页面访问量统计
IP: 页面独立IP的访问量统计
Time: 用户每小时PV的统计
Source: 用户来源域名的统计
Browser: 用户的访问设备统计
注:商业保密限制,无法提供电商网站的日志。 下面的内容,将以我的个人网站为例提取数据进行分析, http://www.fens.me 张丹博客
需求分析: 电商网站VS个人网站
从商业的角度,个人网站的特征与电商网站不太一样,没有转化率,同时跳出率也比较高。
从技术的角度,同样都关注KPI指标设计。
–PV, IP, 转化率, 跳出率, 在线时长, 来源网站,来源域名,外部链接
–搜索流量,搜索关键词
–入口页面,跳出页面,受访页面
–访客男女,访客年龄,访客位置
–使用设置,操作系统,浏览器,爬虫,RSS阅读器
拆解为8个变量
remote_addr: 记录客户端的ip地址, 222.68.172.190
remote_user: 记录客户端用户名称, –
time_local: 记录访问时间与时区, [18/Sep/2013:06:49:57 +0000]
request: 记录请求的url与http协议, “GET /images/my.jpg HTTP/1.1″
status: 记录请求状态,成功是200, 200
body_bytes_sent: 记录发送给客户端文件主体内容大小, 19939
http_referer: 用来记录从那个页面链接访问过来的, “http://www.angularjs.cn/A00n”
http_user_agent: 记录客户浏览器的相关信息, “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36″
算法模型: 并行算法 1
PV(PageView): 页面访问量统计
–Map: {key:$request,value:1}
–Reduce: {key:$request,value:求和(sum)}
IP: 页面独立IP的访问量统计
–Map: {key:$request,value:$remote_addr}
–Reduce: {key:$request,value:去重再求和(sum(unique))}
Time: 用户每小时PV的统计
–Map: {key:$time_local,value:1}
–Reduce: {key:$time_local,value:求和(sum)}
算法模型: 并行算法 2
Source: 用户来源域名的统计
–Map: {key:$http_referer,value:1}
–Reduce: {key:$http_referer,value:求和(sum)}
Browser: 用户的访问设备统计
–Map: {key:$http_user_agent,value:1}
–Reduce: {key:$http_user_agent,value:求和(sum)}
程序开发: 用Maven构建Hadoop项目
开发环境
–Win7 64bit
–Java 1.6.0_45
–Maven3
–Eclipse Juno Service Release 2
Hadoop集群系统环境:
–Linux: Ubuntu 12.04.2 LTS 64bit Server
–Java: 1.6.0_29
–Hadoop: hadoop-1.0.3,单节点,IP:192.168.1.210
请参考文章:用Maven构建Hadoop项目 http://blog.fens.me/hadoop-maven-eclipse/
程序开发: 向HDFS导入日志文件
我们需要把日志文件,上传的HDFS里/user/hdfs/log_kpi/目录
参考下面的命令操作
~ hadoop fs -mkdir /user/hdfs/log_kpi
~ hadoop fs -copyFromLocal /home/conan/datafiles/access.log.10 /user/hdfs/log_kpi/
程序开发: MapReduce开发流程
对”日志行”的解析
Map函数实现
Reduce函数实现
启动程序实现
程序源代码下载:https://github.com/bsspirit/maven_hadoop_template/releases/tag/kpi_v1
Hadoop应用开发实战案例 第2周 Web日志分析项目 张丹的更多相关文章
- Hadoop应用开发实战案例 第2周
比如,封面,是一网页,可以看出用户在此网页上,鼠标呈现F形状. 海量Web日志分析 用Hadoop提取KPI统计指标 更详细原文博客:http://blog.fens.me/hadoop-mapred ...
- Hadoop应用开发实战案例 第1周
本课程的基础课程是,Hadoop数据分析平台课程.相信,能看我本博文的朋友,是有一定的基础了. 只是前个课程是讲解,这个课程是应用. 第一层是:数据源层,代表有生产线上的数据,比如关系型数据库orca ...
- 015_[小插曲]看黄老师《炼数成金Hadoop应用开发实战案例》笔记
1.大数据金字塔结构 Data Source-->Data Warehouses/Data Marts-->data exploration-->Data Mining-->D ...
- Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)
Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...
- Hadoop企业开发场景案例,虚拟机服务器调优
Hadoop企业开发场景案例 1 案例需求 (1)需求:从1G数据中,统计每个单词出现次数.服务器3台,每台配置4G内存,4核CPU,4线程. (2)需求分析: 1G/128m = 8个M ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...
- hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标
转载自:http://blog.fens.me/hadoop-mapreduce-log-kpi/ 今天学习了这一篇博客,写得十分好,照着这篇博客敲了一遍. 发现几个问题, 一是这篇博客中采用的had ...
随机推荐
- openssl基础
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. OpenSSL is an open source ...
- hdu6007 Mr. Panda and Crystal 最短路+完全背包
/** 题目:hdu6007 Mr. Panda and Crystal 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6007 题意:魔法师有m能量,有n ...
- Java技术学习路线图
一:常见模式与工具 学习Java技术体系,设计模式,流行的框架与组件是必不可少的: 常见的设计模式,编码必备 Spring5,做应用必不可少的最新框架 MyBatis,玩数据库必不可少的组件 二:工程 ...
- 第二百四十二节,Bootstrap列表组面板和嵌入组件
Bootstrap列表组面板和嵌入组件 学习要点: 1.列表组组件 2.面板组件 3.响应式嵌入组件 本节课我们主要学习一下 Bootstrap 的三个组件功能:列表组组件.面板组件. 响应 式嵌入组 ...
- ArrayList和Vector的区别?
ArrayList和Vector的区别? 解答:同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的:数据增长:当需要增长时,Vector默认增长为原来一 ...
- 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2020 和背包差不多 同样滚动数组 f[j]表示当前位置j份食物的最小价值 f[j]=min(f[j- ...
- boost数据结构any(很有用!)
any是一种特殊的容器,它只能容纳一个元素,但这个元素可以是任意类型; 可以用any保存任何类型,在任何需要的时候取出它; 这种功能和shared_ptr<void>类似,但是 ...
- python入门(四):标准输出和文件读写
Python输出 1.表达式语句 str(): 函数返回一个用户易读的表达形式,可以使用 str.format() 函数来格式化输出值. repr(): 产生一个解释器易读的表达形式. 2.print ...
- Oracle菜鸟之怎样创建和删除表空间
1.创建暂时表空间 创建表空间时,dbf文件一般存放在datafile文件的存放文件夹下(通常是在实例名命名的文件夹以下) 能够通过 select * from v$datafile;查看全部数据文件 ...
- CommonJS和AMD/CMD
JS中的模块规范(CommonJS,AMD,CMD) 一,CommonJS NodeJS是CommonJS规范的实现,webpack也是以CommonJS的形式来书写. 在浏览器环境下,没有模块也不是 ...