数据仓库分层设计(基于Hive)
1、数据仓库逻辑分层架构
先来看数据仓库的逻辑分层架构: 分层名称可能不一样,但基本是都是这样
想要看懂数据仓库的逻辑分层架构,先要弄懂以下概念
- 数据源 : 数据来源,互联网公司的数据来源随着公司的规模扩张而呈递增趋势,同时自不同的业务员,比如埋点采集,客户上报,API等。
- ODS层 : 数据仓库源头系统的数据表通常会原封不动地存储一份,这称为ODS层,ODS层也经常会被称为准备层。这一层做的工作是贴源,而这些数据和源系统的数据是同构,一般对这些数据分为全量更新和增量更新,通常在贴源的过程中会做一些简单的清洗。
- DW层 : 数据仓库明细层和数据仓库汇总层是数据仓库的主题内容。将一些数据关联的日期进行拆分,使的其更具体的分类,一般拆分年,月,日,而ODS层到DW层的ETL脚本根据业务需求对数据进行清洗、设计,如果没有业务需求,则根据源系统的数据结构和未来规划去做处理,对这层的数据要求是一致,准确,尽量建立数据的完整性
- DWD层:是数据明细层,是基于业务上的数据明细,在这一步做了汇聚,去重,清洗,标准化处理
- DWS层:是汇总数据层,基于idm层的数据进行一些计算,生成一些指标报表类的数据
- DA应用层:基于 DWD/DWS 的数据做一些数据计算生成应用所需的数
- 业务产品CRM、ERP等,业务产品所使用的数据,已经存在于数据共享层,直接从数据共享层访问即可;
- 报表FineReport、业务报表,同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层
- 即席查询即席查询的用户有很多,有可能是数据开发人员,网站和产品运营人员,数据分析人员,甚至是部门老大,他们都有即席查询数据的需求
- OLAP:目前,很多OLAP工具不能很好的支持HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行
- 其他数据接口:这种接口有通用的,有定制的。比如一个从Redis中获取用户属性的接口视通用的,所有的业务都可以调用这个接口来获取用户属性
2、为什么数据仓库要分层?
我们对数据进行分层的一个主要原因就是希望在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:
- 清晰的数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解(像电信业务中的流量域,公安业务中的户籍域等,都是为了我们更快的理解和使用数据)
- 清晰的数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解(就是在每张加工dws/dwd的表的时候都加上 ‘来源表’这个字段,方便出现数据问题查找源头)
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。比如在电信业务中流量域中,我们加工一张用户每天使用流量信息表,这样我们加工每月,近三月流量使用更加方便
- 把复杂问题简单话。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一步骤,比较简单和容易理解。
- 屏蔽原始数据的异常。就是把ods的脏数据清洗成我们需要的数据
- 屏蔽业务的影响,不必改一次业务就需要重新接入数据。
数据体系中的各个表的依赖就像是电线的流向一样,我们都希望它是很规整,便于管理的。
3、怎么进行分层
3.1 理论
我们已经知道数据仓库一般分为3个层,即:数据运营层,数据仓库层和数据产品层。
ODS层 数据运营层
‘面向主题的’,数据运营层,也叫ODS层,是最接近数据源中数据的一层,是数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类系统的分类方式而分类的。
例如这一层可能包含的数据表为:人口表(包含每个人的身份证号、姓名、住址等)、机场登机记录(包含乘机人身份证号、航班号、乘机日期、起飞城市等)、银联的刷卡信息表(包含银行卡号、刷卡地点、刷卡时间、刷卡金额等)、银行账户表(包含银行卡号、持卡人身份证号等)等等一系列原始的业务数据。这里我们可以看到,这一层面的数据还具有鲜明的业务数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式。
但是,这一层面的数据却不同于原始数据。在源数据装入这一层时,要进行诸如去噪(列如去掉明显偏离正常水平的银行刷卡信息)、去重(列如银行账户信息、公安人口信息中均含有人的姓名,但是只保留一份即可)、提脏(列如有的人的银行卡被盗取,在十分钟内同时有两笔分别再中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(列如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。
DW 数据仓库层
在这里,从ODS层中获得的数据按照主题建立各种数据模型。列如以研究人的旅游消费为主题的数据集中便可以结合航空公司的等级出现信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。分为业务域和业务中心
数据产品层(APP),这一层是提供为数据产品使用能够的结果数据
在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在es,mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用 比如我们经常说的报表数据,或者说那种打宽表,一般都放在这里 。
3.2 技术路线
这三层技术划分,相对来说比较粗粒度。这里仅仅简单介绍几个常用工具,侧重中开源界主流。
1、数据来源层 ---> ODS层
- 业务库,这里经常会使用sqoop来抽取,比如我们每天定时抽取一次,在实时方面,可以考虑用cannal监听msql的binlog,实时接入即可。
- 埋点日志,线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,kafka也会是一个关键角色
2.ODS、DW --> APP层
- 每天定时任务型:比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。这种任务进程使用Hive、Spark或者生撸MR程序来计算,最终结果写入Hive、Hbase、Mysql、ES或者Redis中。
- 实时数据:这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像、一般我们会用Spark Streaming、Storm或者Flink来计算,最后会落入Es、Hbase或者Redis中。
数据仓库分层设计(基于Hive)相关推荐
- 基于 Hive 构建数据仓库
前言 设想有一批各种类型的离线(或实时)数据(文本.csv.Excel 等),我们如何挖掘这些数据背后的价值,分析这些数据之间的关联? 很容易想到的就是,写程序把每种数据按照某种规则抽取出来放到关系型 ...
- 基于阿里云的数据仓库架构设计
文章目录 基于阿里云的数据仓库架构设计 产品对比 离线数仓 实时数仓 数仓规范 基于阿里云的数据仓库架构设计 产品对比 阿里云产品 同类产品 简介 RDS MySQL.PostgreSQL 关系型数据 ...
- 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例
一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...
- 一种基于分层设计的小家电控制板通用程序框架
本文设计了一种基于分层设计的小家电控制板通用程序框架.分层设计有以下优点: (1)降低系统复杂度.由于每层都是相对独立的,每层可以单独实现. (2)隔离变化.通过分层设计,可以把变化的部分独立出来,让 ...
- 数据仓库架构分层设计
数据仓库架构分层设计包括STG(数据缓冲层).ODS(数据操作层).DWD(数据明细层).DWS(主题汇总层)和ADM(数据应用层). 1.STG层 主要完成业务系统结构化数据引入到数据中台,保留业务 ...
- 【遇见Doris】Doris基于Hive表的全局字典设计与实现
感谢7月25日来参加 Doris 与 Dolphin Scheduler 合作举办的线上 Meetup 的小伙伴们,现在为大家带来 Meetup 的内容. 本次 Meetup 请到了来自百度.奇安信. ...
- 数据仓库(6)数仓分层设计架构
目前主流的数据仓库分层大多为四层,也有五层的架构,这里介绍基本的四层架构. 分别为数据贴源层(ods).数据仓库明细层(dw).多维明细层(dws)和数据集市层(dm). 下面是架构图: ...
- 数据仓库:分层设计详解
文章目录 简介 一. Why?为什么要对数据仓库分层 二. How?数据仓库的ETL 1.分层的误区 三. 中台技术架构 四.数仓分层架构 五.贴源层 (ODS, Operational Data S ...
- oracle 数据立方_大数据之数据仓库分层
大数据之数据仓库分层 1. 什么是数据分层? 2. 数据分层的好处 一种通用的数据分层设计 3. 举例 4. 各层会用到的计算引擎和存储系统 5. 分层实现 6.数据分层的一些概念说明 7.大数据相关 ...
最新文章
- 分离内核和虚拟机支持安全的关键任务边缘计算
- Membership角色与权限管理
- [转]div 让文字或图片居中
- Android UI编程之自定义控件——可高亮显示的TextView
- C语言system函数(C语言程序中执行命令行)
- 两条水位线的业务需求分析-Interval JOIN方案(转载+自己分析整理)
- 几种常用的优化方法梯度下降法、牛顿法、)
- weak password
- arduino uno电压_Arduino UNO中文数据手册
- js排序算法详解-冒泡排序
- 63. 无阻塞加载脚本
- 【LeetCode】求中位数(数据流、滑动窗口、两个正序数组)
- Hadoop伪分布和全分布部署指南
- Golang 并发之锁
- 润生香港轻零食之品牌零食合作 I 专业·共赢·美味
- 如何让局域网中的其他主机访问虚拟机
- 团队作业第二次—团队展示
- 6.824:FaRM笔记
- 计算机专业要学英语口语,学习英语口语必须掌握两大法宝
- 【创业说】零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的
热门文章
- 生活中,会Python爬虫也能赚钱
- .mdf数据库恢复mysql_mdf和ldf恢复数据库
- 自定义修改QQ在线状态源码
- 姚期智百万富翁问题:隐私安全
- JMeter压力测试与JVM监控以及调优
- 机器学习与深度学习的关系
- iPhone1.1.4固件破解详细教程(Mac版)
- iOS上简单推送通知(Push Notification)的实现
- 用matlab移动平均法,简单移动平均法_matlab的简单移动平均法 下面的代码有什么问题啊,......
- 函数重载与函数模板的比较