目 录
摘 要 11
ABSTRACT 12
1 绪论 13
1.1课题研究背景 13
1.2课题研究的目的和意义 13
2 系统相关技术介绍 14
2.1 hadoop系统架构 14
2.2 HDFS(Hadoop分布式文件系统) 15
2.3 Mapreduce(分布式计算框架) 17
2.4 Yarn(资源管理框架) 19
3 系统的需求分析 25
3.1用户行为分析系统简单介绍 25
3.2 用户需求分析 26
4用户行为分析系统设计 26
4.1 系统架构的设计 26
4.2 日志收集模块设计 28
4.3.原始数据存储模块 29
5 用户行为系统实现过程 33
5.1前期系统环境的搭建(hadoop的HA平台) 33
5.2 hadoop(ha)集群的搭建 35
5.3 日志收集模块的实现 40
5.4 数据存储模块实现 40
6 全面系统测试 59
6.1日志收集模块测试 59
6.2 数据存储模块测试以及数据的导入导出mysql测试 59
6.3 前端模块测试加上数据清洗模块测试 61
总结 64
参 考 文 献 65
致 谢 66
3 系统的需求分析
我所写的毕业设计的课题是基于hadoop的一个用户行为的数据量的分析系统,那么我研究的方向就是大数据中的hadoop方向,在我的课题中我主要研究的方向是数据的采集来源,通过flume埋点来采集日志信息,或者通过nginx反向代理服务器来收集日志信息,来采集到我们需要的用户浏览网页的信息,然后就是我研究的大数据的存储问题[7]。我就是用的hadoop这个框架里面中的hdfs的一个重要的(分布式文件存储系统)来存储大量有需要用到的数据,它有一个很大的好处就是,存储的数据很安全,不会丢失,然后重点的就是数据的清洗和分析了,我主要用的是hive和hbase两种数据库来存储分析数据的,然后用mapreduce计算数据模型来将原始数据清洗成需要的用户行为记录存储到hive和hbase中让它们可以分析数据,然后前端的展示我用了java的ssm三大框架,加上前端的一个好看方便简洁的大数据的展示框架echarts框架,完成我本次的课题内容。
3.1 用户需求分析
3.1.1 功能性需求分析
在这个大数据的时代中很多互联网的传媒公司和广告公司,在这公司需要很多的用户喜好信息然后通过他们精准的推荐,来推送这些广告,把广告的利用率达到最高,这样才能不浪费成本,现在的网站上你们所看到的广告和以前的都不一样了,现在都是每个人在页面上的广告都不一样了,而且现在的广告都是按投放次数来结算广告费用的,所以为了更大化的盈利,就需要掌握不同用户的不同爱好,特点,习惯等非常多的信息,那么这些信息怎么来呢? 这就需要我们网站上的用户行为的记录,和分析的一个功能系统了。所以借鉴一上的内容我们可以大概确定的几点功能性的需求:
1.我们的系统首先必须的就是一个用户行为的一个日志收集的系统,这个日志中记录着用户来到这个网站上所有的行为动作,我们可以用nginx 服务器来做这个日志的收集系统。
2.我们的系统还需要一个把收来的用户行为信息这些大量的信息存储起来的一个功能平台,在这个平台上我们可以对这些信息做二次分析运算,清洗出我们需要的数据。
3.我们还需要一个可以做大型数据运算的模型,还有一个前端的数据展示分析的一个前端平台,这样对普通的用户可以一眼就分析出这些用户的喜好和特点。
3.1.2 非功能性需求分析
在我们的系统中我们分析了有哪些功能是我们需要的,当然我们还需要分析一下我们的系统有哪些非功能性的需求,很简单的讲我们这个系统做出来肯定是给普通的数据分析师来做报告的,他和我们程序员不一样,不能从一大堆代码中找到数据来分析,所有我们的前端展示页面给人的友好度要做的好一点,可以让普通人也可以参与用户的特性分析中来,那么我们就需要用到大数据中的一些开源免费的框架,或者是一些好用的前端组件来搭建我们的前端展示平台。
3.2 系统需求分析
首先我们通过分析每个用户的需求我们可知道我们的系统可能需要的几个模块的需求,首先我们从用户那真的,既然是用户的行为分析然后搞精准的营销,那么我们首先要收集大量的用户信息这一点我们可以是要确定的,那么我们系统的设计需要一个用户行为信息的一个收集模块,这个模块就是专门来收集我们用户在网站上浏览产生的各种信息。还有既然我们有了一个信息收集模块,那么我们收集来的数据量又肯定是非常的巨大,这是因为要搞用户的精准营销。那么我们就需要一个存储模块来存储我们最开始收集到的原始的用户数据,但是数据量又很大,所以我们需要用数据仓库来做我们的数据存储模块。
然后我们把最初的数据得到了就需要进一步的分析本系统需要的模块了。现在我们把最初的用户的数据存储了起来,但是我们的系统不会只有这么一点,因为收集来的数据可能很多都不会如你所想的那样收集那么多字段,肯定还有很多字段是空的,比如浏览网站的时候有很多是游客,一部分是会员那么收集来的数据就会造成字段缺失,而且也有很多需要的表字段是我们就平常单纯的收集日志信息是收集不到的,那么我们就需要通过有限的字段来计算出我们需要的字段供我们做用户行为的分析过程。那么我们的这个系统就需要一个数据的处理清洗的模块,也是本系统最重要的一个模块。然后我们不能到这里就结束了,不然我们处理的数据就只能由数据库里面的表展示出来,如果这样的话我们就很难从数据中分析出我们需要的信息,所以我们还需要一个数据的前端展示平台,一个供大数据展示的平台。
3.2.1 模块需求的分析
1.首先我们知道现在我们这个大数据平台下会有4个大的模块:数据收集模块,数据存储模块,数据清洗处理模块,数据展示模块四大部分组成,但是我们还要分析每个模块里面需要干的事情,首先就是数据收集模块,在这个模块中我们肯定要尽可能多的收集用户的行为信息,要有很多字段来解析这个人的点击流的行为,所以我们需要改收集模块的配置文件,然后收集很多我们需要的字段数据。
2.之后就是我们的数据存储模块,首先我们知道,我们收集来的数据肯定都是url的格式化的数据,那么我们的数据存储模块就要能很好存储格式化数据的数据库,再着我们是收集每个用户的每个浏览网页的各种行为,所以我们收集的数据量肯定是很大的,那么我们就需要能存储很大量数据的数据仓库,所以我们会结合这几点需求来设计我们的数据存储模块。
3.下面就是我们系统最重要的数据清洗模块的需求分析了,首先我们是基于hadoop的一个大数据平台的,那么我们肯定要用到hadoop里面的自带框架mapreduce是最好的,当然也可以用其他的计算模型只要基于hadoop都可以,本文转载自http://www.biyezuopin.vip/onews.asp?id=12435然后这个模块我们是要清洗出我们收集出来的原始数据里面空缺的字段我们要不上,要处理然后把原始数据清洗成能被数据厂库存储的表的格式,这个都是本模块需要完成的
还有就是我们之后的一些数据都需要本模块可以支持处理。
4.前端数据展示模块的需求分析,这个我就简单的说,首先我们的用户行为系统需要前端的展示,那么我们肯定需要这个系统来完成数据的可视化的展示,还有我们之前的数据数据量大,而且只做成表的话很难给人直观的感受。
create external table ifnot exists weblog(Valid boolean, Remote_addr String, Remote_user String,
Time_local String, Request String, Status String,
Body_bytes_sent String, Http_referer String, Http_user_agent String)
row format delimited fields terminated by '\001'
location 'hdfs://bd1807/weblog/output';
create external table ifnot exists pageviews(Session String,key String, Remote_addr String, Timestr String,
Tequest String, Step int, Staylong int,
Referal String, Useragent String, Bytes_send String,
Status String)
row format delimited fields terminated by '\001'
location 'hdfs://bd1807/weblog/pageviews';
create external table ifnot exists visits(Session String, Remote_addr String, InTime String,
OutTime String, InPage String, OutPage String,
Referal String, PageVisits int)
row format delimited fields terminated by '\001'
location 'hdfs://bd1807/weblog/visitout';
create table ifnot exists weblog(Valid Boolean, Remote_addr Text, Remote_user Text,
Time_local Text, Request Text, Status Text,
Body_bytes_sent Text, Http_referer Text, Http_user_agent Text);
create table ifnot exists pageviews(Session Text, key Text, Remote_addr Text, Timestr Text,
Tequest Text, Step int, Staylong int,
Referal Text, Useragent Text, Bytes_send Text,
Status Text);
create table ifnot exists visits(Session Text, Remote_addr Text, InTime Text,
OutTime Text, InPage Text, OutPage Text,
Referal Text, PageVisits int);// 导出hive数据到MySQL:
sqoop export \
--connect jdbc:mysql://hadoop03:3306/biyesheji \
--username root \
--password root \
--table pageviews \
--export-dir /weblog/pageviews/part-r-00000 \
--input-fields-terminated-by '\001'
列出MySQL中的某个数据库有哪些数据表:
sqoop list-tables \
--connect jdbc:mysql://hadoop03:3306/biyesheji \
--username root \
--password root
版权归原作者 biyezuopinvip 所有, 如有侵权,请联系我们删除。