关于离线平台的设计

项目.离线平台

1.业务

通过数据源获取数据,根据不同的KPI指标,从多个维度来统计新增的用户

2.项目流程:

2.1、读取HDFS数据进行ETL清洗操作,并将最终结果写入到HBase中
2.2、从HBase中读取数据,进行新增用户统计分析操作,并将结果写入到Mysql

3.具体实现

  • 数据清洗:从HDFS到HBase

3.1、LoggerUtil.java
3.1.1、主要作用:每一次将一行字符串数据解析成HashMap键值对集合
3.1.2、重要细节:
字符串的截取
不合法数据的过滤
字符串的解码(就是将%相关的字符串编码转换成可读类型的数据,我们会将keyValue出现的特殊字符改成%DS,后续处理)
错误数据的Logger输出

3.2、AnalysisDataMapper.java
3.2.1、主要作用:开始清洗HDFS中的日志数据
3.2.2、重要细节:
开始清洗数据,首先使用LoggerUtil将数据转换成Map集合
将得到的存放原始数据的Map集合封装成事件以用于事件数据合法性的过滤(事件的封装依赖于一个枚举类,
使用事件的alias别名来区分匹配事件)
事件的封装要按照平台来区分
平台区分完成后,按照事件类型来区分(例如en=e_l等)
事件封装过程中涉及到事件数据完整性的清洗操作
数据输出:创建rowKey,创建Put对象,等待输出到HBase

3.3、AnalysisDataRunner.java
3.3.1、组装Job
设置Mapper以及Mapper的输出Key和输出Value
设置Reducer的数量为0
配置输入路径(按照传入的时间读取指定HDFS时间文件夹中的数据,如
用户传:-date 2019-05-31,将其解析为HDFS数据源存储目录: /event_logs/2019/05/31
设置输出(主要是按照传入时间,创建指定HBase表,以用于数据保存输出,HBase表名要和时间相关联)

  • 数据分析:从HBase到Mysql

Mapper负责聚合成维度,即包装为StatsUserDimension,交给Reducer

3.4、NewInstallUsersMapper.java
3.4.1、从Hbase中读取数据开始分析,输出Key的类型为总维度,输出Value的类型为Text(保存的是uuid)读取数据时,要验证数据有效性。类似Map<JavaBean,String>
3.4.2、创建总维度对象,Text对象。
3.4.3、拼装维度
3.4.4、按照总维度聚合Text(uuid)

Reducer对Mapper包装过来的对象进行一些处理,即将StatsUserDimension包装为MapWritableValue对象,这样就能uuid的个数和业务指标做一个映射

3.5、NewInstallUserReducer.java
3.5.1、接受Mapper的数据,泛型分别为:
<StatsUserDimension, Text, StatsUserDimension, MapWritableValue>
3.5.2、使用set集合去重uuid,并统计uuid的个数,即一个用户只统计一次
3.5.3、输出格式为:将KPI名称(业务指标)和统计出来的个数做一个映射(使用MapWritableValue对象)
3.5.4、直接写出即可

3.6、NewInstallUserRunner.java:任务组装
3.6.1、ICollector.java:将数据最终插入到Mysql时用到的SQL语句的拼装接口
3.6.2、NewInstallUserCollector.java:拼装用于插入new_install_user表的SQL语句
3.6.3、BrowserNewInstallUserCollector.java:拼装用于插入browser_new_install_user表的SQL语句3.6.4、IDimensionConverter.java:接口,通过维度对象(每个维度对象中保存着不同的维度数据),得到维度对应的维度id。
3.6.5、DimensionConverterImpl.java:接口的具体实现类
3.6.6、TransformerMySQLOutputFormat.java:自定义OutputFormat,用于将数据写入到Mysql中

自定义TransformerRecordWriter,写出的时候进行解析,使用getRecordWriter获得RecordWriter;自定义RecordWriter#write方法拼装sql语句,使用JDBC即可

4.注意事项:

1.维度可能有多个方面,如哪个浏览器?什么时间?哪个平台?等等,每个维度代表一个类;每封装好一次,就往上下文写一次;维度是一个难点

2.将map形式的数据封装成事件,按照事件过滤数据,方便操作,也可以进行按需选择字段

3.要注意,浏览器打印单独的%时,出现%25,可以通过把单独存在的%换成%25;或者直接丢弃数据

4.不同KPI维度写入不同表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值