上一篇文章讲了一个轻量化的企业级OLAP方案,这一篇文章继续介绍另外一个方案。
方案2:Greenplum
1 Greenplum介绍
1.1 Greenplum概念
Greenplum数据库是一种基于PostgreSQL开源技术的大规模并行处理(MPP)数据库服务器,其本质上是多个PostgreSQL面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),相比MySQL,PostgreSQL在稳定性、存储引擎、支持的数据类型有更大的优势。
1.2 Greenplum组成
Greenplum由Master、Segment、Interconnect组成。
Master:Greenplum数据库的Master是整个Greenplum数据库系统的入口,它接受连接和SQL查询并且把工作分布到Segment实例上。
Segment:Greenplum数据库的Segment实例是独立的PostgreSQL数据库,每一个都存储了数据的一部分并且执行查询处理的主要部分。
Interconnect:Interconect是Greenplum数据库架构中的网络层,采用了一种标准的以太交换网络。出于性能原因,推荐使用万兆网或者更快的系统。
Greenplum架构示意图如下:
Greenplum架构
1.3 Greenplum的特性
- 支持PB级以上的海量存储和处理
- 支持业务数据实时BI分析
- 支持主流的sql语法
- 支持线性扩展
- 支持数据库内部压缩
1.4 Greenplum使用场景
Greenplum数据引擎是为新一代数据仓库和大规模分析处理而建立的软件解决方案,其最大的特点是不需要高端的硬件支持仍然可以支撑大规模的高性能数据仓库和商业智能查询。在数据仓库、商业智能、海量数据的处理上Greenplum表现出极其优异的性能。
2 Greenplum的部署
2.1 部署准备
- 操作系统:
- Red Hat Enterprise Linux 64-bit 7.x
- Red Hat Enterprise Linux 64-bit 6.x
- CentOS 64-bit 7.x
- CentOS 64-bit 6.x
- Ubuntu 18.04 LTS
Tips:Red Hat和CentOS的6.x版本需要升级内核版本到2.6.32-696;Red Hat和CentOS的7.x版本最好使用7.3
- Java:
- Open JDK 8或者11
- Oracle JDK 8或者11
- 存储:
- Greenplum仅支持XFS文件系统
- Greenplum数据库可以部署在虚拟化系统中,前提使用块设备存储,并且可以挂载为XFS文件系统
- 容量估算:
系统的总存储容量大于用户总数据的1.4倍
- 最小硬件要求:
- CPU:兼容x86_64
- 内存:16G
- 存储空间:每个用户150MB,每个segment元数据300MB
- 网络:IPv4、IPv6
2.2 部署步骤
具体可参考文档的第五节:
https://cn.greenplum.org/wp-content/uploads/2020/08/第一节课-腾讯云.pptx.pdf
3 Greenplum的使用
3.1 创建和管理表
使用CREATE TABLE命令创建一个表。当用户创建一个表时,需要定义:
- 该表的列以及它们的数据类型;
- 任何用于限制列或者表中能包含的数据的表或者列约束;
- 表的分布策略;
- 表存储在磁盘上的方式;
- 大型表的表分区策略
其中第一点和第二点与MySQL语法一样,第五点与Hive分区表语法一样,因此只对第三点和第四点做详细说明。
分布策略:
- DISTRIBUTED BY(哈希分布):默认的分布策略,对指定的列做Hash进行数据分布,做Hash的列的数据类型不能是几何类型和用户自定义类型
- DISTRIBUTED RANDOMLY(随机分布):当没有列能满足做Hash分布时采用随机分布,采用轮询分发数据
- DISTRIBUTED REPLICATED(复制分布):每个segment节点都存储数据。当业务场景有大表join小表时,可将小表做复制分布
表存储方式:
- 堆存储:默认存储模式,在OLTP类型负载下表现最好,这种环境中数据会在初始载入后被频繁地修改。堆表最适合于较小的表,例如维度表,它们在初始载入数据后会经常被更新
- 追加优化存储:追加优化表存储在数据仓库环境中的规范化事实表表现最好,追加优化表的存储模型是为批量数据装载优化的,因此不推荐单行的INSERT语句
- 面向行或者面向列存储:面向行:频繁的更新表中数据;频繁INSERT。面向列:必须是追加优化表,且有压缩数据的需求
- 使用压缩(只适用于追加优化表):可以采用面向整表级的压缩或者列级别的压缩方式
Greenplum创建数据库、查询数据等操作与MySQL基本一致,在这不进行赘述。
3.2 GreenPlum备份与恢复
Greenplum支持并行备份与非并行备份。
并行备份:每台Segment主机都同时把其数据写入到本地的磁盘存储上
非并行备份:数据通过网络从Segment发送到Master进行存储
相比于并行备份,非并行备份由于需要把数据发送给Master,因此会占用大量的IO,并且还占用了Master的存储空间。因此正常情况下使用并行备份即可,如果需要将数据迁移到其他数据库供应商的系统,推荐使用非并行备份。
3.3 GreenPlum数据同步
Greenplum的数据同步主要通过PXF提供的连接器访问存储在Greenplum数据库外部源中的数据。这些连接器将外部数据源映射到Greenplum数据库的外部表(external table)中。
PXF封装了读取和写入外部数据存储所需要的实现细节,目前提供创建与Hadoop (HDFS,Hive,Hbase),对象存储(Azure,Google Cloud Storage, Minio, S3)和sql数据库(包括MySQL, ORACLE, PostgreSQL, Apache Ignite)的连接器。
具体的实现方式可以根据业务需求参考:
http://47.92.231.67:8080/6-0/pxf/overview_pxf.html
4 项目开发
目前可以通过JDBC的方式连接Greenplum数据库,有两种JDBC连接包可以实现连接:一种是通过PostgreSQL的接口库连接,另一种就是官方partner提供的连接库(greenplum.jar)。
通过PostgreSQL的接口库连接的maven配置如下:
db.properties文件配置如下:
posgresql_driver=org.postgresql.Driver
posgresql_url=
jdbc:postgresql://192.168.xx.xx:5432/数据库名称(即schema)
posgresql_user=账号
posgresql_password=密码
由于maven中没有greenplum.jar,因此采用官方的方式连接Greenplum需要自己下载jar包(
https://gpdb.docs.pivotal.io/6-3/datadirect/datadirect_jdbc.html#topic_ylk_pbx_2bb),相应的db.properties如下:
greenplum_driver=com.pivotal.jdbc.GreenplumDriver
greenplum_url=jdbc:pivotal:
greenplum://192.168.xx.xx:5432;DatabaseName=数据库 名称(即 schema)
greenplum_user=账号
greenplum_password=密码
到此轻量级的企业级OLAP方案就介绍完毕了,以后会带来其他技术的分享以及一些常见的java或者大数据面试问题。