使用脚本统计日志服务器上的采集的日志文件的行数与HDFS上的目标存储目录中的文件的行数,进行对比
日志采集网络架构设计为两层
第一级采用了tailDirSource,fileChannel,avroSink的搭配,
第二级采用了avroSource,fileChannel,hdfsSink的搭配
tailDirSource实现了flume的事务机制,并且可以记录偏移量
fileChannel落地磁盘,是可靠的
第一级的avroSink和avroSource配置成failover,是高可用的
最后落地在hdfs,也是可靠的
出现的原因:
有可能出现数据重复-不过数据重复也只是在出现故障后重启才有可能出现,而且通常只会有少量重复(一个或几个批次),如果出现了flume宕机并重启,我们在后续的常规数仓计算流程前,加入一个数据去重的计算任务
如何发现数据重复的问题:
对比hdfs中采集的日志文件的行数和日志服务器上的日志文件的行数
1 ) 在日志服务器上使用脚本统计各个日志服务器采集的日志数据的行数,将统计的结果发送到web项目的meta_bus中;
2 ) 在可以连接hdfs集群的机器上使用脚本,从meta_bus中获取当日日志服务器上的日志数据的总行数,将其与hdfs目标目录下的日志数据的总行数进行比较
3)如果hdfs上统计出的行数>各个日志服务器上的总行数,说明有数据重复,需要进行去重任务
4)在hive中创建一张临时表,导入hdfs中的数据,
5)使用HQL对数据进行去重(GROUP BY )
6)将数据重新导出到放去重任务目录下
7)使用脚本将数据导入到ods层的表中
8)在导入之前需要判断是否有进行去重任务(即判断该日去重任务目录下是否有数据),以确定从哪个目录下加载数据
9)如果去重任务目录下有数据,从去重任务目录下加载到ods层;如果没有,则从hdfs的日志目录下加载数据