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 ...
随机推荐
- redis数据类型List的安全队列和不安全队列
在学习RPOPLPUSH命令的时候,官方文档中有提到安全队列和不安全的队列,一开始没有看懂,现在理解了做个笔记. 一般情况下,我们可以借助List来实现消息队列,比如一个客户端通过命令LPUSH(BL ...
- 1年3年5年-我对PHP攻城师有看法
今天早上公车上看微信拉勾的一些岗位推送,挑了几个PHP攻城师看看 15K-20K的 百万级网站架构经验 3年以上开发,至少1年互联网用户产品开团队开发经验 不低于百度T4水平 数据库规划和优化,熟悉常 ...
- 排查PHP-FPM占用CPU过高
发现 如何发现的呢?当然是使用top命令,发现系统的load average>3,这说明系统已经处于比较高的负载中. 尝试解决 当我把php-fpm重启后,没过一会儿又开始cpu狂飙!这是什么鬼 ...
- JS 怎么刷新当前页面
reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页 ...
- Spring MVC学习-----------springMVC-mvc.xml
springMVC-mvc.xml 配置文件片段解说 (未使用默认配置文件名称) <?xml version="1.0" encoding="UTF-8" ...
- VC++ 给你的代码强制加一个硬断点
类似与Javascript的 debugger; Hard code a debugger breakpoint If you need to insert a hard breakpoint in ...
- hdu 4067(最小费用最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4067 思路:很神奇的建图,参考大牛的: 如果人为添加t->s的边,那么图中所有顶点要满足的条件都 ...
- 一个简单RPC框架是怎样炼成的(VI)——引入服务注冊机制
开局篇我们说了.RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 接下来处理RPC服务的注冊机制.所谓注冊机制,就是Server须要声明支持哪些rpc方法 ...
- dlut1188(wanghang的迷宫)
题目链接:传送门 题目大意:从起点到终点需要最少多少步(必须要关掉所有开关才能出去) 题目思路:用一个3维数组 dp[x][y][t]表示到达当前位置x,y,已经关掉了t个开关走的最少步数,然后就 ...
- mac同时安装多个jdk
DK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下Java8的Lambda等新特性,可是目前Java企业级应用的主打版本还是JDK6, JDK7.因此,我需要在我的电脑上同时有JDK8,JD ...