目录
一、业务需求
根据网站或app应用每天生成的用户日志数据放在大数据平台中来统计出PV(访问量)和UV(独立访客)
二、业务实现方案
1.技术栈
Hadoop CDH(大数据集群管理)+Flume(数据采集)+Spark(数据计算分析)+Hive(数据仓库)+Sqoop(数据同步)+MySQL
2.业务实现流程
- 搭建Hadoop CDH集群管理平台
- Flume将网站日志数据采集到Hadoop中的HDFS分布式存储系统中
- Spark SQL清洗存储在HDFS的网站日志数据,清洗完后将其数据继续存储在HDFS中
- Hive建立数据仓库,建立外部表,将清洗完的日志数据从HDFS中导入到Hive的外部表中,作为基础数据的存储
- 在Hive中新建新的外部表用于存储PV、UV的结果数据
- 用Hive的HQL统计分析日志数据,统计出PV、UV并将结果数据存到新的外部表中
- 将统计完的PV、UV数据使用Sqoop从Hive同步到外部的MySQL中供给WEB前端使用
3.离线分析系统架构图
三、技术实现
1.Hadoop CDH集群管理平台
一般都是运维去搭建,如果想要自己搭建只能查资料采坑跳坑了。
2.Flume采集服务器日志数据到HDFS
cd 执行代码目录
vi hdfs-avro.conf
hdfs-avro.conf文件内容:
#定义agent名, source、channel、sink的名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 配置Source
a1.sources.r1.type = exec
a1.sources.r1.channels = c1
a1.sources.r1.deserializer.outputCharset = UTF-8
# 配置需要监控的日志输出目录
a1.sources.r1.command = tail -F /home/data/nginx_log/access.log
#设置缓存提交行数
a1.sources.s1.deserializer.maxLineLength =1048576
a1.sources.s1.fileSuffix = .DONE
a1.sources.s1.ignorePattern = access(_\d{4}\-\d{2}\-\d{2}_\d{2})?\.log(\.DONE)?
a1.sources.s1.consumeOrder = oldest
a1.sources.s1.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
a1.sources.s1.batchsize = 5
#具体定义channel
a1.channels.c