课程内容

本文链接:

张丹博客 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日志分析项目 张丹的更多相关文章

  1. Hadoop应用开发实战案例 第2周

    比如,封面,是一网页,可以看出用户在此网页上,鼠标呈现F形状. 海量Web日志分析 用Hadoop提取KPI统计指标 更详细原文博客:http://blog.fens.me/hadoop-mapred ...

  2. Hadoop应用开发实战案例 第1周

    本课程的基础课程是,Hadoop数据分析平台课程.相信,能看我本博文的朋友,是有一定的基础了. 只是前个课程是讲解,这个课程是应用. 第一层是:数据源层,代表有生产线上的数据,比如关系型数据库orca ...

  3. 015_[小插曲]看黄老师《炼数成金Hadoop应用开发实战案例》笔记

    1.大数据金字塔结构 Data Source-->Data Warehouses/Data Marts-->data exploration-->Data Mining-->D ...

  4. Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

    Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的 ...

  5. Hadoop企业开发场景案例,虚拟机服务器调优

    Hadoop企业开发场景案例 1 案例需求 ​ (1)需求:从1G数据中,统计每个单词出现次数.服务器3台,每台配置4G内存,4核CPU,4线程. ​ (2)需求分析: ​ 1G/128m = 8个M ...

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

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

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

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

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

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

  9. hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标

    转载自:http://blog.fens.me/hadoop-mapreduce-log-kpi/ 今天学习了这一篇博客,写得十分好,照着这篇博客敲了一遍. 发现几个问题, 一是这篇博客中采用的had ...

随机推荐

  1. 1. DataBinding - offical tutorial

    1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...

  2. The Definitive Guide To Django 2 学习笔记(一) Views and UrL confsRL

    1.如何找到django在Ubuntu下的安装路径: 进入python命令行,import django,print(django.__path__) 2.使用django-admin.py 创建项目 ...

  3. C#非常规调试场景总结

    场景1:类库独立调试.          方法:可以将类库项目修改成控制台程序,然后增加一个静态的main函数的方式来调试 场景2:程序需要连接数据库,本机调试的时候因为权限问题无法连接上数据库,只能 ...

  4. 国内外知名IT科技博客(强烈推荐)

    国内 1.36氪(www.36kr.com): 目前国内做的最风生水起的科技博客,以介绍国内外互联网创业新闻为主的博客网站,自己建立有36Tree互联网创业融投资社区.36氪的名字源于元素周期 表的第 ...

  5. pip 使用技巧

    指定豆瓣源安装 pip install configparser -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/si ...

  6. 第一百三十七节,JavaScript,封装库---修缮拖拽

    JavaScript,封装库---修缮拖拽 修缮拖拽 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:有参设置拖拽点区块,只有弹窗的这个拖拽点区块才能拖拽,无参整个弹窗可以拖 ...

  7. Storm集成Kafka编程模型

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3974417.html 本文主要介绍如何在Storm编程实现与Kafka的集成 一.实现模型 数据流程: ...

  8. storyboard设置navigation controller

    到storyboard选中我们唯一一个的viewcontroller,找到xcode的菜单栏,Edit->Embed In->NavigationController.这时候storybo ...

  9. Spring Security OAuth2 授权失败(401) 问题整理

    Spring Cloud架构中采用Spring Security OAuth2作为权限控制,关于OAuth2详细介绍可以参考 http://www.ruanyifeng.com/blog/2014/0 ...

  10. 160630、五句话搞定JavaScript作用域

    JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕.   一.“JavaScript中无块级作用域” 在Java或C# ...