当前位置:首页 > 新闻资讯 > 正文

大数据项目实战之新闻话题的实时统计分析2018-03-23 14:44:00 | 编辑:hely | 查看: | 评论:0

本文是一个完整的企业级大数据项目实战,实时|离线统计分析用户的搜索话题,并用酷炫的前端界面展示出来。这些指标对网站的精准营销、运营都有极大帮助。
 前言:本文是一个完整的企业级大数据项目实战,实时|离线统计分析用户的搜索话题,并用酷炫的前端界面展示出来。这些指标对网站的精准营销、运营都有极大帮助。

为什么说是企业级?因为架构大致是按照企业标准来的,从日志的采集、转化处理、实时计算、JAVA后台开发、WEB前端展示,一条完整流程线下来,甚至每个节点都用的高可用架构,都考虑了故障转移和容错性。当然和真实的企业项目还是会有很大差距,数据量一大需要考虑的东西就多了。。。

所用到的框架包括:Flume+KafKa+Hbase+Hive+Spark(SQL、Structured Streaming )+Mysql+SpringMVC+Mybatis+Websocket+AugularJs+Echarts。

所涉及到的语言包括:JAVA、Scala、Shell。

本文并非零基础教学,只讲流程和代码,基础性的东西读者自行查缺补漏。主要需掌握Flume+KafKa+Hbase+Hive+Spark+Mysql,后台和前端的开发可以使用传统JDBC模式。

最终效果图如下:

 

 

项目架构图如下:

 

 

环境准备

 

模拟网站实时产生日志信息

• 获取数据源,本文是利用搜狗的数据:搜狗实验室

• 编写java类模拟实时采集网站日志。主要利用Java中的输入输出流。写好后打成jar包传到服务器上

 

 

 

 

• 编写采集日志的shell脚本

vim weblog.sh

 

 

• 运行效果图

 

 

Flume Agent2采集日志信息

主要通过设置Source、Channel、Sink来完成日志采集。

• 配置flume配置文件 vim agent2.conf

 

• 编写shell脚本,方便运行。vim flume.sh

 

 

 

• 运行的时候直接 ./flume.sh 即可

Flume Agent3采集日志信息

各方面配置都和Agent2完全一样、省略。

Flume Agent1整合日志信息

• vim agent1.conf

 

 

• vim flume.sh

 

 

具体讲解如下:

Flume与Hbase的集成

• 通过查看官方文档可知,Flume与Hbase的集成主要需要如下参数,表名、列簇名、以及Java类SimpleAsyncHbaseEventSerializer。

 

 

• 改写SimpleAsyncHbaseEventSerializer

下载Flume源码,需要改写如下两个Java类.

 

 

 

 

 

 

• 打成jar包,上传到linux服务器中替换原有flume目录的该jar包

 

 

 

 

• Flume配置文件配置Sink为Hbase

 

 

Flume与Kafka的集成

• Flume配置文件:主要配置topic、brokerlist:

 

 

 

 

• 编写kafka消费端脚本,消费从flume传过来的信息。

vim flume.sh

 

 

• 运行效果图

 

 

Kafka与Spark集成完成数据实时处理

spark的输入源为kafka,spark对来自kafka的数据进行计算,主要就是累加话题量。

 

 

Spark与Mysql集成

 

 

离线分析:HIVE集成HBASE。

我们知道Hive是一个数据仓库,主要就是转为MapReduce完成对大量数据的离线分析和决策。之前我们已经用Flume集成Hbase,使得Hbase能源源不断的插入数据。那么我们直接将HIVE集成HBase,这样只要Hbase有数据了,那Hive表也就有数据了。怎么集成呢?很简单,用【外部表】就搞定了。

 

 

验证一下HBASE和HIVE是不是同步的:

 

 

 

 

好了现在我们可以在Hive中尽情的离线分析和决策了~~~

SpringMVC+Mybatis完成对mysql数据的查询

个人觉得传统JDBC实在是太笨重,还是最喜欢Spring整合Mybatis对数据库进行操作。这里主要完成的操作就是对mysql的数据进行查询。详情请参考github,地址文章开头已给出。

 

 

WebSocket实现全双工通信

既然要实现客户端实时接收服务器端的消息,而服务器端又实时接收客户端的消息,必不可少的就是WebSocket了,WebSocket实现了浏览器与服务器全双工通信(full-duple),能更好的节省服务器资源和带宽并达到实时通讯。WebSocket用HTTP握手之后,服务器和浏览器就使用这条HTTP链接下的TCP连接来直接传输数据,抛弃了复杂的HTTP头部和格式。一旦WebSocket通信连接建立成功,就可以在全双工模式下在客户端和服务器之间来回传送WebSocket消息。即在同一时间、任何方向,都可以全双工发送消息。WebSocket 核心就是OnMessage、OnOpen、OnClose,本项目使用的是和Spring集成的方式,因此需要有configurator = SpringConfigurator.class。

 

 

Echarts完成前端界面展示

大家可以看到开头给出的项目效果图还是蛮漂亮的,其实非常简单,就是用的Echarts这个框架。直接给它传值就ok了,其他前端那些事它都给你搞定了。详情请参考github,地址文章开头已给出。

 

上一篇:详解:深度学习的关键术语 教育部最新:283所高校获批数据科学与大数据专业(附完整名单+公益计划)下一篇:

公众平台

搜索"raincent"或扫描下面的二维码