1、Hadoop数据仓库架构设计

    

    如上图。

    ODS(Operation Data Store)层:ODS层通常也被称为准备区(Staging area),它们是后续数据仓库层(即基于Kimball维度建模生成的实时表和维度表层,以及基于事实表和明细表

      加工的汇总层数据)加工数据的来源,同时ODS层也存储着历史的增量和或全量数据。

    数据仓库层(DW:Data Warehouse): 是Hadoop数据平台的主体内容。数据仓库层的数据是ODS层数据经过ETL清洗、转换、加载生成的。Hadoop数据仓库的DW层通常都是基于

      Kimball的维度建模理论来构建的,并通过维度一致性和和数据总线来保证各个子主题的维度一致性。

      DW层的数据一定是清洗过的、干净的、一致的、规范的、准确的数据。数据平台 的下游用户将会直接使用DW层数据,而ODS层数据原则上不允许下游用户直接接触和访问。

      此外,出于性能、重复计算和使用便捷性考虑,DW层数据除了保存基于Kimball维度建模的最细粒度的事实表和维度表(DW层的明细层,data warehouse detail 细节数据层),

      还会基于它们生成一层汇总数据(即DW层的汇总层,data warehouse service 服务数据层)。汇总层的设计主要出于性能及避免重复计算考虑。实际数据仓库的汇总层如何设计以及主要对

      哪些维度进行汇总等,需要根据业务需求及明细层实际汇总频率来确定,原则上,业务使用频繁的的维度需要对这些维度建立汇总层,汇总的指标可以和业务需求共同设计完成。

     应用层:在DW的基础上,各个业务方或部门可以建立自己的数据集市(Data Mart),此层一般称为应用层。应用层的数据来源于DW层,原则上不允许应用层之间访问ODS层,相比DW层,

      应用层只包含部门或业务方自己关心的明细层和汇总层数据。

    采用上述分层架构的好处:

    1、屏蔽源头系统业务变更、系统变更对于下游用户的影响

      如果源头系统业务发生变更,相关的变更有DW层来处理,对下游用户透明,无须改动下游用户的代码和逻辑。

    2、屏蔽源头系统的复杂性。

    3、避免重复计算和存储

      通过汇总层的引入,避免了下游用户逻辑的重复计算,节省了用户的开发时间和精力,同时也节省了计算和存储。

    4、数据仓库的可维护性

      分层的设计使得某一层的问题只在该层得到解决,无须更改下一层的代码和逻辑。

      

  2、Hadoop数据仓库规范设计

    数据仓库的的规范包括很多方面,如数据的命名规范、开发规范、流程规范、安全规范和质量规范等。

    2.1、命名规范

      表命名规范

      表命名规范是为了让数据所有相关方对于表包含的信息有一个共同的认知。比如属于哪一次(ODS、DW明细层、DW汇总层、应用层)?哪个业务领域(销售、库存、客户服务、催销等)、

      哪个维度(商品、买家、卖家、类目等)?哪个时间跨度(天、月、年、实时等)?增量还是全量?

      基于此,数据平台建设者应该首先规定数据仓库分层、业务领域、常见维度和时间跨度等的英文缩写,并根据词给出表的命名规范。

      对于大型零售超市(FutureRetailer)数据平台,给出如下表命名规范:

      

      第一部分为数据仓库分层:可能取值为ODS(ODS层表)、DWD(DW明细层表)、DWS(DW汇总层表)、ADS(应用层表)等。

      第二部分为业务领域:可能取值为sls(销售)、inv(库存)、srv(客户服务)、prmt(促销)等。

      第三部分为用户自定义标签:比如商品粒度为itm、买家为byr、卖家为slr。当然用户也可以自己定义自己的业务、项目和产品标签。

      第四部分为时间标签:比如d为天、m为月、y为年、di为增量表,df为全量表等。

      根据上述设计,一个汇总层、商品粒度的月度销售汇总表的表应该为:dws_sls_itm_m

    字段命名规范

      字段命名规范应该有意义而易于理解,最好是能够表达字段含义的英文字母。比如,数量型的字段一般以cnt(count)结尾、数值型的字段以amt(amount)结尾。

      实际项目中,数据平台可以提供常用的英文缩写,业务缩写来规范用户的字段命名。

  3、流程规范

    流程规范用于开发流程行为,以保证数据交付进度和质量,降低交付风险。

    流程规范主要分为需求流程规范和开发流程规范。

    常见的需求流程规范如下:

    

    数据开发流程:

    

  4、数据仓库构建

      维度建模采用有序的四个环节来设计各个业务主题的数据仓库(选择业务过程、定义粒度、确定维度和确定事实),同时维度建模用维度一致性和数据总线架构来保证各个子主题维度数据的一致性。

    首先划分FutureRetailer的业务主题,可以将其主题划分为销售域、库存域、客户服务器域、采购域等。其次是确定每个主题域的事实表和维度表。

    对于每个主题域,比如销售,需要选择最细粒度的数据,很容易确定销售域的最细粒度事实为购物小票的子项。库存域的最细粒度为商品的SKU的库存。客户服务热线的最细粒度为每一次电话呼叫。

    采购域的最细粒度为某个商品的SKU的采购申请等。

    确定粒度之后,相关的维度也基本确定,但是根据Hadoop的反规范和扁平化的设计思路,还需要确定哪些字段需要反规范化和扁平化到相关维度表中。

      最后一步就是确定需要是事实表,而且应该明确需要哪种类型是事实表,是事务事实表,还是周期快照事实表以及累计快照事实表?如果维度表反规范化和扁平化设计一样,也要讲使用频率高的维度

    字段反规范化和扁平化到事实表中。

   4.1、商品维度表

    将商品维度表命名为dim_fr_item(参照上面的命名方式,fr代表FutureRetailer)

    维度表设计的首要问题是维度表的拆分以及合并问题

    

  4.2.、销售事实表

    销售子主题是典型的事务性业务活动,并不涉及业务状态的定期快照,也并非工作流形式的业务活动,因此仅需要事务事实表即可。

    销售事实表将通过商品ID、买家ID、卖家ID等和其它维度表关联。如下图:

    

    根据Hadoop数据仓库反规范化和扁平化的设计思想,除了度量以及维度外键ID等字段,事实表还需冗余相关常用维度字段到销售事务事实表中。

    

    

      参考资料:《离线和实时大数据开发实战》

大数据开发实战:Hadoop数据仓库开发实战的更多相关文章

  1. 大数据之R语言速成与实战

    什么是R语言? R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明.其词法和语法分别源自Scheme和S语言. R定义:一个能够自有有效的用于统计计算和绘图的 ...

  2. 学大数据一定要会Java开发吗?

    Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言.Java语言功能强大和简单易用,不仅吸收了C++语言的各种优点还摒弃了C++里难以理解的多继承.指针等概念. J ...

  3. 初识大数据(二. Hadoop是什么)

    hadoop是一个由Apache基金会所发布的用于大规模集群上的分布式系统并行编程基础框架.目前已经是大数据领域最流行的开发架构.并且已经从HDFS.MapReduce.Hbase三大核心组件成长为一 ...

  4. 一篇了解大数据架构及Hadoop生态圈

    一篇了解大数据架构及Hadoop生态圈 阅读建议,有一定基础的阅读顺序为1,2,3,4节,没有基础的阅读顺序为2,3,4,1节. 第一节 集群规划 大数据集群规划(以CDH集群为例),参考链接: ht ...

  5. 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)

    大数据时代之hadoop(一):hadoop安装 大数据时代之hadoop(二):hadoop脚本解析 大数据时代之hadoop(三):hadoop数据流(生命周期) 大数据时代之hadoop(四): ...

  6. 大数据测试之初识Hadoop

    大数据测试之初识Hadoop POPTEST老李认为测试开发工程师是面向测试的开发,也就是说,写代码就是为完成测试任务服务的,写自动化测试(性能自动化,功能自动化,安全自动化,接口自动化等等)的cas ...

  7. 大数据学习笔记——Hadoop编程实战之Mapreduce

    Hadoop编程实战——Mapreduce基本功能实现 此篇博客承接上一篇总结的HDFS编程实战,将会详细地对mapreduce的各种数据分析功能进行一个整理,由于实际工作中并不会过多地涉及原理,因此 ...

  8. 大数据学习笔记——Hadoop编程实战之HDFS

    HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...

  9. 大数据技术之HBase原理与实战归纳分享-上

    @ 目录 概述 定义 特点 数据模型 概述 逻辑结构 物理存储结构 数据模型 应用场景 基础架构 安装 前置条件 部署 启动服务 高可用 Shell操作 基础操作 命令空间 DDL DML 概述 定义 ...

随机推荐

  1. KVM基于X86硬件辅助的虚拟化技术实现机制【转】

    内存虚拟化 Shadow Paging 作者 Shawn 在其中文博客中很详尽地介绍了 KVM 在只支持一级分页的 x86 平台上用 “Shadow Paging”进行 MMU 虚拟化的实现,由于目前 ...

  2. JavaScript 的装饰器:它们是什么及如何使用

    请访问我的独立博客地址:https://imsense.site/2017/06/js-decorator/ 装饰器的流行应该感谢在Angular 2+中使用,在Angular中,装饰器因TypeSc ...

  3. 【BZOJ-2864】战火星空 计算几何 + 最大流

    2864: 战火星空 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 33  Solved: 14[Submit][Status][Discuss] D ...

  4. 完全卸载oracle11g步骤(转)

    转自:http://blog.csdn.net/machinecat0898/article/details/7792471 完全卸载oracle11g步骤:1. 开始->设置->控制面板 ...

  5. GIT(7)----强制用远程代码覆盖本地修改

    清除本地修改 git reset --hard 拉代码 git pull Git Pull While Ignoring Local Changes? git pull 并强制覆盖本地修改

  6. Spring_错误 java.sql.SQLException: Lock wait timeout exceeded | CannotAcquireLockException 的解决

    java.sql.SQLException: Lock wait timeout exceeded |  org.springframework.dao.CannotAcquireLockExcept ...

  7. LayoutParams继承于Android.View.ViewGroup.LayoutParams(转)

    LayoutParams相当于一个Layout的信息包,它封装了Layout的位置.高.宽等信息.假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉L ...

  8. STM32 TIMER DIAGRAM

  9. [Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

    关于管道 Channel Channel 用来同步并发执行的函数并提供它们某种传值交流的机制. Channel 的一些特性:通过 channel 传递的元素类型.容器(或缓冲区)和 传递的方向由“&l ...

  10. tomcat内存溢出设置JAVA_OPTS

     答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置三.实例,以 ...