一、项目需求
- 统计网站每个(指定)课程访问的点击量和从不同搜索引擎过来的数量
- 点击量:其实就是WordCount
- 搜索引擎:通过referer获取
二、实现步骤
- 日志生成,因为是自己测试,没有实际数据,所以数据通过Java代码产生
- Flume采集日志数据
- Flume把数据发送到Kafka
- Spark Streaming通过分析日志,一个一个解析出如下信息,然后进行统计:
– 课程编号
– ip地址
– referer
– 时间维度 - 最后把信息存入Hbase,供后续展示使用。
三、项目架构
项目每个部分使用的技术架构如下:
- 日志收集:Flume
- 数据订阅推送:Kafka
- 实时处理: Spark Streaming
- 统计结构图形化展示
用离线和实时计算都可以计算出想要的结果,那么为什么要使用实时流计算而不用mapreduce的离线计算呢?
一个很重要的原因是时效性,一个任务如果要求是1个小时内展示结果,那么用离线计算或者实时计算区别可能不大,都能按时计算出结果;如果时效性要求更高,需要在30分钟、10分钟、1分钟、甚至秒级别内计算出结果呢?这时离线计算就不能满足要求了,所以引入了实时流计算。
实时计算和离线计算的区别
- 数据来源
- 离线:HDFS历史数据,数据量比较大
- 实时:消息队列(Kafka),实时新增/修改记录过来的某一笔数据
- 处理过程
- 离线:MapReduce: map + reduce
- 实时: Spark:DStream / Spark Streaming
- 处理速度
- 离线: 慢
- 实时: 快
- 进程
- 离线: 启动 + 销毁
- 实时: 启动后一直在跑
接下来请查看下一篇,2、技术选型和项目架构。