Greenplum 帶ORCA 優化器的編譯安裝解析

ORCA是開源的Postgres和Greenplum的優化器,相比於Greenplum和Postgres內置的優化器,ORCA在複雜查詢以及分區表等場合有很是好的性能提高。這裏介紹下如何使Greenplum啓用ORCA優化器,以及如何運行Greenplum的測試用例installcheck-world。html

設置開發環境

在開始以前須要裝編譯和運行的依賴,包括Greenplum和ORCA的依賴。這裏採用的編譯環境以CentOS 7爲例。首先安裝系統包,執行的命令以下:python

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 wget
sudo yum install -y epel-release centos-release-scl
sudo yum install -y python-pip python-psutil cmake3
sudo yum install -y devtoolset-6-toolchain
sudo yum install -y xerces-c-devel

Greenplum源碼保包中的README.CentOS.bash有相關的依賴包設置,這裏的命令相比README.CentOS.bash增長了部分依賴。接下來按裝相關的python依賴,命令以下:linux

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

而後安裝ORCA依賴的編譯管理公共ninja,這裏用的是1.8.2版本。最新的1.9 依賴了高版本的c++運行庫,在CentOS7上執行會報錯。c++

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
unzip ninja-linux.zip
sudo mv ninja /usr/local/bin/

最後再來配置額外的環境設置:git

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

到此咱們的準備工做就所有完成,能夠開始編譯了。github

配置ORCA

準備xerces依賴庫(可選)

編譯ORCA以前須要先編譯它的依賴,也就是xerces,ORCA用它來讀寫xml數據格式。這一步操做是可選的,由於咱們既可使用已經安裝好的系統版本,也可使用帶gp補丁的版本(地址爲:https://github.com/greenplum-db/gp-xerces)。若是要使用gp補丁的版本,須要執行的命令以下:centos

git clone https://github.com/greenplum-db/gp-xerces.git
cd gp-xerces/
mkdir build && cd build
../configure --prefix=/usr/local/gpdb
make && make install && make install

編譯ORCA

編譯ORCA須要cmake3和gcc-6,在第一步中已經配置完成,開始前可經過以下命令進行確認:api

gcc --version
cmake --version

若是版本不對或者命令沒有找到,請確保以下兩個操做正確執行了:bash

source scl_source enable devtoolset-6
sudo 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 https://github.com/greenplum-db/gpdb.git --branch 6X_STABLE --single-branch --depth 1 -b 6X_STABLE 6X_STABLE
cd 6X_STABLE/depends
CFLAGS="-L/usr/local/gpdb/lib/" ./configure --prefix=/usr/local/gpdb
make
make 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-openssl
make -j4 && make install

當命令執行成功後,恭喜你,你本身的Greenplum已經就緒。編譯好的Greenplum就被安裝到/usr/local/gpdb目錄,它能夠做爲一個總體打包,部署到其它機器的一樣位置進行集羣測試。編譯好的gpdb目錄內容大體以下:

$ ls /usr/local/gpdb
bin  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-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

建立測試集羣

經過以下命令能夠建立一個3 primary, 3 mirror的Greenplum集羣:

source /usr/local/gpdb/greenplum_path.sh
make 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。

得到更多關於Greenpum的技術乾貨,請訪問Greenplum中文社區網站

相關文章
相關標籤/搜索