前言:本文是一个完整的企业级大数据项目实战,实时|离线统计分析用户的搜索话题,并用酷炫的前端界面展示出来。这些指标对网站的精准营销、运营都有极大帮助。
为什么说是企业级?因为架构大致是按照企业标准来的,从日志的采集、转化处理、实时计算、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,地址文章开头已给出。
|