概览

参考

【大数据平台架构及主流技术栈 】https://blog.csdn.net/Tim_mwt/article/details/104347379open in new window

【到底什么是数据中台?】https://blog.csdn.net/cqcre/article/details/96935800open in new window

【大数据中台技术架构】https://www.cnblogs.com/tellerfuliye/articles/13474480.htmlopen in new window

【数仓理论】https://blog.csdn.net/beiisbei/category_9939993.htmlopen in new window

【马士兵大数据课程视频】

【5分钟学大数据】https://www.fivedata.cn/open in new window

FAQ

什么时候需要用到大数据?大数据解决了什么需求?

  1. 企业数据分析的需求越来越多;
  2. 企业的业务系统过多,数据没有打通,分析时需要整合,低效且容易出错;
  3. 数据分析占用业务系统的服务器资源过多;

大数据有什么相关岗位?每个岗位的技术栈?

  • 数仓开发(DW层相关)
  • 数据挖掘开发(python、算法、机器学习等)
  • 平台开发(可视化层、任务调度层、中间件)

数据分析有哪些方法论演变?

  • 数据分析(传统)
    通过统计学方法,对历史数据进行排序、筛选、统计,从而得出一些有意义的结论。
  • OLAP
    基于数据仓库,从多个维度对数据进行统计分析,从而为决策提供支持。
  • 数据挖掘
    从海量数据,通过关联分析、聚类分析、时序分析等各种算法,找出隐藏的规律

如果想从事数仓开发,需要怎么学习?

  1. 熟悉数仓的基本概念
    • 面向主题
    • 集成性(数据来自多个数据源)
  2. 需要熟练使用ETL工具拉取数据。
    • 关系型数据库(mysql,oracle)-->HDFS
      对应工具为:sqoop
    • 非关系型数据库(redis,mongo,es)-->HDFS
      对应工具为:flume
    • 日志文件-->HDFS
      对应工具为:flume
    • 全量数据(离线数据)同步:DataX、Sqoop、Flume
    • 增量数据(实时数据)同步:Maxwell、Canel

学习使用ETL可优先学这2个工具:

  • DataX。支持关系型数据库、非关系型数据库、大数据、文件系统等多种数据源
  • Canel
  1. 需要学习scala语言

大数据有很多组件、平台(如sqoop、hive、spark、hadoop),这些都是什么?

  • 数据仓库: 存储海量数据(TB、PB级别)
    • hadoop:一个大数据分析平台软件,需要安装、搭建
      • hadoop1.0:
        • 组件:
          HDFS----------分布式文件系统,hadoop安装后自带
          MapReduce-----分布式计算系统,hadoop安装后自带(类似tomcat,上面可跑Java程序计算)
      • hadoop2.0:
        • 组件:
          HDFS----------分布式文件系统,hadoop安装后自带
          HBase---------介于 NoSql 和 RDBMS 之间的数据库,依赖HDFS
          Yarn----------分布式任务调度系统,hadoop安装后自带,上面可以跑不同的计算框架。
          • 计算框架:
            第一代:MapReduce
            第二代(DAG):Tez、Oozie
            第三代:Spark(批处理)、Spark Streaming(流处理)
            第四代:Flink(批处理、流处理)
        • 工具:
          Hive----------可以使用sql处理HDFS中的数据,支持多种计算框架(mapreduce、tez、spark)
  • 数据采集工具:
    • sqoop: RDBMS <--> hadoop
    • flume: 日志文件 <--> hadoop
  • kafka:消息队列系统,负责为应用之间数据迁移提供可靠的服务

大数据系统的架构演变?演变的原因?

1.传统离线架构

缺点:无法处理实时数据(流式数据)

2.lambda架构-传统实时开发

在传统离线架构的基础上,增加一条实时数据的处理链路

缺点:工作量大,重复工作多,因为实时数据没经过数仓,而是每次都需要重复编写数据清洗、校验、统一性的代码。

3.lambda架构(离线数仓+实时数仓)

缺点:同样的业务,却需要写两遍代码(离线&实时),重复工作;集群资源使用变多;离线&实时计算出的结果不一致;存储资源占用多

4.kappa架构(纯实时数仓)

缺点:kafka数据会过期,无法支持海量数据;kafka不支持SQL;kafka不支持数据更新

5.湖仓一体、批流一体(实时数仓)

flink既支持离线计算,也支持实时计算;底层是HDFS,支持海量存储;支持SQL;支持数据更新;

大数据系统架构

主要分为以下几层:

  • 数据来源层
  • ODS层(原始数据层)
  • DW层(数据仓库层)
  • ADS层(数据应用层)

数据就是由 数据来源层 -> ODS层 -> DW层 -> ADS层这种顺序流动;
生成在ADS层的数据,则是对用户决策比较有指导意义的数据;
数据则一般通过ETL工具来分析、处理,最后由上层流动到下层;

有哪些常见的ETL工具?

  • 第三方ETL系统(关系型数据,通过API接口)
  • Sqoop/apache(需要有Hadoop)、DataX/alibaba(python)、pentaho(前kettle)、Canel(关系型数据)
  • LogStash、Flume(非关系型数据,如日志文件)
  • kafka(缓存数据)

上面的是主体,还有其他辅助模块:

  • OLAP层(presto、kylin、clickhouse等)
  • 数据可视化层(TCV等)
  • 任务调度层(oozie、azkaban、airflow等)
  • 中间件层(redis、elk、zookeeper、kafka等)
  • 数据挖掘(python、多元线性回归、贝叶斯算法等)

为什么kafka在OLAP系统中很常用?

  1. 缓冲和削峰。当下游系统处理数据的速度跟不上上游系统发送数据的速度,kafka可以暂存数据,等待下游系统按自己的速度处理。
  2. 健壮性。当下游系统短暂宕机,kafka可以暂存数据,等重启后接着处理,不会影响业务。
  3. 异步。上游系统发出数据后,不必等待下游系统处理完数据,从而提高了效率。
  4. 可扩展性及容错。

数据来源层

  • 业务数据库
    • Mysql
    • Oracle
    • SqlServer
  • 埋点数据日志(用户行为日志)
  • 非结构化存储(日志、图片、视频、文本文件等)
    • OSS
    • FTP
  • 消息队列
    • kafka
  • NoSQL
    • OTS
    • MongoDB
  • ...

ODS层(原始数据层)

  1. 通过一些ETL工具,从数据来源层提取数据并保存;
  2. 存储最原始的数据;但有些也会做最基本的处理(去重、空判断等)

DW层(数据仓库层)

为什么需要数据仓库?
比起业务数据库,在数仓中数据的分类和分层更清晰(多层次),数据更有效(进仓前经过过滤和清洗)
查询企业的数据更加方便快捷。成熟的数仓会通过任务调度,定时从企业的各个系统同步增量数据。因此,所有的查询都可以直接从数据仓库获取,而不需要连接不同系统的数据库,还解决了跨库关联的问题。
数据仓库可存储不同类型的数据(关系型数据、日志、文件等)

数据仓库又可以细分为以下几层:

  • DWD层(Data Warehouse Detail,数据明细层)
    1. 负责进行数据清洗(去空、去脏数据、值域判断等)
  • DWM层(Data Warehouse Middle,数据中间层)
    1. 在底层数据的基础上,计算出一些指标
    2. 将维度表、事实表进行聚合,形成【宽表】(即字段很多的表)
    3. 也有可能没有该层,直接在DWS层完成该层的内容
  • DWS层(数据服务层,算是集市层?)
    1. 在底层数据的基础上,整合汇总成一个主题的数据服务层,生成【主题宽表】
    2. DWS、DWM、DWD构成DW层,是数据仓库的主体,维度建模在此处应用较多。
  • DWT层

【DWD层】--ETL工具--> 【DWM层】--ETL工具--> 【DWS层】--ETL工具--> 【DWT层】 --ETL工具--> 数据应用层

比较流行的DW层自研解决方案:

【数据仓库(存储引擎)】

  • hadoop HDFS(分布式文件系统)
  • HBase(分布式数据库)
  • Hudi(数据湖)
  • iceberg(数据湖)
  • AWS Redshift、Greenplum
  • Hive(数据仓库)
  • ...

【ETL工具】

  • 第三方ETL系统(支持关系型数据、非关系型数据,一般面向企业,付费)
  • Sqoop/apache、DataX/alibaba、pentaho(前kettle)、Canel(关系型数据采集、导出)
  • LogStash、Flume(非关系型数据采集,如日志文件)
  • flume、maxwell、canel、storm(实时数据采集)

【计算引擎】

  • 离线计算:
    • hadoop mapreduce
    • hiveSQL
  • 实时计算
    • sparkSQL
    • flink
    • storm

ADS层(Application Data Service,数据应用层)

  1. 数据一般用于数据分析和挖掘,最后生成【数据报表】

  2. 用于生成【数据报表】。

该层常用的计算引擎如下:

  • Redis
  • ES
  • PostgreSql
  • hivesql
  • sparksql
  • apache kylin
  • Presto
  • druid
  • impala
  • phoenix
  • doris
  • kudu(分布式列式存储引擎)
  • clickhouse(列式存储引擎)
  • ...

Inmon企业工厂架构

业务系统 --> ODS层(数据过渡区) --> 三范式企业级数据仓库 --> 部门级数据集市 --> ADS层(最终输出端)

关键字:范式建模、数据集市

Kimball数据仓库架构

业务系统 --> ODS层(数据过渡区) --> 多维企业级数据仓库 --> ADS层(最终输出端)

关键字:星型建模;事实表and维度表;

混合型数据仓库架构

业务系统 --> ODS层(数据过渡区) --> 三范式企业级数据仓库 --> 多维企业级数据仓库 --> ADS层(最终输出端)

OLAP系统

OLAP(Online analytical processing):联机分析处理,指代现在常见的大数据分析系统;另外其他的系统一般称为OLTP。

OLTP(Online transaction processing):在线/联机事务处理

OLAP的作用

  • 基于数据仓库进行数据分析,生成报表,为企业决策、了解企业现状提供支持;
  • 常见的OLAP系统种类:报表系统、用户画像系统、风控系统、推荐系统、机器学习

OLAP分类
OLAP按存储器的数据存储格式分为ROLAP、MOLAP和HOLAP

比较流行的OLAP层中间件:
apache kylin
Presto
clickhouse

大数据发展历程

  • 数据仓库时代(数据按业务划分主题域、数据与时间相关、不可修改)
  • Hadoop时代(解决了传统数据库无法承载海量数据的存储、计算的问题)
    • 解决方法:可分布式存储(HDFS)、可分布式计算(MapReduce)
  • 大数据平台时代(解决数据研发流程复杂、门槛高效率低的问题)
    • 解决方法:套用成熟的中间件
  • 数据中台时代(解决了数据重复加工的问题,提出数据共享、数据服务化)

数据建模

在抽取数据之前,需要先定义好表的信息(字段、主键等)、表与表之间的关系,这就是我理解的数据建模。

什么时候便需要进行建模?

从需求分析的时候便开始进行逻辑建模(类图),在概要设计阶段完成,在详细设计阶段确定好物理模型(即具体的表结构、表与表的关联关系等)

数据建模的方法论演变

  • 关系建模(ER图,关系型数据库建模方法论)
  • 范式建模(数据仓库之父比尔·恩门(Bill Inmon)提出,自上而下,数据仓库建模方法论)
  • 维度建模(Ralph Kimball提出,自下而上,数据仓库建模方法论)
    • 组件
      • 事实表:
        不会存储信息,只有很多外键,信息都通过外键保存到关联的维度表中。
        例如:用事实表来存储订单信息。订单的事实表会关联订单、客户、商家、商品等多个维度表,只会保存这些表的主键,不会存储冗余信息;
      • 维度表:
        只包含一个主键,没有外键,存储某个实体的详细信息。可以被多张事实表关联。
    • 拓扑
      • 星型模型(方便OLAP分析)
      • 雪花模型
      • 星座模型

建模工具

PowerDesign、ERWin、Datablau Data Modeler(阿里DataWorks相关)

数据计算

计算引擎一览

名称架构存储方式类型
hadoopmapreduceROLAP批处理
hivemapreduceROLAP批处理
pigmapreduceROLAP批处理
TezmapreduceROLAP批处理
GreenplumMPPROLAP批处理
VerticaMPPMOLAP批处理
SnowflakeMPPHOLAP批处理
PrestoMPPROLAP批处理
ImpalaMPPROLAP批处理
SparkMPPROLAP批处理
Spark StreamMPPROLAP流处理
DrillMPPROLAP批处理
HawqMPPROLAP批处理
clickhouseMPPMOLAP批处理
dorisMPPMOLAP批流一体
Druid预计算MOLAP流处理
Kylin预计算MOLAP批处理
ElasticSearchluceneROLAP批处理 & 流处理(近实时搜索)
SolrluceneROLAP批处理 & 流处理(近实时搜索)
StarRocksMPPROLAP批处理 & 流处理
MapReduce(Hadoop)
SparkSQL:MapReduce的替代者
HiveSQL
Pig
Cassandra
Presto
Elastic MapReduce(EMR)

其他技术栈

  • Kubernetes(容器化、云化)
  • Apollo(分布式配置中心)
  • ESB(企业服务总线框架)
  • ELK技术栈(日志分析)
    • ES(Elastic Search, Model:数据持久层)
    • Logstash(Controller:搜集和过滤数据)
    • Kibana(View:视图层。ES数据可视化平台)
  • Hadoop
  • Activity(工作流框架)
  • Apache Griffin(数据质量)
  • Apache Kylin(数据仓库)
Last Updated:
Contributors: dongyz8