数据查询和业务流分开_传统数仓和大数据数仓的区别是什么?

76a8cd274170e1758e0ab366d17d010b.png

概念与容器

为什么先说这个,其实很简单:因为绝大多数人都把这两个概念混为一谈。然后就会出现各种各样的问题:oracle不是数据库么,怎么又是数据仓库?Hive不是数据仓库么?怎么又是数据库?

数据仓库、数据库是一个概念,是一些技术的集合。类同于切菜刀法和雕刻刀法;

Oracel、DB2、MySQL、Hive是一个容器,是一种工具。类同于一把刀。

当我们在说数据仓库的时候,我们在说什么?说的是你用的mysql还是oracle?用的是Hive还是Kylin?用的是druid还是doris?都不是!因为这些是实现数据仓库的工具!

我们在说数据仓库的时候,我们实际上说的是一种面向主题,沉淀历史不可变信息,对明细数据进行汇总的,为决策提供在线分析服务的数据技术的集合。

我们在实现数据仓库的时候,需要用到数据仓库设计(数据库设计工具)、数据存储技术(数据库工具)、数据处理技术(ETL工具、监控报警)、数据管理技术(元数据、数据地图、血缘关系)等等技术。

而oracle、mysql、hadoop等都只是数据存储技术中的一种而已。

数据仓库发展历史

1、数据仓库概念诞生

数据仓库概念公认最早的定义者,是数据仓库之父比尔·恩门(Bill Inmon)在1991提出的。在此之前,所有的业务操作数据和分析数据都是存在一个数据库中的,并没有分开。

895524b117a888f9793e02583e2e4fdd.png

这个inmon就是inmon、kimball建仓方法论的inmon,是不是很熟悉?

如同绝大多数新概念一样,刚诞生的数据仓库同样遭受到了巨大的失败。inmon的建设理念是自上而下,这个上指的是数据的上游,不是数据分层的上层。

ed54172099f90f8f3ed0b60ea1efbc94.png

大家都是做数仓的,你肯定理解为什么一开始数据仓库概念会惨败。因为自上而下太难见效,得把所有的业务理清楚,把所有系统的数据理清楚,然后分主题分层一点点的设计,然后按照这个设计一层层的建。而且一旦其中有任何变动,整个设计全废。所以第一批吃螃蟹的那些公司基本上都是小白鼠。

2、数据集市概念诞生

这个时候,有个英雄站出来了,这就是Kimball,他写了一本书《The DataWarehouse Toolkit》,开启了数据集市的狂潮,也开创了另一种数据仓库建设的流派-Kimball的自下而上流派。这个上、下也是上下游的意思。Kimball建议,百鸟在林,不如一鸟在手。先搞一个销售部门,摸清销售部门的需求,等于把下游的需求先锁死。然后再顺藤摸瓜,把数仓的每一层设计好,最后再摸到业务系统(CRM+ERP+人力系统),找业务系统的数据,这样就建立了一个销售部门级的数据集市。

81d796a386f65f662e00642a9176bbb9.png

由于这种方法的需求少了,设计工作少,难度也就低了,对应的建设难度和工作量也少,建设速度就快,见效也就快啊,非常利于工作的开展。所以数据集市大行其道。

3、DWDM融合

两派吵了很久很久,各自都有死忠,也都有对的理由,各自也都说服不了对方。双方也明白了:“one size fits all”一码通用是不可能的。终于在1998年, Inmon提出了新的BI架构CIF(CorporationInformation Factory,企业信息工厂)。

c525d12b00d0a3c483c1f5a04fb68da1.png

上面这张图就是inmon老爷子画的,看上去很乱对吧?其实按照咱现在的视角看就很清晰了:

3bf23b6e2f9db0b19a57d596322b5c93.png

这个架构是不是很熟悉?对!这个架构从1998年到现在,就没变过!而且也是所有数据仓库建设的框架性指南。

4、实时数仓

一直到最近两年,实时处理技术的飞速发展,才将数据仓库的架构往前又推了一步,出现了实时数仓。实时数仓又分为批数据+流数据、批流一体两种架构。从这里开始,也就正式进入了大数据环境下的数据仓库范畴。

大数据环境下的数据仓库

1、离线数仓

刚转到大数据环境中的哥们会很奇怪,为啥有一个数仓叫离线数仓?从来没听过啊!

其实离线数仓就是咱以前做的传统数仓,数据以T+1的形式计算好放在那里,给前台的各种分析应用提供算好的数据。这也被称为“大数据的批处理”。只不过原本的单体环境工具(oracle、informatica等)基本都被替换成了大数据体系内(Hadoop、Hive、Sqoop、oozie等)的工具而已。

ebe1211c9918e962b4eefdebb2a650c9.png

大数据环境中工具清单:

  • 数据采集:flume/logstash+kafka,替代传统数仓的FTP;
  • 批量数据同步:Sqoop、Kettle,跟传统数仓一样用Kettle,部分商用ETL工具也开始支持大数据集群;
  • 大数据存储:Hadoop HDFS/Hive、TiDB、GP等MPP,替代传统数仓的Oracle、MySQL、MS SQL、DB2等;
  • 大数据计算引擎:MapReduce、Spark、Tez,替代传统数仓的数据库执行引擎;
  • OLAP引擎:Kylin/druid,(Molap,需预计算)、Presto/Impala,(Rolap,无需预计算),替代BO、Brio、MSTR等各种BI工具。

2、实时计算

就是因为有实时数据处理,所以才会有离线数据处理。相对应的也就有实时数仓和离线数仓。实时数仓最开始是在日志数据分析业务中被广泛使用,后来在各种实时战报大屏的推动,实时数仓开始应用。

2e5951add35c91bec963e92b51f4c500.png

与离线计算相比,实时计算这边减少了数据落地,替换了数据计算引擎,目前纯流式数据处理基本上就只有Spark Streaming了。Storm会丢数据,Flink是批流一体的。实时数据计算好结果后,可以落地到各种数据库中,也可以直接对接到大屏进行展示。

大数据环境下的数据仓库架构

1、Lambda 架构

Lambda架构核心就三个:批数据处理层、流数据处理层和服务层。批数据处理层应对历史长时间数据计算,流数据处理层应对短时间实时数据计算。如果一个需求要历史到当前所有数据的累加结果,那就在服务层将两部分数据进行累加就好了。

de3150640a574355483e82110e7588ff.png

Lambda架构需要维护两套计算引擎,如果需要历史到现在实时数据的累加,则需要在两边同时做相同的计算,然后还得加总一下,非常麻烦。因此就有了最近非常火热的Kappa架构。

2、Kappa 架构

Kappa架构的设计很有意思。Lambda架构反正还是分离线和实时两部分的,所以可以从离线库和实时消息队列取数,分别计算后,在服务层加总就可以了。

Kappa的设计理念是:干脆不要离线了,全部都进行流式计算。流式计算的数据来源是消息队列,那我把所有需要计算的数据放在消息队列里就好了,然后让流计算引擎计算所有数据不就好了?

6b0b6c42e33775784ac7e7c60d5aeb7e.png

因为所有数据都存在Kafka,上面接Flink批流一体数据处理引擎将kafka的数据计算好存在服务层的table n中。如果需求有变化了,就讲kafka的offset调整一下,Flink则重启一个任务重新计算,存在table N+1中,当N+1的数据进度赶上table n了,就停掉table n的任务。

3、Kappa 架构+查询+分析展示

Kappa架构只到数据服务层,Flink本身只是一个计算引擎,因此还需要一个提供快速查询的工具和一个展示的工具。所以现在的架构就变成了这样:

ef3e512731216d81569dd369ec4941b7.png

总结

综上所述,传统数仓和大数据环境下的数仓还是有很多区别的:

a19efc6dd53d5ac9fd8a9a72a43006fc.png
  • 数仓设计的工具都是一样的,这个不会变;
  • 由于大数据集群中,表关联的代价比较大,因此数仓建模会更多的使用宽表,所以这里会有一些变化;
  • 数据处理和调度工具用kettle基本都OK,没啥太大变化,但是需要了解一下Flume、Kafka等工具;
  • 数据存储这边需要深入了解一下,这是单体数据库和集群数据库的差别,会有分布式一致性的各种乱七八糟的问题;
  • 数据计算引擎也有变化,也是单体数据库和集群数据库的差别。分布式计算会有数据倾斜、join代价高等问题,所以优化的方法和方向也不一样;
  • 数据总体架构设计的时候也会有所变化,传统数仓整个BI套件就ok了,大数据环境下可能要面对更多的各种复杂需求,所需的大数据组件就变多了,需要系统学习。

建议传统数据仓库工程师的转型路线:

传统数仓-离线数仓(批数据处理)-实时数据处理(流数据处理)-lambda架构-kappa架构(批流一体)。

来源网络侵删

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 多语言不起作用,Android本地化语言环境不起作用,所有区域代码都存在问题...

我需要将除瑞士之类的子语言环境添加到我的应用程序中,而不是普通的德语.我找到的德语资源文件夹的语言环境扩展名为de.所以我的文件夹名为“values-de”.这很好.然后我添加了“values-de_CH”并继续收到错误“无效的资源目录名称”.我也试过“values-de_rCH”和“values-de_ch…

aws 性能_AWS上的应用程序自动扩展–选项和对性能的影响

aws 性能至关重要的是扩展软件应用程序,以避免由于网站的客户群或需要处理大型数据集的应用程序等导致的工作负载增加而导致性能瓶颈的情况。云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源,可根据应用程序的负载变化来放大或缩小。 1.什…

java中月日年这种怎么转换成年月日_最“热乎”的Java社招面试经历分享(共40个面试题)...

面试时间:2020年10月12日1、final finally finalize的区别2、synchronized关键字的作用以及在什么时候使用,concurrent包里面其它的锁。3、有遇到过死锁的问题吗?(死锁的原理和解决方法)4、hashmap的实现原理,hashmap和hashtable的…

(案例)使用Cookie保存用户最后一次访问的时间

文章目录需求分析示例代码需求 1.访问一个Servlet,如果获取不到上一次访问的时间,则提示:您好,欢迎访问。 2.如果可以获取上一次访问的时间,则提示:您好,欢迎回来,您上次访问时间为…

aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

aws lambda使用快速提供内容对于任何网站或应用程序具有更好的客户体验都是必不可少的。 如果您将网站或应用程序托管在AWS Cloud中,那么无论从何处访问应用程序,都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务,用于将内容缓存在…

android+阴影+xml,Android 阴影视图 ShadowViewHelper

软件介绍ShadowViewHelper 是 Android 的阴影布局。xml:android:id"id/activity_main_shadow_view_b"android:layout_width"wrap_content" android:layout_height"wrap_content"android:layout_gravity"center"android:layout_marginT…

docker-compose观察实时日志_基于 Flink SQL CDC 的实时数据同步方案

整理:陈政羽(Flink 社区志愿者) Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 F…

android dialog 字体,android – 为AlertDialog的MultiSelectItems设置自定义字体(字体)

AlertDialog.Builder使用AlertController.AlertParams构建对话框.我检查了AlertDialog.Builder #create()调用AlertController.AlertParams #application()如果设置了项目,则创建ListView并分配适配器(AlertParams#createListView()).我基于createListView源创建了自定义适配器…

困难是成功路上的垫脚石_Java是开发的垫脚石。 学习吧!

困难是成功路上的垫脚石Java是全世界使用最广泛的编程语言之一 。 尽管也有很多其他编程语言,但是没有什么可以比Java更好的了。 Java是用于开发移动应用程序,游戏,Web应用程序,桌面应用程序和许多其他令人兴奋的事物的出色语言之…

python 3.6.5 shell_Linux 安装 Python3.6.5

1. 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2. 下载 Python 3.6.5 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 3. 创建安装…

你真的会用Mac中的Finder吗?

参加:https://zhuanlan.zhihu.com/p/144139903

用c语言实现mfc系统,MFC实现学生选课系统

本文实例为大家分享了MFC实现学生选课系统的具体代码,供大家参考,具体内容如下先上效果图:主要功能:输入学号,从数据库中查找学号,若找到相匹配的学号,则显示数据库中姓名、学历、导师&#xff…

spring 构造函数注入_Spring构造函数依赖注入示例

spring 构造函数注入欢迎使用Spring构造函数依赖注入示例指南。 基于构造器的依赖注入是Spring 依赖注入的一种 。 依赖注入的另一种类型是Setter注入和字段注入。 有关Spring依赖注入的更多信息: Spring二传手注射的例子 Spring田间注入 依赖注入–构造函数与现…

python用pip安装numpy mac_Mac下python安装numpy,pandas,matplotlib

numpy是数据分析的库,我的目的是分析股票的数据,Pandas 有两种自己独有的基本数据结构Series (一维)和 DataFrame(二维),它们让数据操作更简单了。它也是 Python 的一个库,所以&…

IntelliJ IDEA for Mac工件包(artifact)中 Web facet resources 的模块名称有误,如何修改?

在工件管理界面中,如果某个工件包中 Web facet resources 的模块名称有误,如下图所示: 你可以在项目根目录下的 .idea/artifacts 目录下找到以工件名称命名的 xml 文件,找到其中含有 facet 属性的 element 标签,更正…

html dom 修改,HTML DOM - 修改

创建新的 HTML 元素如需向 HTML DOM 添加新元素,您首先必须创建该元素(元素节点),然后把它追加到已有的元素上。实例This is a paragraph.This is another paragraph.var paradocument.createElement("p");var nodedocument.createTextNode(&q…

python数据处理常用函数_Python常用数据处理函数

java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.FileReader;im ... [Android] RelativeLayout, LinearLayout,FrameLayout Android RelativeLayout 属性 // 相对于给定ID控…

redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较

redis nosql1.什么是NoSql数据库? NoSql(不仅是Sql)数据库是可水平扩展,持久存储半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型,例如键值,文档,列族&#xf…

SVN更新数据和提交数据的几个疑问

有以下几个问题: 1.我检出一份副本到本地,修改了几个文件,然后我提交到SVN服务器中,此时服务器是如何更新有关的数据的呢?是不是把原来旧的文件数据删除了,保存最新提交的数据呢? 2.假设我修改…