因?yàn)橄霂兔熜肿鰧?shí)驗(yàn), 需要編譯搭建greenplum數(shù)據(jù)庫(kù)環(huán)境, 故在師兄建議下于2020/2/26寫下此文.
Greenplum是一個(gè)采取MPP架構(gòu)(分布式), 用于大數(shù)據(jù)的開源新型數(shù)據(jù)庫(kù), 底層采取了傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)postgreSQL進(jìn)行存儲(chǔ)與操作拳锚。
官網(wǎng):https://greenplum.org/
github項(xiàng)目:https://github.com/greenplum-db/gpdb
在中文官網(wǎng)上你是可以找到greenplum編譯安裝的中文文檔的并炮,但是這份文檔非常的簡(jiǎn)潔,對(duì)實(shí)際安裝中可能會(huì)出現(xiàn)的錯(cuò)誤基本沒(méi)有提及广辰。所以如果按照它進(jìn)行安裝可能會(huì)導(dǎo)致你在反復(fù)碰到莫名bug時(shí)感到異常痛苦烤芦。
首先循签,在具體安裝步驟前熄攘,我先提及一下系統(tǒng)問(wèn)題嘁信。我們知道許多軟件都聲明自己是支持多平臺(tái)的,甚至?xí)宰约浩脚_(tái)移植性作為優(yōu)勢(shì)進(jìn)行宣傳抡爹,但是這種支持大多是運(yùn)行支持而不是編譯支持掩驱。你在自己本地環(huán)境上跑起來(lái)了這個(gè)程序,難度你以為你的環(huán)境就足夠編譯它了嗎豁延?本人在配置環(huán)境中踩到最大的坑就是系統(tǒng)坑昙篙。我首先采取的是VMvare15 掛載Centos8虛擬機(jī)腊状,我在下載完github項(xiàng)目提供的依賴項(xiàng)后诱咏,在編譯過(guò)程中困難重重,從找不到庫(kù)開始報(bào)錯(cuò)缴挖,一直報(bào)到語(yǔ)法錯(cuò)誤袋狞。最后因?yàn)橐粋€(gè)系統(tǒng)配置錯(cuò)誤我出現(xiàn)gnome桌面循環(huán)登錄,不得已放棄了centos8去嘗試centos7映屋。然而嘗試centos7后苟鸯,令人驚奇的是,在centos7下你按照github教程來(lái)基本沒(méi)有報(bào)錯(cuò)棚点,極少出現(xiàn)缺包現(xiàn)象早处,這一路順風(fēng)順?biāo)啾萩entos8的嘗試簡(jiǎn)直讓人感動(dòng)地落淚瘫析。
在編譯安裝中砌梆,最常見的問(wèn)題就是依賴庫(kù)不匹配,或者得不到滿足贬循。系統(tǒng)不是官方編譯的系統(tǒng)咸包,一方面很可能讓你下載不到合適的庫(kù),另一方面下載下來(lái)的庫(kù)可能不匹配需求從而導(dǎo)致后續(xù)編譯中出現(xiàn)不可思議的語(yǔ)法報(bào)錯(cuò)杖虾。greenplum雖然一直在更新升級(jí)烂瘫,但是github上提供的安裝依賴庫(kù)指南卻不能及時(shí)滿足新系統(tǒng)。所以建議選擇長(zhǎng)時(shí)間較為穩(wěn)定的系統(tǒng)版本奇适,如果程序有推薦系統(tǒng)坟比,務(wù)必選擇推薦系統(tǒng)芦鳍。
言歸正傳。
第一步温算,開始準(zhǔn)備gpdb的環(huán)境依賴怜校。
https://github.com/greenplum-db/gpdb/blob/master/README.linux.md
該鏈接介紹了不同系統(tǒng)下,基礎(chǔ)依賴庫(kù)的安裝和一些配置注竿,我是centos系統(tǒng)茄茁,也就是按照其中第一個(gè)區(qū)域進(jìn)行操作。
因?yàn)橐蕾噹?kù)中包括python庫(kù)巩割,所以如果發(fā)現(xiàn)下載中有報(bào)紅錯(cuò)一般不要急裙顽,大多是下載超時(shí),多執(zhí)行幾遍下載腳本就可以了宣谈。
配置完ld.so.conf后記得sudo ldconfig愈犹,普通用戶模式是無(wú)法創(chuàng)建緩存文件的。
在操作完后闻丑,下拉github頁(yè)面會(huì)有一個(gè)Common Platform Tasks漩怎,繼續(xù)配置環(huán)境。
如果你想用它的自動(dòng)腳本創(chuàng)建gpadmin和交換密鑰嗦嗡,建議跳入root后再執(zhí)行勋锤。普通用戶直接執(zhí)行會(huì)失敗。
然后測(cè)試ssh連接自己是否可以不用輸密碼侥祭。ssh地址的格式是 user@ip(Eg:root@192.168.0.1)叁执,但是這個(gè)地方其實(shí)你不用查自己的ip,直接用localhost代表自己就可以了(ssh localhost)矮冬。
做到ssh測(cè)試這一步谈宛,如果你發(fā)現(xiàn)自己明明已經(jīng)把生成的密鑰放入指定文件夾了,但是連接中還是提示輸入密碼胎署,那么很可能就是你的ssh配置文件默認(rèn)取消了密鑰登錄吆录,或者配置文件權(quán)限問(wèn)題,附參考鏈接(http://www.mamicode.com/info-detail-2128504.html)琼牧。
配置文件默認(rèn)取消密鑰登錄的話
vi /etc/ssh/sshd_config?
確保 PubkeyAuthentication yes?
現(xiàn)在如果你把上述操作都完成了恢筝,那么你就到了整個(gè)安裝中我碰見最坑的地方了。
github原文中這里需要你輸入一些配置命令障陶,給的命令包含對(duì)sysctl和security的修改滋恬。
其中對(duì)sysctl的修改有一句話在我的嘗試中證實(shí)會(huì)導(dǎo)致centos7和centos8在VMvare掛載的虛擬機(jī)中陷入無(wú)限登錄問(wèn)題。
vm.overcommit_memory = 2
就是上面這句話抱究,放到百度上搜索你會(huì)發(fā)現(xiàn)這句話意思是內(nèi)核允許分配超過(guò)所有物理和交換空間總和的內(nèi)存恢氯。這會(huì)導(dǎo)致gnome桌面在初始化時(shí)失敗,從而反復(fù)登錄。
在碰到無(wú)限登錄問(wèn)題時(shí)勋拟,我用ctrl+alt+F2切入第二工作區(qū)勋磕,查看var/log/messages系統(tǒng)日志,發(fā)現(xiàn)了gnome在啟動(dòng)后出現(xiàn)無(wú)法初始化分配內(nèi)存的報(bào)錯(cuò)敢靡。我當(dāng)時(shí)很疑惑挂滓,難道是我虛擬機(jī)分配內(nèi)存太小了嗎,我當(dāng)即把內(nèi)存調(diào)到上限3G啸胧,但是問(wèn)題沒(méi)有解決赶站,我大致猜到應(yīng)該是有命令調(diào)整了內(nèi)核內(nèi)存利用,然后試出這一點(diǎn)纺念。
我在刪除了這句話后重啟系統(tǒng)贝椿,系統(tǒng)就一切正常了。
另外關(guān)于系統(tǒng)配置的一點(diǎn)就是陷谱,在配置完sysctl.conf后一般用sysctl -p來(lái)刷新烙博,和重啟效果是一樣的,如果在安裝步驟中你沒(méi)有刷新也沒(méi)有重啟那么烟逊,在安裝完畢后渣窜,如果你直接嘗試項(xiàng)目樣例架起服務(wù)器,你可能會(huì)發(fā)現(xiàn)平行節(jié)點(diǎn)架不起來(lái)宪躯。查看日志發(fā)現(xiàn)segment內(nèi)核內(nèi)存分配不足乔宿。
配置步驟結(jié)束后就到了安裝gporca了。
第二部眷唉,安裝gporca予颤。
在github greenplum-db的首頁(yè)其實(shí)有講兩種方式囤官,一種是腳本安裝冬阳,一種是自己手動(dòng)clone gporca項(xiàng)目再配置環(huán)境編譯gporca。大家肯定會(huì)想党饮,腳本安裝多簡(jiǎn)單啊肝陪,四行命令直接敲完。但是實(shí)際上的經(jīng)歷會(huì)有這么簡(jiǎn)單么刑顺?我腳本安裝完后氯窍,gpdb在configure那一步親切地告訴我安裝的gpoca版本不對(duì),讓我滾回去重新裝蹲堂。這時(shí)候我才發(fā)現(xiàn)給了腳本又給詳細(xì)手動(dòng)安裝步驟的八成腳本靠不住狼讨。沒(méi)有辦法只有重新手動(dòng)安裝,并且手動(dòng)安裝后需要刷新緩存也就是之前執(zhí)行過(guò)的 sudo ldconfig這步命令柒竞,否則仍然會(huì)繼續(xù)報(bào)錯(cuò)版本不匹配政供。
gporca庫(kù)(README):https://github.com/greenplum-db/gporca
關(guān)于gporca手動(dòng)安裝其實(shí)非常有趣,因?yàn)槟阋謩?dòng)編譯它,你就得先手動(dòng)編譯出它需要的庫(kù)布隔。
GP-Xerces:?https://github.com/greenplum-db/gp-xerces
這個(gè)直接裝就可以了离陶,它可能還要你cmake3,這個(gè)一般直接apt或者yum下也就可以了衅檀。
但是ninja編譯器招刨,恭喜你yum不能直接下到,得去github上clone到本地然后再編譯哀军,開不開心沉眶,驚不驚喜。
ninja:https://github.com/ninja-build/ninja.git
ninja 的README里有寫怎么編譯杉适,我就不說(shuō)了但是注意沦寂,ninja需要的re2c這個(gè)包一般需要自己下,centos7 yum可以解決淘衙,故不必?zé)馈?/p>
ninja編譯完后传藏,記得把文件夾里ninja這個(gè)文件搬運(yùn)到/usr/bin下,否則gporca找不到彤守。
等這些都做完毯侦,你終于可以開始編譯gporca了,完成后記得之前說(shuō)的刷新緩存具垫。
第三步侈离,編譯gpdb。
繞了一大圈筝蚕,終于給繞回來(lái)了卦碾,一般按照github上面的命令做就好了,如果你有特殊的要求也可以往下翻翻(不是翻我這篇文章是翻github文檔)找找其他配置項(xiàng)起宽。
到這里如果上面提到的部分都做的很好洲胖,基本上應(yīng)該不會(huì)出現(xiàn)問(wèn)題,make的時(shí)候可能出現(xiàn)權(quán)限不夠?qū)懖蝗肽承┪募A的情況坯沪,基本上改sudo就可以了绿映,但是注意不要root去開服務(wù)器,你開不起來(lái)的腐晾,官方是不允許root去架服務(wù)器的叉弦,原理很簡(jiǎn)單,程序用你的root身份到處生成文件藻糖,完事后哪個(gè)用戶有權(quán)限去修改運(yùn)行訪問(wèn)你生成的架構(gòu)淹冰,那不是平添麻煩嘛。這也是我們gpadmin存在的意義巨柒。
說(shuō)到gpadmin樱拴,我的經(jīng)驗(yàn)是不創(chuàng)造gpadmin也可以凝颇,你可以用自己的原用戶,但是注意把ssh key交換做好疹鳄,如果gpadmin出現(xiàn)無(wú)權(quán)限運(yùn)行的情況拧略,直接用原用戶執(zhí)行也可以。但是如果沒(méi)交換好ssh key那么連接出錯(cuò)是肯定架不起來(lái)的瘪弓,或者在架服務(wù)器中不斷讓你輸入密碼垫蛆,這基本也就是失敗了。
然后要補(bǔ)充的一點(diǎn)就是腺怯,如果發(fā)現(xiàn)實(shí)測(cè)中連接主服務(wù)器超時(shí)袱饭,連接不上,以防萬(wàn)一你把防火墻給閉了最好呛占。
sysctl stop firewalld (root運(yùn)行最好)
以上差不多是我走過(guò)的全部坑了虑乖,寫的比較零碎,有機(jī)會(huì)再整理吧晾虑,如果你安裝greenplum出現(xiàn)問(wèn)題也歡迎和我探討疹味。
下附參考文獻(xiàn):
https://www.cnblogs.com/qiannianyuan/p/greenplum_compile.html?(一定要看!超級(jí)大佬的詳細(xì)描述和我的經(jīng)驗(yàn)可以互補(bǔ))
https://www.cnblogs.com/GO-NO-1/p/8058603.html(ssh問(wèn)題解決和一般配置)
http://blog.chinaunix.net/uid-30401178-id-5159439.html(vm.overcommit_memory = 2解釋說(shuō)明)
剩下還有好多關(guān)于一些linux工具的用法和文件配置的文章我就不列了(我是真的記不起來(lái)了)帜篇,但是感謝他們的作者糙捺。