在centos7中手動編譯greenplum

来源:http://www.cnblogs.com/qiannianyuan/archive/2017/12/23/greenplum_compile.html
-Advertisement-
Play Games

一、編譯環境 Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) greenplum 5.3.0 二、編 ...


一、編譯環境

  • Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) 
  • greenplum 5.3.0

二、編譯過程

2.1、下載greenplum源碼

可從該位置下載需要的版本:https://github.com/greenplum-db/gpdb/releases/(此處使用5.3.0)

2.2、解壓

下載後再centos中解壓到指定目錄,如/home/gpdb_src

2.3、安裝必備的工具

  • psutil
  • lockfile (>= 0.9.1)
  • paramiko
  • setuptools
  • conan

註意,以上工具使用pip(>=7.x.x)安裝,如果沒有pip,可以參考https://pip.pypa.io/en/stable/installing/步驟進行安裝。

如果pip版本太低,可使用如下命令升級:

pip install --upgrade

2.4、配置ld.so.conf

由於我們使用的是CentOS系統, 所以一定要加上/usr/local/lib和/usr/local/lib64的路徑到/etc/ld.so.conf文件中,這一步尤為重要,目的是將常用的動態函數庫載入到記憶體中,可以提高函數庫的訪問效率。另外,如果不配置這一步,在後面編譯的過程中會遇到一些奇奇怪怪的缺少引用的錯誤

修改後的文件內容類似如下:

include ld.so.conf.d/*.conf
/usr/local/lib
/usr/local/lib64

修改完成後保存,之後運行ldconfig命令

2.5、創建gpadmin用戶和配置ssh

這一步可以使用源碼中自帶的腳本完成,腳本位置如下:/home/gpdb_src/concourse/scripts/setup_gpadmin_user.bash,執行如下命令:

cd /home
bash ./gpdb_src/concourse/scripts/setup_gpadmin_user.bash

這裡說明下,這一步如果使用腳本操作,一定要把源碼文件放到gpdb_src中,執行腳本時需要進入到與gpdb_src同級的目錄執行,如果要手動配置也是可以的。具體的操作也不複雜,有興趣的朋友可以讀下setup_gpadmin_user.bash腳本。

執行完成後,進行如下兩步操作驗證:

su - gpadmin
ssh <當前主機名稱>

如果切換賬戶正常並且ssh正常,不需要輸入密碼,這說明這一步成功

2.6、修改內核參數

cat >> /etc/sysctl.conf <<-EOF
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2

EOF

cat >> /etc/security/limits.conf <<-EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

EOF

cat >> /etc/ld.so.conf <<-EOF
/usr/local/lib

EOF

這一步很重要,否則在後期使用greenplum的時候會遇到問題,詳細的問題後面會解析。

2.7、編譯GPORCA

這裡提一下,如果不需要優化器這一步也可以跳過。畢竟greenplum在不安裝orca的情況下使用的是legacy優化器。

GPORCA是postgresql新一代的優化器,在性能上有很大提升,至於為什麼要有兩個優化器,其實是有歷史原因的,早期legacy是針對單節點PostgreSQL而構建的,主要應用於OLTP場景,現在的greenplum使用MPP,主要應用場景變為OLAP場景,legacy對此雖然進行了修改,但是從架構設計上,使得其維護和添加新的功能越來越困難,所以有了GPORCA優化器。

雖然greenplum提供了直接安裝的方式,但是本人一直沒有安裝成功。很簡單,就是執行如下命令:

cd /home/gpdb_src/depends
./configure make make install_local

本人遇到的錯誤是:

Unable to connect to gpdb-oss=https://api.bintray.com/conan/greenplum-db/gpdb-oss
ERROR: All remotes failed

如果有知道怎麼解決的朋友還請告訴我。

下麵提供手動編譯的方法。特別註意,安裝前一定要確認當前的版本是否和greenplum版本相匹配,如果不匹配將無法編譯greenplum,詳情參見問題6

首先,編譯gporca前需要安裝如下必備工具:

  • CMake(>=3.1)
  • gp-xerces
  • re2c(>= 0.11.3)

 2.7.1 下載安裝cmake

進入https://cmake.org/download/頁面下載自己需要的版本

2.7.2 下載安裝gp-xerces

可以使用git下載:https://github.com/greenplum-db/gp-xerces.git

2.7.3  下載安裝re2c

進入http://re2c.org/install/install.html頁面下載自己需要的版本

安裝re3c是由於配置ninja時需要

2.7.4 下載安裝Ninja

可以使用git下載:https://github.com/ninja-build/ninja.git

下載後進入ninja目錄執行如下命令:

./configure.py --bootstrap

2.7.5 下載安裝gporca

可以使用git下載:https://github.com/greenplum-db/gporca.git

解壓後進入目錄執行如下命令安裝:

cmake -GNinja -H. -Bbuild
ninja install -C build

待安裝完成後,進入/gporca/build目錄,執行ctest命令進行檢查

如果最後輸出類似如下結果:

100% tests passed, 0 tests failed out of 119

Total Test time (real) = 195.48 sec

這說明編譯成功了。

 2.8 安裝greenplum

執行如下命令:

cd /home/gpdb_src
./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/gpdb
make -j8
make -j8 install

註意:這裡如果跳過了第七步,則configure時需要使用如下命令:

./configure --with-perl --with-python --with-libxml --with-gssapi --disable-orca --prefix=/usr/local/gpdb

configure有很多的組件可以加上,如果需要添加自定義可以使用./configure --help查看,加上自己需要的組件即可

 通過以上步驟,就完成了編譯。雖然本人已經力求寫的詳細,但是還是略過了一些自認為大家一看到就能知道原因,同時環境的差異也會導致一些本人沒有遇到過的錯誤,所以有理由相信大家編譯的時候還是會遇到一些問題,如果遇到了本文沒有涉及到的錯誤可以告訴我,大家一起討論。

三、錯誤處理

1)

安裝必備工具或者升級pip時可能報類似如下錯誤:

Could not fetch URL https://pypi.python.org/simple/conan/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:765) - skipping

可以執行如下命令:

pip install --trusted-host pypi.python.org XXXX
pip install --trusted-host pypi.python.org --upgrade pip
XXXX為你要安裝的工具

2)

checking for xsltCleanupGlobals in -lxslt... no
configure: error: library 'xslt' is required for XSLT support

執行如下命令:yum install libxslt libxslt-devel

3)

/bin/ld: libpq/SUBSYS.o: undefined reference to symbol 'gss_delete_sec_context@@gssapi_krb5_2_MIT'
/bin/ld: note: 'gss_delete_sec_context@@gssapi_krb5_2_MIT' is defined in DSO /lib64/libgssapi_krb5.so.2 so try adding it to the linker command line
/lib64/libgssapi_krb5.so.2: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[2]: *** [postgres] Error 1
make[2]: Leaving directory `/home/greenplum/src/backend'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/greenplum/src'
make: *** [all] Error 2

類似這種錯誤基本都是安裝步驟中第4步沒有配置導致的

4)

checking for flags to link embedded Perl... Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.
no
configure: error: could not determine flags for linking embedded Perl.
This probably means that ExtUtils::Embed or ExtUtils::MakeMaker is not installed.

yum install perl-ExtUtils-Embed -y

5)

checking for xmlSaveToBuffer in -lxml2... no
configure: error: library 'xml2' (version >= 2.6.23) is required for XML support

yum install libxml2 libxml2-devel -y

6)

checking Checking ORCA version... configure: error: Your ORCA version is expected to be 2.51.XXX

這說明你裝的orca的版本是不匹配的,需要安裝匹配版本,那麼如何在安裝前知道需要什麼版本,執行如下命令:

cd /home/gpdb_src/depends
cat conanfile_orca.txt

這裡在文件中可以看到如下記錄:

[requires]
orca/v2.51.0@gpdb/stable

到github上找到對應版本下載安裝即可。

當需要更換版本時,需要清理掉之前已經安裝的版本。預設情況下安裝在/usr/local/目錄下,根據安裝的路徑,執行如下命令刪除已經安裝的版本

rm -rf build/*
rm -rf /usr/local/include/naucrates
rm -rf /usr/local/include/gpdbcost
rm -rf /usr/local/include/gpopt
rm -rf /usr/local/include/gpos
rm -rf /usr/local/lib/libnaucrates.so*
rm -rf /usr/local/lib/libgpdbcost.so*
rm -rf /usr/local/lib/libgpopt.so*
rm -rf /usr/local/lib/libgpos.so*

註意:

1、build位於gporca編譯目錄,其是編譯時cmake產生的一些文件

2、如果重新安裝了版本一定要執行ldconfig命令,否則新的版本不會在緩存中更新,會一直報上述錯誤

四、參考資料

http://blog.csdn.net/luojinbai/article/details/44217551

五、其他

朋友近期在研究RocketMQ源碼,如果對這塊感興趣的朋友可以關註他的公眾號讀讀他的文章,相信一定會有所收穫。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本次實驗採用騰訊雲伺服器:https://cloud.tencent.com/ 大學生身份的可以看看有沒有什麼活動購買 其他身份的78一個月 關於騰訊雲伺服器的使用可以看看騰訊雲的使用手冊 本博客涉及到的Linux相關知識自行谷歌~百度~ 開始操作~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
  • 一.環境 1.1 jello@jello:~$ uname -a Linux jello 4.4.0-98-generic #121-Ubuntu SMP Tue Oct 10 14:24:03 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 1.2 jello@je ...
  • 幾款網路測試工具總結 ping命令以前是一個很好用並且常用的網路測試工具,它是基於ICMP協議,但是出於網路安全等因素,大部分網路環境以及雲環境可能都會禁止ICMP協議,所以在工作中,我們必須掌握一些其他比較流行的網路測試工具,下麵分別介紹tcpping、tcping、psping、hping、pa... ...
  • 入手個樹莓派3B 裝了 ubuntu 16.04 需要用到SSH 記錄下 0、先獲得樹莓派IP 樹莓派 使用網線連接路由器和樹莓派 在路由器設置頁面(一般是192.168.1.1具體看路由器的型號和設置)中獲得樹莓派ip地址 樹莓派的MAC地址很有特點 或者 進入系統後 連接wifi 在終端中 輸入 ...
  • 1.準備階段 1.1 環境 虛擬機A :192.168.0.130 虛擬機B :192.168.0.131 系統:Ubuntu 16.04 LTS JRE:OpenJDK 1.8.0_151(A、B都要安裝) DB:MySQL 5.7.20(A、B都要安裝) ZooKeeper:3.4.11(只裝A ...
  • 大數據:Hadoop入門 一:什麼是大數據 (1.)大數據是指在一定時間內無法用常規軟體對其內容進行抓取,管理和處理的數據集合,簡而言之就是數據量非常大,大到無法用常規工具進行處理,如關係型資料庫,數據倉庫等。這裡“大”是一個什麼量級呢?如在阿裡巴巴每天處理數據達到20PB(即20971520GB) ...
  • ...
  • 參考 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 1、下載並解壓 2、設置環境變數 3、修改hadoop-env.sh 4、修改core-site.xml 5、修 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...