Greenplum 架构和核心引擎
Greenplum 架构和核心引擎 1
学习地址 2
1 Greenplum 架构概述 2
1.1 概述简介 2
1.2 MPP无共享静态拓扑 3
1.3 集群内数据分两类 3
1.4 对用户透明 4
1.5 用户数据表 4
1.6 系统表/数据字典 5
1.7 数据分布:并行化处理的根基 5
1.8 多态储存:根据数据温度选择最佳的储存方式 6
1.8.1 行储存 6
1.8.2 列储存 6
1.8.3 外部表 6
2 Greenplum SQL的执行过程 7
2.1 系统空闲状态 7
2.2 客户端建立会话链接 7
2.3 Master fork一个进程处理客户端请求 8
2.4 QD建立和Segment的链接 8
2.5 segment fork 一个子进程处理QD的链接请求 9
2.6 客户端发送查询请求给QD 10
2.7 QD发送任务给QE 10
2.8 QD与QEs建立数据通信通道 11
2.9 QE各司其职 11
2.10 QE状态管理 12
2.11 QD返回查询结果给客户端 12
3 Greenplum 主要设计思考 13
3.1 继承自PostgreSQL的设计 13
3.2 主从架构 13
3.3 数据储存 14
3.4 数据通信 14
3.5 三级并行计算 15
3.6 流水线执行 15
3.7 网络 16
3.8 磁盘 16
学习地址
https://www.bilibili.com/video/av81898649?p=1
1 Greenplum 架构概述
1.1 概述简介
ODBC与JDBC都是基于标准的SQL来执行的,支持很好的第三方工具
1.2 MPP无共享静态拓扑
master与standby master 可以实现集群的高可用,通过共享高速的网络传送数据,除了网络是共享的其他的都是无共享的
1.3 集群内数据分两类
集群内数据分两类:用户数据与元数据
global 日志在所有的节点上都是一样的
local 日志一般都是一些统计信息等系统表
segment data 保存的用户数据信息
1.4 对用户透明
对用户可以看到以下的instance
1.5 用户数据表
在以下的图标中可以看出用户数据已经打散到每个节点上,每个节点上有一部分,master有元信息
1.6 系统表/数据字典
对于系统表/数据字典全部复制到每个节点上
1.7 数据分布:并行化处理的根基
集群按照算法均匀的把数据分不到不同的分区中,便于查快的查询
1.8 多态储存:根据数据温度选择最佳的储存方式
一般的数据都是有热度的,一般的越新的数据价值越高,越老的数据价值越低
1.8.1 行储存
1、访问多列时速度快
2、支持高效更新和删除
3、AO行储存主要为插入而优化
1.8.2 列储存
1、列储存更适合压缩
2、查询列子集时速度快
3、不同列可以使用不同的压缩方式:gzip(1-9),quicklz,delta,RLE,zstd
1.8.3 外部表
1、历史数据和不常访问的数据储存在HDFS或者其他外部系统中
2、无缝查询所有数据
3、Text,CSV,Bianry,Avro,Parquest,ORC格式
2 Greenplum SQL的执行过程
0、The system at rest
1、Client connects via the entry postmaster
2、Entry postmaster forks a new backend -- the QD
3、QD connects to segment via the segment postmasters
4、Segment postmasters fork initial gang of QEs
5、Client submits a query to the QD
6、QD plans query and submits plans to QEs
7、QD and QEs setup interconnect routes according to plan
8、QD and QEs execute their slices sending tuples up the slice tree
9、QEs return status to QD
10、QD returns result set and status to the client
2.1 系统空闲状态
1、1个master,2个segment
11、postmaster 是数据库主进程,监听用户的请求
12、此时系统空闲,没有任何运行查询
13、Master 上的seq server 为序列号生成器
2.2 客户端建立会话链接
1、客户端通过libpq协议发送链接请求给Greenplum master节点
2、Master 节点上postmaster 进程会监听到链接请求,并处理
2.3 Master fork一个进程处理客户端请求
1、Master 上的postmaster 进程监听到链接请求后,fork一个子进程用于处理该客户端的所有查询请求
2、子进程在PostgrsSQL中称为backend;在Greenplum中该进程称为QD
2.4 QD建立和Segment的链接
1、QD进程使用libpq协议和每个segment建立链接请求
2、Segment上的postmaster进程监听到QD的链接请求并进行处理
3、对于segment而言,QD是他们的客户端
4、仅有在需要时QD才会建立和Segment的链接
2.5 segment fork 一个子进程处理QD的链接请求
1、Segment上的postmaster进程监听到QD的链接请求后,创建一个子进程以处理后续查询的请求
2、Segment 上创建的子进程称为QE
2.6 客户端发送查询请求给QD
1、客户端使用libpq协议发送查询请求给master上得得QD进程
2、QD进程对接收到的查询进行处理,包括解析,优化生成分布式查询计划等
2.7 QD发送任务给QE
1、QD生成分布式查询计划后通过libpq协议发送给各个segment上的QE进程
2.8 QD与QEs建立数据通信通道
1、QD和每个segment上的QEs根据查询计划里面的信息,简历interconnect链接
2、Interconnect用于内部数据通信
3、Libpq用于控制命令和结果返回
2.9 QE各司其职
1、每个QE执行分配给它的任务
2、QE之间的通过interconnect交互数据
2.10 QE状态管理
1、QE和QD之间通过libpq协议进行状态的跟新和管理,包括错误处理等
2、QE之间没有libpq链接
2.11 QD返回查询结果给客户端
1、最终QD将查询的结果返回给客户端
3 Greenplum 主要设计思考
3.1 继承自PostgreSQL的设计
3.2 主从架构
3.3 数据储存
3.4 数据通信
3.5 三级并行计算
3.6 流水线执行
3.7 网络
3.8 磁盘
3.7 网络
3.8 磁盘
来源:CSDN
作者:小徐xfg
链接:https://blog.csdn.net/xfg0218/article/details/104564356