1斜友、前言
由于presto基于內(nèi)存計(jì)算,相比較與hive(on spark)有更好的交互查詢體驗(yàn),組織決定使用presto作為主要的交互查詢工具懦底,hive作為跑批使用。有個(gè)問題就是我們ETL后的數(shù)據(jù)都是avro格式的數(shù)據(jù)罕扎,當(dāng)前我們使用的presto(0.185)暫時(shí)還不支持avro格式表的查詢操作聚唐,故需要一次整體升級(jí)操作丐重,將presto升級(jí)到0.205。
2杆查、流程描述
相較于其他服務(wù)的升級(jí)扮惦,該服務(wù)的升級(jí)相對(duì)比較麻煩一點(diǎn),主要的思路就是:停掉之前所有節(jié)點(diǎn)的presto服務(wù)亲桦;將新版本分發(fā)到各個(gè)節(jié)點(diǎn)崖蜜;配置相關(guān)環(huán)境;啟動(dòng)新版本的presto服務(wù)烙肺。中間主要用到ansible工具作為分發(fā)軟件包及相關(guān)配置的操作纳猪。所以前提條件是需要安裝ansible且配置了免登陸。
3桃笙、操作步驟
3.1 停掉所有presto服務(wù)
這里使用ansible命令:
ansible presto -m command -a "/opt/soft/presto-server-0.185/bin/launcher stop"
3.2 分發(fā)新版本軟件包
現(xiàn)將新版本的presto下載到主節(jié)點(diǎn)(192.168.49.110)然后使用ansible命令分發(fā)到各個(gè)節(jié)點(diǎn)氏堤。
下載然后分發(fā)
wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.205/presto-server-0.205.tar.gz
ansible presto -m copy -a "src=/opt/sot/presto-server-0.205.tar.gz dest=/opt/soft/"
解壓軟件包
主節(jié)點(diǎn)直接解壓
tar -zxvf presto-server-0.205.tar.gz
其他節(jié)點(diǎn)使用ansible命令解壓
ansible presto -m command -a "tar -zxvf /opt/soft/presto-server-0.205.tar.gz -C /opt/soft/"
注意點(diǎn):這里都是root用戶在操作,待會(huì)需要修改一下目錄權(quán)限以及所屬者的問題搏明。
3.3 修改相應(yīng)的配置
3.3.1 修改主節(jié)點(diǎn)的配置
將老版本的配置都拷貝過來鼠锈,修改幾個(gè)地方即可
#config.properties
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8866
query.max-memory=128GB
query.max-total-memory-per-node=8GB(注意:之前這個(gè)參數(shù)名為query.max-memory-per-node,由于版本更新官方對(duì)這個(gè)參數(shù)做了調(diào)整)
discovery-server.enabled=true
discovery.uri=http://192.168.49.110:8866
exchange.http-client.request-timeout=500s
這里配置一個(gè)worker節(jié)點(diǎn)的文件作為之后分發(fā)的源文件
#worker-config.properties
coordinator=false
http-server.http.port=8866
query.max-memory=128GB
query.max-total-memory-per-node=8GB
discovery.uri=http://192.168.49.110:8866
exchange.http-client.request-timeout=500s
還需要更改一下啟動(dòng)腳本星著,添加一下java8的環(huán)境:
vim bin/launcher
export JAVA_HOME=/opt/soft/java/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
3.3.2 接下來就是分發(fā)配置了购笆。
替換掉之前的啟動(dòng)腳本launcher
ansible presto -m command -a "rm -rf /opt/soft/presto-server-0.205/bin/launcher"
ansible presto -m copy - a "src=/opt/soft/presto-server-0.205/bin/launcher dest=/opt/soft/presto-server-0.205/bin/"
分發(fā)節(jié)點(diǎn)配置
ansible presto -m copy -a "src=/opt/soft/presto-server-0.205/etc dest=/opt/soft/presto-server-0.205"
在worker節(jié)點(diǎn)需要更改兩個(gè)地方:1、刪掉server節(jié)點(diǎn)的配置文件config.properties虚循,然后將worker-config.properties文件重命名為config.properties同欠;2、修改node.properties文件將node.id值改為本節(jié)點(diǎn)對(duì)應(yīng)的編號(hào)(注意這個(gè)值必須唯一横缔,且跟上個(gè)版本保持一致)
ansible presto -m command -a "rm -rf /opt/soft/presto-server-0.205/etc/config.properties "
ansible presto -m command -a "mv /opt/soft/presto-server-0.205/etc/worker-config.properties /opt/soft/presto-server-0.205/etc/config.properties"
修改操作就必須在每臺(tái)worker節(jié)點(diǎn)操作了铺遂。。茎刚。
3.4 上面都配置成功之后襟锐,接下來還需要更改目錄權(quán)限以及所屬者了,因?yàn)槎际且詒oot用戶在使用ansible膛锭,但是后面我們需要使用dmp用戶來啟動(dòng)服務(wù)粮坞。
ansible presto -m command -a "chown -R dmp:infra /opt/soft/presto-server-0.205"
3.5 最后就是啟動(dòng)服務(wù)了,這里最好使用ansible的Playbooks 劇本模式初狰,因?yàn)閣orker節(jié)點(diǎn)也需要使用dmp用戶來啟動(dòng)莫杈,所有需要指定用戶,原生的ansible命令暫時(shí)還不支持切換用戶執(zhí)行命令的功能跷究。
- hosts: presto # 運(yùn)行指定任務(wù)的目標(biāo)主機(jī)
remote_user: dmp # 在遠(yuǎn)程主機(jī)上執(zhí)行任務(wù)的用戶
tasks: # 任務(wù)列表
- name: start presto # 設(shè)置任務(wù)名稱姓迅,非必要
command: opt/soft/presto-server-0.205/bin/launcher start
4、驗(yàn)證升級(jí)是否成功
4.1 第一步查看每個(gè)節(jié)點(diǎn)的presto服務(wù)是否都已啟動(dòng),且都切換到0.205版本丁存。
ansible presto -m command -a "ps -ef | grep presto"
4.2 瀏覽器訪問presto主頁肩杈,查看版本以及節(jié)點(diǎn)數(shù)是否一致
5、總結(jié)
在此次升級(jí)操作過程中解寝,幾個(gè)重要的關(guān)鍵點(diǎn):1扩然、配置參數(shù)要隨著版本的更迭做相應(yīng)的調(diào)整;2聋伦、需要熟練掌握ansible夫偶,目前還處于初始階段,肯定還有比我這個(gè)更好的方式來實(shí)現(xiàn)觉增;3兵拢、presto的worker節(jié)點(diǎn)的編號(hào)必須唯一;4逾礁、服務(wù)必須都是dmp用戶啟動(dòng)的说铃,不然會(huì)報(bào)出很多權(quán)限錯(cuò)誤。