您的位置:首页 > 大数据

大数据技术之_18_大数据离线平台_05_离线平台项目模块小结

2019-04-20 15:45 736 查看
  • 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 创建表 => 如果表存在,则删除后重新创建
  • 数据分析: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 中。
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐