- 1、将项目软件工具包导入
- 2、项目思路:
- 2.1、读取 HDFS 数据进行 ETL 清洗操作,并将最终结果写入到 HBase 中。
- 2.2、从 HBase 中读取数据,进行新增用户统计分析操作,并将结果写入到 Mysql。
- 3、细节实现
- 数据清洗:
- 3.1、LoggerUtil.java
- 3.1.1、主要作用:将字符串数据解析成 HashMap 键值对集合。
- 3.1.2、重要细节:
- 字符串的截取
- 不合法数据的过滤
- 字符串的解码(就是将%相关的字符串编码转换成可读类型的数据)
- 错误数据的 Logger 输出
- 3.1.3 过程描述
- 传入数据非空判断
- 去除数据首位空格
- 服务器时间格式验证
- 解析参数字符串,使用 UTF-8 解码后再存放于 map 集合中
- 解析 ip 地址所属地区,并存放于 map 集合中
- 解析浏览器信息,并存放于 map 集合中
- 数据清洗:HDFS --> InputFormat --> Mapper --> Reducer --> OutputFormat --> HBase
- 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 2017-08-14 => event_logs/2017/08/14
- 设置输出(主要是按照传入时间,创建指定 HBase 表,以用于数据保存输出),比如:HBase 表名要和时间有关 => event_logs20170814,然后使用 HBase 的新 API 的 Admin 创建表 => 如果表存在,则删除后重新创建
- 3.3.1、组装 Job
- 数据分析:HBase --> HBaseInputFormat --> TableMapper --> Reducer --> MySQLOutputFormat --> MySQL
- 3.4、NewInstallUsersMapper.java
- 3.4.1、从 Hbase 中读取数据开始分析,输出 Key 的类型为总维度(进行用户分析的组合维度),输出 Value 的类型为 Text(保存的是 uuid)读取数据时,要验证数据有效性。
- 3.4.2、创建总维度对象,Text 对象。
- 3.4.3、拼装维度。
- 3.4.4、按照总维度聚合 Text(uuid)。
- 3.4.5、分别写出。
- 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 中。
大数据技术之_18_大数据离线平台_05_离线平台项目模块小结
2019-05-07 10:56:53
浏览数 (1)