Greenplum的介绍
Greenplum是一个面向数据仓库应用的关系型数据库,它基于流行的PostgreSQL开发,因为有良好的体系结构,所以在数据存储,高并发,高可用,线性扩展,反应速度,易用性和性价比等方面有非常明显的优势,非常受欢迎.进入大数据时代以后,Greenplum的性能在TB级别数据量的表现上非常,单机性能相比Hadoop要快上好几倍;在功能和语法上,要比Hadoop上的SQL引擎Hive好用很多,普通用户更加容易上手,Greenplum有着完善的工具,整个体系都比较完善,不需要像Hive一样花太多的时间和精力进行改造.非常适合作为一些大型数据仓库的解决方案.Greenplum能够方便地与Hadoop进行结合,直接把数据卸载Hadoop上,并且能够直接在数据库上写MapReduce任务,同时配置简单.
一、Greenplum的发展历史
Greenplum的发展可以分为下面6个阶段:
Postgres关系型数据库。Postgres是UC Berkeley开发的关系型数据库,现已更名为PostgreSQL。PostgerSQL官网介绍自己是先进的数据库,有强大的SQL支持能力,扩展性好,并且支持空间扩展。通过空间数据引擎PostGIS的支持可以存储和操作空间数据。 SQL queries on Big Data。Greenplum初步成型,由于数据越存越多,如何在大量数据中继续使用SQL来进行查询成了一个需要解决的问题。Greenplum开发者在X86架构和Postgres数据库的基础上,结合Postgres社区和应用生态使用MPP架构将Postgres实例组织起来,并通过MPP后端来实现存储和查询。 Pivotal商业公司。Emc2公司将Greenplum与分布式缓存GemFile一起结合形成了一款专注于OLAP系统的数据引擎产品,并以这个产品为核心组建了新的公司Pivotal。 收购MoreVRP。初的Greenplum希望对每一次query操作都能做到尽可能的快,这样使得所有的资源都被一次query占用。然而当并发多的时候,会造成query效果变差。因此Greenplum初将query按类型划分到了不同的队列,然后按优先级给队列分配资源,进而解决了这个问题。但是因为query是在不断变动的,这时候这种策略也需要不断调整,因此Pivotal收购了一家专注于动态配置数据库的公司MoreVRP。 发布HAWQ。由于市场上越来越多的客户将数据存放在HDFS上,基于Hadoop的Hive和Impala带给了Greenplum也受到了很大的冲击。Pivotal因此推出了一个处理HDFS上数据的解决方案HAWQ,但是HAWQ在HDFS上使用的是Greenplum专利格式来存储数据,其他的软件不能对这个格式进行操作,并不方便。 开源Greenplum。2015年,Pivotal公司拥抱了开源社区,将Greenplum开源。
GP的介绍
- 相同的客户端功能
- 增加支持并行处理的技术
- 增加支持数据仓库和BI的特性
- 外部表(external tables)/并行加载(parallel loading)
- 资源管理、优先级管理
- 表分区、数据压缩、列存储
- 查询优化器增强(query optimizer enhancements)
- 系统监控和审计
GP的三个关键词1、shared-nothing
Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力差,典型的代表SQLServer。 shared-everything架构优点很明显,但是网络,硬盘很容易就会成为系统瓶颈。
Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。
Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,各处理单元之间通过协议通信,并行处理和扩展能力更好。各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。Share-Nothing架构在扩展性和成本上都具有明显优势。
2、MPP(Massively Parallel Processor大规模并行处理)
大规模并行处理系统是由许多松耦合处理单元组成的,借助MPP这种高性能的系统架构,Greenplum可以将TB级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询。
3、MVCC(多版本控制)
与事务型数据库系统通过锁机制来控制并发访问的机制不同, GPDB使用多版本控制(Multiversion Concurrency Control/MVCC)保证数据一致性。 这意味着在查询数据库时,每个事务看到的只是数据的快照,其确保当前的事务不会看到其他事务在相同记录上的修改。据此为数据库的每个事务提供事务隔离。
MVCC以避免给数据库事务显式锁定的方式,大化减少锁争用以确保多用户环境下的性能。在并发控制方面,使用MVCC而不是使用锁机制的大优势是, MVCC对查询(读)的锁与写的锁不存在冲突,并且读与写之间从不互相阻塞。
三、Greenplum架构 Greenplum主要由Master节点、Segment节点、interconnect三大部分组成。Greenplum master是Greenplum数据库系统的入口,接受客户端连接及提交的SQL语句,将工作负载分发给其它数据库实例(segment实例),由它们存储和处理数据。Greenplum interconnect负责不同PostgreSQL实例之间的通信。Greenplum segment是独立的PostgreSQL数据库,每个segment存储一部分数据。大部分查询处理都由segment完成。
Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据 Segment节点负责数据的存储,可以对分布键进行优化以充分利用Segment节点的io性能来扩展整集群的io性能 存储方式可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式:行存储、列存储、外部表
Master主机与Segment主机的职责
Master
- 建立与客户端的会话连接和管理
- SQL的解析并形成分布式的执行计划
- 将生成好的执行计划分发到每个Segment上执行
- 收集Segment的执行结果
- 不存储业务数据,只存储数据字典
- 可以一主一备,分布在两台机器上
- 为了提高性能,好单独占用一台机器
Segment
- 业务数据的存储和存取
- 执行由Master分发的SQL语句
- 对于Master来说,每个Segment都是对等的,负责对应数据的存储和计算
- 每一台机器上可以配置一到多个Segment
- 由于每个Segment都是对等的,建议蚕蛹相同的及其配置
- Segment分primary和mirror两种,一般交错的存放在子节点上
Master和Segment都是一个单独的PostgreSQL数据库。每一个都有自己单独的一套元数据字典。Master节点一般也叫主节点,Segment叫做数据节点。
为了实现高可用,每个Segment都有对应的备节点 Mirror Segment分别存在与不同的机器上。
Client一般只能与Master节点进行交互,Client将SQL发给Master,然后Master对SQL进行分析后再讲其分配给所有的Segment进行操作。
GP的产品功能
1 GP的特点
2 并行数据流引擎
3并行处理的关键
4表分布的策略
3.1 大规模数据存储 (1)Greenplum数据库通过将数据分布到多个节点上来实现规模数据的存储。数据库的瓶颈经常发生在I/O方面,数据库的诸多性能问题终总能归罪到I/O身上,久而久之,IO瓶颈成为了数据库性能的永恒的话题。
(2)Greenplum采用分而治之的办法,将数据规律的分布到节点上,充分利用Segment主机的IO能力,以此让系统达到大的IO能力(主要是带宽)。
(3)在Greenplum中每个表都是分布在所有节点上的。Master节点首先通过对表的某个或多个列进行hash运算,然后根据hash结果将表的数据分布到Segment节点中。整个过程中Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据。
Greenplum提供称为“多态存储”的灵活存储方式。多态存储可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式。支持的存储方式包含:
行存储:行存储是传统数据库常用的存储方式,特点是访问比较快,多列更新比较容易。
列存储:列存储按列保存,不同列的数据存储在不同的地方(通常是不同文件中)。适合一次只访问宽表中某几个字段的情况。列存储的另外一个优势是压缩比高。
外部表:数据保存在其他系统中例如HDFS,数据库只保留元数据信息。
3.2 并行查询计划和执行 下图为一个简单SQL语句,从两张表中找到2008年的销售数据。图中右边是这个SQL的查询计划。从生成的查询计划树中看到有三种不同的颜色,颜色相同表示做同一件事情,我们称之为分片/切片(Slice)。下层的橙色切片中有一个重分发节点,这个节点将本节点的数据重新分发到其他节点上。中间绿色切片表示分布式数据关联(HashJoin)。上面切片负责将各个数据节点收到的数据进行汇总。
然后看看这个查询计划的执行。主节点(Master)上的调度器(QD)会下发查询任务到每个数据节点,数据节点收到任务后(查询计划树),创建工作进程(QE)执行任务。如果需要跨节点数据交换(例如上面的HashJoin),则数据节点上会创建多个工作进程协调执行任务。不同节点上执行同一任务(查询计划中的切片)的进程组成一个团伙(Gang)。数据从下往上流动,终Master返回给客户端。
5数据分布和分区
6GP的高可用性体系
3.3 并行数据加载 (1)并行加载技术充分利用分布式计算和分布式存储的优势,保证发挥出每一块Disk的I/O资源
(2)并行加载比串行加载,速度提高40-50倍以上,减少ETL窗口时间
(3)增加Segment和ETL Server,并行加载速度呈线性增长
7 外部表加载
- 外部表的特征
- read-only/write only两种方式
- 数据存放在数据库外
- 可执行SELECT, JOIN, SORT等命令,类似正规表的操作
- 外部表的优点
- 并行方式加载
- ETL的灵活性
- 格式错误行的容错处理
- 支持多种数据源
- 两种方式:
- External Tables: 基于文件
- Web Tables: 基于URL或指令
7.1基于外部表的高速数据加载/导出
7.2外部表加载的特征
- 并行数据加载提供好的性能
- 能够处理远程存储的文件
- 采用HTTP协议
- 200 MB/s data distribution rate per gpfdist
- Gpfdist文件分发守护进程启动:
gpfdist -d /var/load_files/expenses -p 8080 -l /home/gpadmin/log &
- 外部表定义:
CREATE EXTERNAL TABLE ext_expenses ( name text, date date, amount float4, description text )
LOCATION ('gpfdist//etlhost:8081/*','gpfdist//etlhost:8082/*')
FORMAT 'TEXT' (DELIMITER '|')
ENCODING ’UTF-8’
LOG ERRORS INTO ext_expenses_loaderrors
SEGMENT REJECT LIMIT 10000 ROWS ;
8列存储技术
9 GP支持行和列存储模式
Greenplum支持行或列存储模式
列模式目前只支持Append Only
如果常用的查询只取表中少量字段,则列模式效率更高,如查询需要取表中的大量字段,行模式效率更高
语法:
CREATE TABLE sales2 (LIKE sales) WITH (appendonly=true, orientation=column);
效率比较测试:
测试1:需要去表中所有字段,此时行存储更快。
select * from dw_ods.s1_sema_scmcaccp_row where crdacct_nbr= '4033930000166380411';
41秒
select * from dw_ods.s1_sema_scmcaccp_col where crdacct_nbr= '4033930000166380411';
116秒
测试2:只取表中少量字段,列存储更快
select crdacct_status from dw_ods.s1_sema_scmcaccp_row where crdacct_nbr= '4033930000166380411';
35秒
select crdacct_status from dw_ods.s1_sema_scmcaccp_col where crdacct_nbr= '4033930000166380411';
3秒
10动态在线扩容技术
11GP database的技术构成
四、应用生态
在标准的X86平台上,Greenplum与其它异构数据库、BI工具、挖掘预测工具、ETL工具和J2EE/.NET应用程序均有良好的连通性。
利用Greenplum外部表技术,映射Hadoop集群中的HDFS、HIVE、HBASE 等多种格式数据,使用ANSI SQL访问,数据无需中间落地 Greenplum对亚马逊S3的全面读写支持 Pivotal又刚刚宣布了Greenplum数据库对微软Azure云平台的支持,用户可以在微软Azure云平台上方便地使用到Greenplum .
五、Greenplum特点 借助MPP,Greenplum在大型数据集上执行复杂SQL分析的速度比很多解决方案都要快。Greenplum也带来了其它开源方案中没有的数据管理质量特性、升级和扩展能力。同时,Greenplum也降低了大规模实时数据分析的门槛,相比于 Map-Reduce,SQL语法简单,功能强大,易上手,使用和开发成本低,易于对接其他第三方数据分析工具。
标准SQL接口,比MapReduce接入更方便 完整的分布式事务能力,确保强数据一致性 近乎线性的在线扩展能力 高并发数据加载技术 高灵活的行、列以及混合存储及压缩技术 高可用技术方案 支持多方式的授权管理及审计,表级别粒度 丰富的生态系统,便捷对接hadoop等
本文来源https://blog.csdn.net/qq_35248268/article/details/81388256