乐趣区

基于Hadoop的数据仓库

1 什么是数据仓库

数据仓库是面向主题的、集成的、具有时间特征的、稳定的数据集合,用以支持经营管理中的决策制定过程

  • 典型应用:

    • 报表生成
    • 数据分析
    • 数据挖掘
  • 数据仓库其他特征

    • 数据量非常大(TB 以上)
    • 是数据库的一种新型应用
    • 使用人员较少
  • 商用数据仓库

    • 典型代表: db2, teradata, vertica
    • 价格昂贵,支持数据量通常 TB 或以下
  • 大数据时代数据仓库

    • 数据量非常大
    • 扩展性和容错性很重要
    • 成本考量

不了解的数据仓库基本概念的,可以参考之前《了解一下数据仓库》这篇文章。

2 基于 Hadoop 数据仓库的基本架构

  • 技术手段

    • 通常使用 Hive 作为数据仓库

      • 超大数据集设计的计算扩展能力
      • 支持 HQL 查询 — 简单,学习代价低
      • 统一的元数据管理
  • 基本特点

    • 支持海量数据
    • 多维数据分析
    • 使用人员较少
    • 数据延迟较高

2.1 基于 Hadoop 的数据仓库: 第一版

  • 优点

    • 满足了数据仓库的基本要求
    • 能够处理海量数据
    • 系统扩展性和容错性极好
  • 缺点

    • 性能较低,实时性不好

2.2 基于 Hadoop 的数据仓库: 第二版

  • 改进

    • 使用 MPP(Presto) 系统提高查询性能
  • 优点

    • 满足了数据仓库的基本要求
    • 能够处理海量数据
    • 系统扩展性和容错性极好
    • 实时性较好
  • 缺点

    • 数据延迟高(数据从产生到入库,再到查询,整个周期长)

2.3 基于 Hadoop 的数据仓库: 第三版(增加实时 pipeline)

  • 改进

    • 使用 Spark Streaming 系统降低数据延迟
  • 优点

    • 满足了数据仓库的基本要求
    • 能够处理海量数据
    • 系统扩展性和容错性极好
    • 实时性较好
    • 数据延迟低

3 数据仓库具体实例

网站报表系统

  • 基本作用

    • 按照业务要求生成报表
    • 报表可实时产生或按天产生
  • 数据规模

    • 数据量: TB 级
    • 表数目: 100+
  • 用户量

    • 约几十个

3.1 收集数据

3.2 ETL

  • ETL

    • Extract, Transform, Load
    • 可使用 MapReduce/Spark/Pig 实现
    • 存储格式: 行式存储与列式存储
  • 行存储与列存储

如何创建带压缩的 ORC 表

  • ETL 后日志格式(文本格式)如下:

  • 临时表(文本格式)定义如下:
    CREATE EXTERNAL TABLE tmp_logs (
        domain_id INT,
        log_time STRING,
        log_date STRING,
        log_type INT,
        uin BIGINT
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    LOCATION '/user/hivetest/logs';
  • 将数据导入临时表 tmp_logs:

LOAD DATA INPATH '/nginx/logs/2016011206' OVERWRITE INTO TABLE tmp_logs;

  • 将临时表中数据导入到 orc 格式的表中:
    CREATE TABLE logs (
        domain_id INT,
        log_time STRING,
        log_date STRING,
        log_type INT,
        uin BIGINT
    )
    PARTITION BY(log_time STRING)
    STORED AS ORC
    tblproperties("orc.compress"="SNAPPY");

    INSERT INTO TABLE logs PARTITION(dt='2016-01-12-06') SELECT * FROM tmp_logs;
  • 压缩算法

  • 查询
    SELECT domain_id, sum(log_type) FROM logs WHERE
    log_time>'2016-01-12-06' GROUP BY domain_id;

3.3 参数化报表与可视化

  • 参数化报表

    • 根据用户定制的数据要求,生成 SQL
  • 可视化工具

    • Echarts: http://echarts.baidu.com/
    • D3.js: https://d3js.org/
    • Tableau: 商用可视化软件

4 Summary

  • 基于 Hadoop 构建数据仓库的好处

    • 开源免费
    • 支持海量数据
    • 周边工具成熟
  • 基于 Hadoop 构建数据仓库的流程

    • 数据收集
    • 数据 ETL
    • 参数化报表与可视化
退出移动版