Presto 的部署與連接有Kerberos認證的Hive集群

Presto是一個開源的分布式SQL查詢引擎,數據量支持GB到PB級別,主要用來處理秒級查詢的場景。其他概念性的知識點以及Presto的優(yōu)缺點這邊就不細說,開始這篇文章的重點吧~


一、準備工作

我們先在官網?https://prestodb.github.io/?里下載所需的安裝包:server、cli、jdbc-driver都下載。這邊有3臺Presto節(jié)點,1臺主節(jié)點也就是coordinator,另外2臺worker節(jié)點。(下面主節(jié)點簡稱Master,從節(jié)點簡稱Worker)

download.jpg

之后把3個安裝包放到服務器上,先解壓presto-server-0.229.tar.gz,命令是 tar -zxvf?presto-server-0.229.tar.gz -C xxx(你指定的路徑)。

二、配置文件

然后進入presto目錄,創(chuàng)建文件夾data用來存儲數據,

繼續(xù)創(chuàng)建文件夾etc用來存儲數據

進入etc目錄下,創(chuàng)建catalog/hive.properties 、jvm.config、config.properties、node.properties,這些相應的配置官網上都有教程,這邊就簡單過一下。

先打開并編輯jvm.config,這是官網推薦JVM的配置,生產環(huán)境下可以相應的更改。

-server

-Xmx16G

-XX:+UseG1GC

-XX:G1HeapRegionSize=32M

-XX:+UseGCOverheadLimit

-XX:+ExplicitGCInvokesConcurrent

-XX:+HeapDumpOnOutOfMemoryError

-XX:+ExitOnOutOfMemoryError

到這邊位置,我們先將當前節(jié)點的Presto文件夾分發(fā)到另外2臺節(jié)點,也就是說當前節(jié)點作為Master,另外2臺作為Worker。

然后編輯Master的node.properties文件


node.properties

node.environment=production

node.id=1

node.data-dir=xxxxx/presto-0.228/data

node.id 可以自定義更改,數字或是字符都可以,只要求3臺Presto節(jié)點的node.id必須不相同,所以另外2臺節(jié)點node.id記得更改,這邊另外2臺node.id分別改為2、3,node-data-dir指定到一開始創(chuàng)建的data目錄下。

接下來編輯config.properties

Master的Config.properties

Master的config.properties配置

coordinator=true

node-scheduler.include-coordinator=false

http-server.http.port=8881

query.max-memory=50GB

discovery-server.enabled=true

discovery.uri=http://主機名:8881

Worker

另外2臺worker的config.properties配置

coordinator=false

http-server.http.port=8881

query.max-memory=50GB

discovery.uri=http://主機名:8881

簡單解釋一下這里的配置

coordinator:表示這臺是否作為Master節(jié)點用來管理從節(jié)點和進行資源分配調度的作用。

node-scheduler.include-coordinator:false表示不包含工作節(jié)點,也就是這臺單獨作為Presto的管理節(jié)點不進行工作,生產環(huán)境下建議false,可以提高Presto集群性能。

http-server.http.port:表示Presto節(jié)點間通信端口8881 。

query.max-memory:表示單個查詢在整個集群的最大內存,關于內存的配置,建議根據自己的服務器資源和業(yè)務需求進行配置,Presto是基于內存的MPP框架,對內存需要有嚴格的配置,這塊建議大家在生產環(huán)境下,需要重點關注。

discovery-server.enabled:表示是否被其他Presto節(jié)點所發(fā)現。

discovery.uri:為其他節(jié)點連接主節(jié)點的地址端口,這里端口要和上面配置的端口一致。

最后編輯catalog下的hive.properties,記得確認下節(jié)點上的hive metastore服務開啟了,這里是Presto連接多種數據源的配置,如果你要連接Mysql,就去找相應的連接器配置,官網有提供案例,這邊我們連接hive。

Connector

3臺節(jié)點的hive.properties配置一致

hive.properties

connector.name=hive-hadoop2

hive.metastore.uri=thrift://元數據節(jié)點主機名:9083

三、啟動

到這一步基本配置已經好了,然后啟動3臺節(jié)點的presto服務,先啟動Master節(jié)點,在啟動Woker節(jié)點。

啟動命令:


這兩個命令的區(qū)別是run會前臺執(zhí)行,日志會打印在控制臺上,start則會在后臺運行,日志不打印在前臺,可以在data/var/log/下查看,第一次啟動建議run運行,方便查看配置狀態(tài)情況。關閉服務命令為bin/launcher stop或直接kill掉該服務進程號。


看到SERVER STARTED表示服務啟動成功。記得3臺都要啟動服務。

然后準備客戶端,將presto-cli-0.228-executable.jar放到Presto的安裝根目錄下,重命名為prestocli并賦予執(zhí)行權限chmod 777?prestocli,之后我們啟動客戶端:

./prestocli --server Master主機名:8881 --catalog hive --schema default

有時會提示Cluster is still initializing 這時候只要等一會他初始化好就可以

--server :指的是前面配置好的Master主機名和端口號

--catalog:指的是數據源類型為hive

--schema:指的是連接hive的數據庫,這里是default庫

進行簡單測試:查看表 show tables;

show tables

查找數據:select * from sqoop_executors;

假如你的集群沒有Kerberos認證,那到這里已經完成Presto的部署了,如果hive集群有Kerberos認證,就只要多配置一步----配置hive連接器,由于hive是有kerberos認證的,一般公司服務器上都已經建好主體并配好票據了,這邊不細說了,如果沒有主體和配置的話就建一個吧(我也不太深入了解kerberos,haha~),我們要做的就是指定好這個票據keytab的配置,由于hive依賴hdfs上,所以也要通過下hdfs的kerberos認證。官網上其實也有配置案例,但這部分對新人(我)來說開始有點坑,下面我會說。

hive的Kerberos支持
hive配置kerberos認證案例
hdfs認證案例

connector.name=hive-hadoop2

hive.metastore.uri=thrift:/元數據節(jié)點主機名:9083

hive.config.resources=/xxx/core-site.xml,/xxx/hdfs-site.xml

hive.metastore.authentication.type=KERBEROS

hive.metastore.service.principal=hive/_HOST@xxx.COM

hive.metastore.client.principal=票據主體名@xxx.COM

hive.metastore.client.keytab=/xxxx/票據主體名.keytab

hive.hdfs.authentication.type=KERBEROS

#hive.hdfs.impersonation.enabled=true

hive.hdfs.presto.principal=票據主體名@xxx.COM

hive.hdfs.presto.keytab=/xxxx/票據主體名.keytab

不清楚的小伙伴可以使用?klist?查看下當前你當前的主體是什么。

klist

這時候我踩過的坑來了,按道理說我們照著官網配置了 hive連接器的Kerberos,應該還會想著還有其他部分的認證吧,我當時就是這么想的,所以我把當時所有有關Kerberos認證能配的都給配了

這也是我寫著文檔的原因,我在這里面一直里里外外配置,然后也網上找了很多類似的,比如說我配置了啟動命令參數:

./prestocli

? --server

? --krb5-config-path

? --krb5-principal

? --krb5-keytab-path

? --krb5-remote-service-name

? --keystore-path

? --keystore-password

? --catalog?

? --schema

或者是配置了config.properties的:

http-server.authentication.type

http.server.authentication.krb5.service-name

http.server.authentication.krb5.keytab

http.authentication.krb5.config

http-server.https.enabled

http-server.https.port

http-server.https.keystore.path

http-server.https.keystore.key

等等。總之網上的一些的教程都讓我配置這些,可是啟動Presto連show tables 都不能顯示出表?,F在想想真的差點放棄了。果然新人搞Kerberos不懂原理超級吃虧啊。其實不管是啟動參數和config.properties的配置 都不需要在動了。我們只需要在hive.properties新增那幾項配置參數就可以了,客戶端cli和http-server這些不需要再配置。雖然官網的啟動命令是一大串,但實際上我們用最簡單的登錄方式就可以正常使用了:

./prestocli \

--server ?Master主機名:7778 \

--catalog hive \

--schema default \

--user hive

至于合理的解釋我想可能是前面我們已經在配置好了hive元數據和Kerberos的票據,所以在啟動命令上我們不需要再指定那些配置了,我們看看官網啟動客戶端的命令——

官網的客戶端連接命令

雖然我至今不知道為什么和官網的啟動有出入卻能成功,反而照著官網的命令卻不能連接。對于像我這樣第一次接觸的新人來說,雖然看官網必不可少,但一定不能太盲目,我之前始終堅信官網是對的(當然我不是否定它),從來沒有懷疑過也就導致了我失去探索的工匠精神,在出現問題時,不要一味的堅信或否定一些你認為對的事,這些事往往可能成為解決問題的良機~?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

相關閱讀更多精彩內容

友情鏈接更多精彩內容