greenplum

        数据处理这一名词可能高大上,但是在现实生活中早已存在数千年,古代使用手算、算盘进行数据处理,现代更多的则是使用计算机进行更为复杂的计算。

        早期数据存储在文件中,格式都是一致的。随着科技技术的发展,管理成本过高,文件格式之间不兼容,为了解决这些问题,数据库应运而生。目前比较常见的为关系型数据库以及非关系型数据库。NoSQL数据库根据数据模式的不同分为四种类型:键值数据库、文档型数据库、列族型数据库和图数据库。键值数据库包括Riak、Redis、Memcached等,文档型数据库包括MongoDB、CouchDB等,列族型数据库有Cassandra、HBase、Hypertable等,图数据库有Neo4J、OrientDB等。

        今天主要介绍Greenplum,Greenplum数据库是基于MPP架构的开源大数据平台,具有良好的弹性和线性扩展能力,内置并行存储、并行通信、并行计算和并行优化功能,兼容SQL标准,具有强大、高效的PB级数据存储、处理和实时分析能力,同时支持涵盖OLTP型业务的混合负载。它是典型的Master/Slave架构,由一个Master节点、一个Standby Master节点以及多个Segment节点组成,Segment包括Primary Segment节点和对应的Mirror Segment节点,Mirror Segment为Segment提供高可用支持。终端用户通过master提交查询语句,会对查询语句进行查询编译、查询优化等操作,生成并行查询计划,并分发到Segment节点执行。Segment执行完毕,会将数据发回Master节点,最终呈现给用户。此外有一个重要的功能组件叫作Interconnect,主要负责在查询执行过程中,实现节点间的数据传输。Hadoop高可用主要依赖于多副本机制,Greenplum的高可用依赖于RAID(Redundant Array Of Inexpensive Disks),每一块磁盘在都有冗余,Master节点和每个Segment节点的备份为Standby Master和Mirror Segment。

        根据Segment节点所在主机的CPU核数、内存空间、网络带宽等因素,通常一个Greenplum Segment节点会部署2~8个Segment实例。Segment的实例数越多,表示在此Segment节点上执行查询时资源使用越多,查询执行速度越快。Master节点并不存储用户数据,当数据库元信息有更新时,这些变化会自动同步到Standby Master节点以保证元信息的一致性。当Master节点出现故障而无法恢复时,Standby Master节点可以被激活而成为新的Master节点。每一个Segment节点可以部署一个Mirror Segment节点,此时原有的Segment节点称为Primary Segment节点。当Primary Segment节点接收Master节点的查询请求并需要修改用户数据时,对应的数据变化会复制到相应的Mirror Segment节点上。在查询执行过程中,一旦Primary Segment不可用,查询执行会重新分发到Mirror Segment节点以保证返回正确的查询结果。集群执行计划中,引入了Gather Motion节点,主要作用是运行在Master节点上,将所有Segment实例上查询执行的结果收集起来。如果需要,可以进行聚集操作,最终将查询结果返回给用户。在Greenplum并行查询计划中,每一个Motion节点都会生成一个Slice,每一个Slice由一个进程来执行对应此部分的查询计划。通过Slice将查询计划并行化,既可加快查询执行速度,又可以充分提高系统CPU等资源的利用率。在Greenplum并行查询计划中,每个Motion节点均有两个属性:sliceId和segments。sliceId是这个Slice在并行查询计划里的唯一标识。segments是参与执行该Slice的Segment实例数量,要么是1,对应Master节点;要么是N,对应整个Greenplum集群中Segment实例总数。所有Segment实例上执行同一SliceId操作的一组进程称为一个Gang。在一个规模为N的Greenplum集群中,Gang的大小或者是N(N-Gang),或是1(1-Gang)。N-Gang通常对应运行在Segment实例上的普通操作。例如,在N个Segment实例上,每个Segment启动一个进程执行全表扫描操作。1-Gang通常对应运行在Master节点上的Gather Motion,启动一个进程收集所有Segment上的数据进行汇总。Gang的大小即为查询的并行度。执行时主要经过解析器-优化器-调度器、执行器。

        Greenplum数据库查询的执行主要有以下步骤:1)客户端(如PSQL)通过libpq协议首先连接到Master节点的Postmaster进程。2)Master节点的Postmaster进程产生一个后端Postgres进程QD, QD与客户端进行连接,执行客户端请求认证。认证通过后,QD等待客户端发送查询请求。3)客户端将查询请求提交给QD进程。4)QD生成查询计划,并根据查询计划中的Slice数量,通过libpq与每个Segment实例上的Postmaster进程连接以启动QE进行查询执行。每个Segment实例上启动的QE数量等于需要执行的Slice数量。5)QD将查询计划分发给所有Segment实例上所有的QE进程。6)每个QE进程根据查询计划执行属于自己的Slice,不同Slice间QE的数据通信通过Interconnect完成。7)所有负责执行最后一个Slice的QE将查询执行的结果返回给QD。8)QD汇总查询结果,返回给客户端,并等待下一个查询语句的到来。

        常用建表语句create table abc("id" varchar(50), "name" varchar(50) );COMMENT ON COLUMN "test"."abc"."id" IS '主键';COMMENT ON COLUMN "test"."abc"."name" IS '名字';

        常用数据库命令:gpstart启动一个Greenplum集群,加-m选项,这样就能以维护模式(maintenance mode)启动Master节点;gpstop命令用于关闭一个Greenplum集群;gpstate命令用于展示运行中的Greenplum数据库的信息,比如哪个节点宕机、Master和Segment的配置信息、数据库系统所使用的端口号、Segment和Mirror Segment的映射关系等。加-s选项可以显示数据库系统的详细信息;gpactivatestandby命令用于激活Standby节点,gpactivatestandby命令使用-d选项指明正在激活的Master节点数据目录的绝对路径。如果没有-d选项,该命令会使用环境变量MASTER_DATA_DIRECTORY的值;gpactivatestandby命令用于激活Standby节点,通常用于Master节点无法正常工作的情况。Standby节点被激活后会成为Greenplum数据库集群中的Master节点,并接受客户端的查询请求。gpactivatestandby命令使用-d选项指明正在激活的Master节点数据目录的绝对路径。如果没有-d选项,该命令会使用环境变量MASTER_DATA_DIRECTORY的值;gpdeletesystem命令用于删除一个Greenplum数据库系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值