1、客户端访问->js和java数据收集
2、nginx服务器负载均衡发送到各个Tomcat服务器,数据在nginx上分析
3、nginx生成log日志文件放到本地目录下
4、通过flume收集日志信息,流程 https://blog.csdn.net/qq_37344518/article/details/83717716
5、输出到hdfs(脏数据),用MapReduce做数据过滤,过滤出IP,浏览器,操作系统,用户位置等信息。
6、从hdfs进行ETL数据清洗之后输入到HBASE(只是聚合,不用运算,所以省略reduce过程,不用进行shuffer)
7.1、使用MapReduce输出到mysql数据库,入口为hbase,出口为mysql
7.2、存放数据到hive,再使用sqoop数据迁移放入到mysql数据库中
一、需求分析
对平台用户访问过的信息进行统计,比如用户访问深度等,分成如下几个模块
- 用户基本信息分析
- 浏览器信息分析
- 地域信息分析
- 用户浏览深度分析
- 外联数据分析
- 订单分析
二、获取数据
用户进入网页,会先判断是否是新用户或者老用户,即判断sessionid是否过期。在用户触发事件时调用java代码取到数据。
三、NGINX负载均衡
因为访问量一般都会很大,会由nginx做负载均衡后转发到各个Tomcat服务器,数据在转发之前收集。启动后各种操作会生成日志。
四、flume日志收集
flume的Source来源就是nginx日志,每接到一条消息都会放到Channel管道中,通过sink接口输出到hdfs。其中要在多个节点上完成flume聚合,第一个flume的Sinks输出是第二个flume的Source输入。
五、hdfs
通过MapReduce进行数据的简单清洗
六、hbase
根据要求将数据进行过滤,在MapReduce代码中重写map即可,不用进行reduce聚合运算,省去了shuffer落地磁盘过程,大大加快速度。
项目遇到的问题
把数据导入hbase中时,速度非常慢,导致集群有机器死机。经过查询资料发现,在进行数据导入时不需要进行reduce运算,只需要map运算即可,因为后面具体的数据清洗也会进行这一步骤。