hive数据仓库建设

Posted weiyiming007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive数据仓库建设相关的知识,希望对你有一定的参考价值。

原文:https://www.jianshu.com/p/4e72b22edf49

1、数据仓库与数据库

数据仓库是数据库概念的升级,和数据库相比,数据仓库要比数据库更加庞大;
数据仓库主要用于分析数据,数据库主要用于捕获数据;
数据仓库主要存储历史数据,数据库存储在线交易数据;
数据仓库的基本元素是维度表,数据库的基本元素是事实表。
数据仓库的组成部分包括数据抽取工具、数据库、信息发布系统、数据仓库管理、元数据、数据集市、访问工具。
数据仓库的数据建模分为四个阶段,分别是业务建模、领域概念建模、逻辑建模、物理建模。

 

2、为什么要数据仓库

为什么要建设数据仓库呢? 在传统数据库里面, 我们有很多东西是实现不了的;
比如:

1) 问:我想看到任何一个用户的任何时间的任何一个状态! ,就相当于4维和5维的关系,我们无法看到昨天任何一个人的任何一个细节,我们看到的都是当前的,  mysql数据库也一样,只是最终状态的展现,不保存历史, 当然,这和mysql建模也有关系.

答:mysql数据库是无法实现的, 因为没有保存历史.  但是hive可以


2) 问:mysql的数据怎么用作模型数据,怎么实现算法

答:mysql可以导下来excal表格数据,然后用excal表格数据作为数据源,但是当时太low, 如果数据量稍微一大,就GG了, 但是hive可以, 不需要导,直接读取就行

3) 问:mysql数据量如果多了,怎么办?

答:mysql数据量如果多了, 可以优化,可以增加表,增加库,增加配置等,但这不是最终解决办法,但是hive可以, 理论上可以无限叠加数据,只要你磁盘足够.

等等等等,实际应用中的例子太多了;

 

3、数据仓库的好处

如果mysql没有使用kuttle等传统调度工具的话, 很难受的,每一次提取数据都得从底层去提取, 太耗功率,而且容错率极低.


数据仓库就不一样了, 所有的数据都开发成中间件, 都整理好成维度表,按照分区,增全量,干干净净,整整洁洁,数据提取,展示超级方便!

 

4、数据仓库的建设

业务数据库 -> sa(按照业务需要根据时间抽取增全量,一般都是增量,无分区,每天最新分区) -> ods(数据明细层,有分区,每一天的sa层数据=ods的一个分区) -> dws(轻度汇总层,
将所有的需要计算的数据,都提前计算好,放到dws层,按照情况定不定分区,我们做维度渐变,需要分区,)  

业务数据库(mysql)  ->sa(通过sqoop抽取) -> ods -> dws -> dwd -> dm -> app层

sa(缓冲层): 直接从mysql和MB用Sqoop抽取的,每天只保存一份,根据需求卡时间抽,包括全量增量

ods(数据明细层): 数据明细层,有分区,每一天的sa层数据=ods的一个分区,这一层的数据经过简单的ETL清洗,比如说去除一些不合逻辑的,去重的,字段命名不规范的.

dws(轻度汇总层):这一层的目的就是报表不需要再从ods层拿数据,如果有一个字段需要从ods层拿数据,那就是dw层没有做的好, 从ODS层中对用户的行为做一个初步的汇总,比如说
要统计最近一周的投资人数,投资金额,投资次数,登录次数啊,频率啊,债转成功次数啊,金额啊,受让次数啊,等等,都可以做啊,也是按照主题去汇总的。这里的分区看公司的取舍吧,我们
加了分区, 牺牲了磁盘空间, 用作渐变维度。

dwd(维度表,和dws是平行的):这一层主要解决常用不变的维度信息,让维度做一个轻度的汇总,我们可以不需要从各个源数据里面去重新找了, 比如说用户的常用身份信息,身份证,手
机号码,登录地址,居住城市,学历等其他很多信息,这些信息来源于不同的表,我们也可以做一个轻度汇总。维度表一般不加分区,但是我们也加了分区的,也需要渐变维度,做一个渐
变维度。每天一份全量。 dwd和dws的区别就是,dwd是一些维度信息, dws是业务的一些维度信息,其实如果稍微笼统的话,两者是可以合并在一起的.

dm(报表层):这一层不多解释了,展示的报表层,我们磁盘多,加个分区把. 我们的业务人员(如运营,产品等)从HUE平台自己写sql查询

app(展示层): 也加分区,这一层和dm层的区别就是,这一层的数据都是要进mysql的, 然后通过mysql展示导web界面。而dm层所有的数据都不要进mysql,如果进了mysql, 
就不再dm层了,直接到app层了

 

5、数据仓库中会遇到的问题

问题: 在从mysql数据抽取的时候,mysql数据会发生变化,而我们抽取过来的数据却是没有变化之前的

如果这点差别业务允许的话,自动忽略吧.   

解决办法1: 集中资源先把所有数据抽取过来,先抽取过来后, 再ETL.你抽取的越快, 数据的差异越小,一般也在允许范围内.如果连这点差异都不能忍受的话,只能按照方法二了

解决办法2: 我们之前使用canal监控mysql变化日志, 然后跑日志,实现数据完全同步,这一块我们实现了, 但是我没有亲自做过.很遗憾.

解决办法还有很多,以后等我找到更好的办法后,再分享!

以上是关于hive数据仓库建设的主要内容,如果未能解决你的问题,请参考以下文章

《企业Hive数据仓库的搭建之路》互联网行业从业十年的大拿,全程案例式教学

Hive数据仓库应用课后题及答案

Hive数仓建设手册

Hive数仓建设手册

实时数据仓库的演进

一文理解实时数据仓库的演进