数据仓库的架构
当前数据仓库的主流架构:分为两个方向一个是 hadoop 体系,一个是 MPP 数据库
1、hadoop + hive
Hive是建立在Hadoop HDFS基础之上的数据仓库基础框架,数据是保存在HDFS上的,它可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。它将SQL语句转化成 MapReduce 的 Job,然后在 Hadoop上执行,把执行的结果最终反映给用户。因为 Hadoop 可以部署在一批家用或服务器级别的硬件机器上,因此硬件成本较低,并能提高水平扩的能力。
优点:
1. 提供 sql 语法避免了去写 MapReduce,减少开发人员的学习成本。
2. Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
3. 经过多年发展,成熟度高,应用广泛
缺点:
1. 不支持事务,一般用于读多写少的情况,最好不改动数据,因为数据存储在HDFS中,而HDFS的文件不支持修改;
2. Hive 调优比较困难,粒度较粗
3. 不支持索引效率低
4. HQL 表达能力有限:迭代式算法无法表达。数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现。
5. 不支持非结构化查询。
hadoop + hive 在实际的使用过程中,为了提高查询的速度,往往会构建大宽表。而构建这个大宽表,需要从其它表或者NoSql 中获取数据,在形成一个大宽表。曾经我见过团队,为了让一条 Sql 语句就能出报表,形成了一个2千多个列的大款表,光是维护这个大宽表都需要一个团队。
2、hadoop + spark
Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。提供一种既可以极大批量地处理分布式的数据,又有足够的容错能力,且上手容易,速度快,可以让人实现实时交互分析的解决方案。既支持作业任务处理,又支持流处理(SparkStreaming)和SQL(SparkSQL),以及机器学习(SparkMLlib)和图处理(SparkGraphX)。
Hadoop MapReduce 由于其设计初衷并不是为了满足循环迭代式数据流处理,因此在多 并行运行的数据可复用场景(如:机器学习、图挖掘算法、交互式数据挖掘算法)中存 在诸多计算效率等问题。所以 Spark 应运而生,Spark 就是在传统的 MapReduce 计算框 架的基础上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的 RDD 计算模型。
Spark 是一个分布式数据快速分析项目。它的核心技术是弹性分布式数据集(Resilient Distributed Datasets),提供了比 MapReduce 丰富的模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图形计算算法。
Spark 和 Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。Spark只有在shuffle的时候将数据写入磁盘,而Hadoop中多个MR作业之间的数据交互都要依赖于磁盘交互。
优点:
1. 相对于 Hive,Spark性能优异
2. Spark 提供 SQL、Spark Streaming、MLlib、GraphX 生态比 Hive 要强,节约了开发的人力和时间
缺点:
1. 稳定性,Spark 中大量的数据在内存中计算,对程序员的要求很高不然很容易出现 OutOfMemoryError
2. 受内存大小的限制,无法处理海量数据,因为它要在内存中生成 RDD,如果业务
3. Spark sql 能力有限:迭代式算法无法表达。数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现。
3、MPP (greenplum, doris )
MPP 指处于不同部分的多个处理器对程序进行协同处理的过程,每个处理器使用自己的操作系统、内存、总线 和磁盘等,通常 MPP 处理器使用某些消息传递接口进行通信。MPP 数据库通常具有无共享架构,因为每个系统都有自己的CPU、内存和磁盘。这种架构的数据库特征是任务并行执行、数据分布式存储( 本 地 化 )、分布式计算 、资源私有、可横向扩展等。 Greenplum 为例:它主要由Master节点、Segment节点、interconnect三大部分组成 1. 专职的Master 节点: 它的主要功能是作为系统访问入口,对存储在系统中的元数据进行管理,以及实 现 SQL Parser,生成执行计划和任务调度等。Master 有两 个节点,会进行数据同步,在出现故障时可切换。 2. interconnect负责不同PostgreSQL实例之间的通信 3. segment是独立的PostgreSQL数据库,每个segment存储一部分数据。读写数据的时候通过Master
优点:
1. 支持标准的 sql 语法
2. 支持 PKG
3. 支持事务
4. 性能优秀,远超 hadoop, hive, spark
缺点:
1. 对硬件的要求高,远超 hadoop, hive, spark
2. 不支持 NoSql
3. 不能根据具体业务来设置相应的 key ,让相同的 key 落在同一台机器上,在实际应用中可能导致大量数据跨节点传输, 性能会有所下降。
4. 系统并发能力受单节点处理能力影响,因为它任何一个任务都要发到每个节点并行执行
5. 需要一支专业的运维团队,因为 greenplum 的应用不是那么普及,所以这部分往往需要厂商支持。
4、DawnSql 构建数仓
DawnSql 是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、 它不仅完全支持标准 SQL语句,还支持 NoSql 这种类似 json 的数据格式,因此可以读写比较复杂的数据类型。此外它还拥有一种全新的脚本语言,用该语言可以简化业务代码,并生成自定义的 sql 方法。 DawnSql 是基于 JVM 体系的,所以它拥有良好的扩展性,用户可以自己扩展 SQL 的方法,让 DawnSql 兼容各种系统。
优点
1. 支持标准 SQL 和 NoSql
2. 支持分布式缓存(其它数仓不支持)
3. 拥有新的脚本语言。用该语言可以简化业务代码,并生成自定义的 sql 方法。
4. 支持在集群中计算服务的故障转移
5. 支持分布式事务
6. 支持机器学习的算法
7. 能够快速灵活的和工程做融合