概览
参考
【大数据平台架构及主流技术栈 】https://blog.csdn.net/Tim_mwt/article/details/104347379
【到底什么是数据中台?】https://blog.csdn.net/cqcre/article/details/96935800
【大数据中台技术架构】https://www.cnblogs.com/tellerfuliye/articles/13474480.html
【数仓理论】https://blog.csdn.net/beiisbei/category_9939993.html
【马士兵大数据课程视频】
【5分钟学大数据】https://www.fivedata.cn/
FAQ
什么时候需要用到大数据?大数据解决了什么需求?
- 企业数据分析的需求越来越多;
- 企业的业务系统过多,数据没有打通,分析时需要整合,低效且容易出错;
- 数据分析占用业务系统的服务器资源过多;
大数据有什么相关岗位?每个岗位的技术栈?
- 数仓开发(DW层相关)
- 数据挖掘开发(python、算法、机器学习等)
- 平台开发(可视化层、任务调度层、中间件)
数据分析有哪些方法论演变?
- 数据分析(传统)
通过统计学方法,对历史数据进行排序、筛选、统计,从而得出一些有意义的结论。 - OLAP
基于数据仓库,从多个维度对数据进行统计分析,从而为决策提供支持。 - 数据挖掘
从海量数据,通过关联分析、聚类分析、时序分析等各种算法,找出隐藏的规律
如果想从事数仓开发,需要怎么学习?
- 熟悉数仓的基本概念
- 面向主题
- 集成性(数据来自多个数据源)
- 需要熟练使用ETL工具拉取数据。
- 关系型数据库(mysql,oracle)-->HDFS
对应工具为:sqoop - 非关系型数据库(redis,mongo,es)-->HDFS
对应工具为:flume - 日志文件-->HDFS
对应工具为:flume - 全量数据(离线数据)同步:DataX、Sqoop、Flume
- 增量数据(实时数据)同步:Maxwell、Canel
- 关系型数据库(mysql,oracle)-->HDFS
学习使用ETL可优先学这2个工具:
- DataX。支持关系型数据库、非关系型数据库、大数据、文件系统等多种数据源
- Canel。
- 需要学习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)
- 组件:
- hadoop1.0:
- hadoop:一个大数据分析平台软件,需要安装、搭建
- 数据采集工具:
- 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系统中很常用?
- 缓冲和削峰。当下游系统处理数据的速度跟不上上游系统发送数据的速度,kafka可以暂存数据,等待下游系统按自己的速度处理。
- 健壮性。当下游系统短暂宕机,kafka可以暂存数据,等重启后接着处理,不会影响业务。
- 异步。上游系统发出数据后,不必等待下游系统处理完数据,从而提高了效率。
- 可扩展性及容错。
数据来源层
- 业务数据库
- Mysql
- Oracle
- SqlServer
- 埋点数据日志(用户行为日志)
- 非结构化存储(日志、图片、视频、文本文件等)
- OSS
- FTP
- 消息队列
- kafka
- NoSQL
- OTS
- MongoDB
- ...
ODS层(原始数据层)
- 通过一些ETL工具,从数据来源层提取数据并保存;
- 存储最原始的数据;但有些也会做最基本的处理(去重、空判断等)
DW层(数据仓库层)
为什么需要数据仓库?
比起业务数据库,在数仓中数据的分类和分层更清晰(多层次),数据更有效(进仓前经过过滤和清洗)
查询企业的数据更加方便快捷。成熟的数仓会通过任务调度,定时从企业的各个系统同步增量数据。因此,所有的查询都可以直接从数据仓库获取,而不需要连接不同系统的数据库,还解决了跨库关联的问题。
数据仓库可存储不同类型的数据(关系型数据、日志、文件等)
数据仓库又可以细分为以下几层:
- DWD层(Data Warehouse Detail,数据明细层)
- 负责进行数据清洗(去空、去脏数据、值域判断等)
- DWM层(Data Warehouse Middle,数据中间层)
- 在底层数据的基础上,计算出一些指标
- 将维度表、事实表进行聚合,形成【宽表】(即字段很多的表)
- 也有可能没有该层,直接在DWS层完成该层的内容
- DWS层(数据服务层,算是集市层?)
- 在底层数据的基础上,整合汇总成一个主题的数据服务层,生成【主题宽表】
- 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,数据应用层)
数据一般用于数据分析和挖掘,最后生成【数据报表】
用于生成【数据报表】。
该层常用的计算引擎如下:
- 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相关)
数据计算
计算引擎一览
名称 | 架构 | 存储方式 | 类型 |
---|---|---|---|
hadoop | mapreduce | ROLAP | 批处理 |
hive | mapreduce | ROLAP | 批处理 |
pig | mapreduce | ROLAP | 批处理 |
Tez | mapreduce | ROLAP | 批处理 |
Greenplum | MPP | ROLAP | 批处理 |
Vertica | MPP | MOLAP | 批处理 |
Snowflake | MPP | HOLAP | 批处理 |
Presto | MPP | ROLAP | 批处理 |
Impala | MPP | ROLAP | 批处理 |
Spark | MPP | ROLAP | 批处理 |
Spark Stream | MPP | ROLAP | 流处理 |
Drill | MPP | ROLAP | 批处理 |
Hawq | MPP | ROLAP | 批处理 |
clickhouse | MPP | MOLAP | 批处理 |
doris | MPP | MOLAP | 批流一体 |
Druid | 预计算 | MOLAP | 流处理 |
Kylin | 预计算 | MOLAP | 批处理 |
ElasticSearch | lucene | ROLAP | 批处理 & 流处理(近实时搜索) |
Solr | lucene | ROLAP | 批处理 & 流处理(近实时搜索) |
StarRocks | MPP | ROLAP | 批处理 & 流处理 |
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(数据仓库)