本文并非零基础教学,只讲流程和代码,基础性的东西读者自行查缺补漏。主要需掌握Flume+KafKa+Hbase+Hive+Spark+Mysql,后台和前端的开发可以使用传统JDBC模式。
最终效果图如下:
项目架构图如下:
环境准备
模拟网站实时产生日志信息
• 获取数据源,本文是利用搜狗的数据:搜狗实验室
• 编写java类模拟实时采集网站日志。主要利用Java中的输入输出流。写好后打成jar包传到服务器上
• 编写采集日志的shell脚本
vim weblog.sh
• 运行效果图
Flume Agent2采集日志信息
主要通过设置Source、Channel、Sink来完成日志采集。
• 配置flume配置文件 vim agent2.conf
• 运行的时候直接 ./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,地址文章开头已给出。