1 什麼是數據倉庫
數據倉庫是面向主題的、集成的、具有時間特徵的、穩定的數據集合,用以支持經營管理中的決策制定過程
-
典型應用:
- 報表生成
- 數據分析
- 數據挖掘
-
數據倉庫其他特徵
- 數據量非常大(TB以上)
- 是數據庫的一種新型應用
- 使用人員較少
-
商用數據倉庫
- 典型代表: db2, teradata, vertica
- 價格昂貴,支持數據量通常TB或以下
-
大數據時代數據倉庫
- 數據量非常大
- 擴展性和容錯性很重要
- 成本考量
不瞭解的數據倉庫基本概念的,可以參考之前《瞭解一下數據倉庫》這篇文章。
2 基於Hadoop數據倉庫的基本架構
-
技術手段
- 通常使用Hive作爲數據倉庫
- 超大數據集設計的計算擴展能力
- 支持HQL查詢 — 簡單,學習代價低
- 統一的元數據管理
- 通常使用Hive作爲數據倉庫
-
基本特點
- 支持海量數據
- 多維數據分析
- 使用人員較少
- 數據延遲較高
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
- 參數化報表與可視化