转载地址:http://www.cnblogs.com/sharpxiajun/archive/2011/11/01/2232254.html
昨晚写的博文得到大家积极的反馈,非常喜欢这样一种交流的过程,也发现自己还有很多知识掌握的不够好,javascript是我主攻方向,对它的学习要求一定要高,其实对象创建的中篇写的不是太好,太仓促了,很多问题思考不到位,有点浅尝辄止,因此最后一篇我想要好好准备下,就算写不出什么有新意的观点,但一定要写出一篇经过自己仔细思考的文章。
最近噼里啪啦的起了三个系列,今天有人跟我说我贪多,最后啥都学不好,哎,不管了,人生就是要享受当下的快乐,只要学的开心就能坚持下去。
今天也有朋友说我的java框架那个系列其实可以不用写,因为这些只要做了一段时间java的人都会,如果我想写就应该加入算法,设计模式或者是很好的封装类,突出这个重点,这个说的我有点无语了,因为这位童鞋说道的东西我都是看过书实践少,今天在回复一位博友的评论时候我说我想做的职业人是研究人员和工程人员之间的人,我做研究是为了更好的做工程项目,因此我要写的东西应该是实用的东西,那些算法,设计模式等等的确很重要,但是我常把他们当做井上天花的东西,我写java框架主要目的是想把我以前的积累回顾一下,把我对java的框架的理解写出来,对我自己而言我想看看自己到底做过学过多少的技术,对其他人而言,我想知道我写的东西如果给企业做开发好不好用。再说来,我想做高级的东西也得有一个简单的基础,我的基本框架出来了我就可以在这个基础上写出更多复杂的东西,例如我想等我把主页面导航做完就专门讲java服务端缓存技术,这个我有段时间的确研究过,但你没有一个基础框架这个技术也就纸上谈兵了。
好了,不再废话了,今天我要介绍我做过的用户行为分析系统的架构图,这个图不是我们系统的实际架构图,我找了半天没找到,最后总结了我们部门hadoop集群架构后自己画出来的,大家见下图(注意:这个结构图是针对网站的用户行为分析的):
不知道这个图清不清晰,下面我解释下这个结构:
1.第一步就是要在我们要采集用户信息的网站里部署我们自己编写的采集脚本,这个脚本是用javascript编写的,最好是网站所有页面都会引用到这个脚本;
2.每当用户刷新了一次页面,页面就会自动向我们的日志服务集群(Beacon Servers)发送一个这样格式的请求a.gif?xxx=xxx&yyy=yyy....,a.gif是一个1像素*1像素的透明图片,在现在网速这么快的年代基本忽略不计;
3.日志服务集群把传来的信息按一定规则存到日志文件里(其实就是按天一个个存储);
4.对日志服务器集群的日志文件进行预处理,这是使用perl和shell脚本语言完成,因为日志服务器保存的日志文件都是不规范的,而且还包含很多无用的信息,预处理就是让这些日志文件除掉无用信息并且转化成hadoop比较好处理的文件格式;
5.预处理好的文件通过数据通讯层传送到hadoop集群存储起来;
6.hadoop及hive集群根据定义好的业务规则定时的对这些日志文件进行计算,一个完整的业务计算过程在hadoop里称为一个job,计算的技术我们部门主要是mapreduce或者hive;
7.每天的日志文件的数量都是惊人的,我们公司一般式1T左右,而且每天的job数量也比较多,人力很难做好,那么如何调度这些job以及监控job的运行情况的系统管理就十分重要了,这就产生了调度系统和监控系统;
8.计算出的结果导入到Oracle的rac集群或者是Hbase集群,这样我们就可以实时调用计算好的数据;
9.数据展示系统,我们部门一般有三种方式为用户展示这些数据,一种是专门的用户行为分析展示系统,这是用javaEE开发的管理系统,一个是直接提供数据查询接口,比如oracle的plsql用户或者是hive客户端以及Hbase客户端,最后就是专门的报表系统来进行展示了。
这就是我对我们所做的用户行为分析系统的理解,其实我在项目组里只是做了其中某一小块,对整体了解不是很深入,像日志服务器集群和hadoop是根据我所了解的知识推测出来的设计,不晓得准不准确,不知道有没有哪位童鞋也做过这样的系统,能给我提出一点宝贵的意见。
最近我搜刮了百度分析和谷歌分析的用户账号,这个系列下面几篇章节我想通过我使用这两个系统总结用户行为的相关业务知识,虽然用户行为分析使用到了最近超火的hadoop技术,但是用户行为分析所传达的业务知识才是这个系统核心,我对用户行为分析的业务也是一知半解,我也需要这样一个过程。