龙空技术网

「实战系列」Greenplum 带 ORCA 优化器的编译安装解析

PieDB 190

前言:

现时各位老铁们对“centos编译速度优化”大约比较关心,各位老铁们都需要了解一些“centos编译速度优化”的相关文章。那么小编也在网络上收集了一些关于“centos编译速度优化””的相关内容,希望小伙伴们能喜欢,你们快快来学习一下吧!

ORCA 是开源的 Postgres 和 Greenplum 的优化器,相比于 Greenplum 和 Postgres 内置的优化器,ORCA 在复杂查询以及分区表等场合有非常好的性能提升。这里介绍下如何使 Greenplum 启用 ORCA 优化器,以及如何运行 Greenplum 的测试用例 installcheck-world。

设置开发环境

在开始之前需要装编译和运行的依赖,包括 Greenplum 和 ORCA 的依赖。这里采用的编译环境以 CentOS 7 为例。首先安装系统包,执行的命令如下:

sudo yum -y groupinstall "Development Tools"sudo yum -y install readline-devel zlib-devel curl-devel apr-devel libevent-devel libxml2-devel bzip2-devel python-devel openssl-devel which iproute net-tools perl-Env wgetsudo yum install -y epel-release centos-release-sclsudo yum install -y python-pip python-psutil cmake3sudo yum install -y devtoolset-6-toolchainsudo yum install -y xerces-c-devel

Greenplum 源码保包中的 README.CentOS.bash 有相关的依赖包设置,这里的命令相比 README.CentOS.bash 增加了部分依赖。接下来按装相关的 python 依赖,命令如下:

sudo pip install --upgrade pipsudo pip install --no-cache-dir lockfile paramiko setuptools psutil conan

然后安装 ORCA 依赖的编译管理公共 ninja,这里用的是1.8.2版本。最新的1.9依赖了高版本的 c++ 运行库,在 CentOS7 上执行会报错。

wget  ninja-linux.zipsudo mv ninja /usr/local/bin/

最后再来配置额外的环境设置:

sudo mkdir /usr/local/gpdbsudo chown -R `whoami` /usr/local/gpdbsource scl_source enable devtoolset-6sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake

到此我们的准备工作就全部完成,可以开始编译了。

配置ORCA

准备xerces依赖库(可选)

编译 ORCA 之前需要先编译它的依赖,也就是 xerces,ORCA 用它来读写 xml 数据格式。这一步操作是可选的,因为我们既可以使用已经安装好的系统版本,也可以使用带 gp 补丁的版本(地址为:)。如果要使用 gp 补丁的版本,需要执行的命令如下:

git clone  gp-xerces/mkdir build && cd build../configure --prefix=/usr/local/gpdbmake && make install && make install

编译ORCA

编译 ORCA 需要 cmake3 和 gcc-6,在第一步中已经配置完成,开始前可通过如下命令进行确认:

gcc --versioncmake --version

如果版本不对或者命令没有找到,请确保如下两个操作正确执行了:

source scl_source enable devtoolset-6sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake

其中命令`source scl_source enable devtoolset-6`用于修改 gcc 版本,可将其加入登录脚本中来自动执行

echo 'source scl_source enable devtoolset-6' >> ~/.bashrc

由于 Greenplum 和 ORCA 之间存在版本匹配问题,因此我们采用的方式是用 Greenplum 源码中的 ORCA 版本来编译,具体步骤如下:

git clone  --branch 6X_STABLE --single-branch --depth 1 -b 6X_STABLE 6X_STABLEcd 6X_STABLE/dependsCFLAGS="-L/usr/local/gpdb/lib/" ./configure --prefix=/usr/local/gpdbmakemake install_local

此时编好 ORCA 就被安装于 /usr/local/gpdb 目录下了。

编译Greenplum

Greenplum 有很多的扩展功能可以在命令行里控制,这里重点在编译 ORCA,因此使用的配置关掉其它一些编译参数。在 Greenplum 的源码根目录执行如下命令:

export LD_LIBRARY_PATH=/usr/local/gpdb/libCFLAGS="-I/usr/local/gpdb/include" LDFLAGS="-L/usr/local/gpdb/lib/" ./configure --enable-orca --without-perl --without-python --with-libxml --without-gssapi --disable-pxf --without-zstd -without-opensslmake -j4 && make install

当命令执行成功后,恭喜你,你自己的Greenplum已经就绪。编译好的Greenplum就被安装到 /usr/local/gpdb 目录,它可以作为一个整体打包,部署到其它机器的同样位置进行集群测试。编译好的 gpdb 目录内容大致如下:

$ ls /usr/local/gpdbbin docs etc greenplum_path.sh include lib sbin share
运行测试用例

Greenplum 编译完之后,我们需要确认所有的相关测试可以正常运行。Greenplum 继承了 Postgres 的测试框架,提供了自己的测试 target: installcheck-world。此外,Greenplum 还包含了创建测试集群的配置,因此我们的目标就是用测试集群来执行 installcheck-world 测试。

准备系统配置

为确保测试可以正常执行,强烈建议根据 Greenplum 官方文档来配置相应的系统配置文件,包括 /etc/security/limits.conf 和 /etc/sysctl.conf 等,在源码目录的 README.linux.md 中也有简单的描述。

此外,由于即使单机版本,Greenplum 也需要使用 SSH 执行命令,因此需要配置好无密码访问:

ssh-keygencat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys

创建测试集群

通过如下命令可以创建一个 3 primary, 3 mirror 的 Greenplum 集群:

source /usr/local/gpdb/greenplum_path.shmake create-demo-cluster

当看到如下信息时,说明 demo 集群配置成功。

 optimizer-----------  on (1 row) gp_opt_version---------------------------------------------- GPOPT version: 3.48.0, Xerces version: 3.1.2(1 row)

如果出现错误,需要根据提示进行相应的修复。修复完后,可以先通过命令

pkill postgres

来强制结束未完成的操作,然后重新执行。

执行测试

创建好测试集群后,就可以运行测试了,在 Greenplum 源码根目录下执行如下命令:

PGPORT=15432 make installcheck-world

所有测试都会在打开 ORCA 的情况下执行。此外,尽管我们使用的是 STABLE 分支,仍有可能出现某些测试失败的情况,欢迎大家提供补丁或者上报 bug。

本文作者:李阳

Pivotal中国研发中心Greenplum研发部产品经理,有丰富的Postgres和Greenplum的实战及开发经验。参与过多个Greenplum重要组件的开发及产品设计,包括大数据平台容器化技术,ETL解决方案,流式数据处理,数据库灾备等。目前负责Greenplum的新一代ETL和流处理引擎Greenplum Stream Server。

标签: #centos编译速度优化