Presto介紹,使用及安裝部署

1.Presto是什么

Presto通過使用分布式查詢,可以快速高效的完成海量數(shù)據(jù)的查詢。如果你需要處理TB或者PB級(jí)別的數(shù)據(jù),那么你可能更希望借助于Hadoop和HDFS來完成這些數(shù)據(jù)的處理。作為Hive和Pig(Hive和Pig都是通過MapReduce的管道流來完成HDFS數(shù)據(jù)的查詢)的替代者,Presto不僅可以訪問HDFS,也可以操作不同的數(shù)據(jù)源,包括:RDBMS和其他的數(shù)據(jù)源(例如:Cassandra)。

Presto被設(shè)計(jì)為數(shù)據(jù)倉庫和數(shù)據(jù)分析產(chǎn)品:數(shù)據(jù)分析、大規(guī)模數(shù)據(jù)聚集和生成報(bào)表。這些工作經(jīng)常通常被認(rèn)為是線上分析處理操作

2.Presto安裝部署

安裝程序下載地址presto-server-0.167.tar.gz

Presto需要JDK8u92以上版本才可以運(yùn)行

Presto需要一個(gè)用于存儲(chǔ)日志、本地元數(shù)據(jù)等的數(shù)據(jù)目錄。 建議在安裝目錄的外面創(chuàng)建一個(gè)數(shù)據(jù)目錄。這樣方便Presto進(jìn)行升級(jí)

2.1配置Presto

在安裝目錄中創(chuàng)建一個(gè)etc目錄。 在這個(gè)etc目錄中放入以下配置信息:

節(jié)點(diǎn)屬性:每個(gè)節(jié)點(diǎn)的環(huán)境配置信息(node.properties)

JVM 配置:JVM的命令行選項(xiàng)(jvm.config)

配置屬性:Presto server的配置信息(config.properties)

Catalog屬性:configuration forConnectors(數(shù)據(jù)源)的配置信息

2.1.1 節(jié)點(diǎn)配置

節(jié)點(diǎn)屬性配置文件:etc/node.properties包含針對(duì)于每個(gè)節(jié)點(diǎn)的特定的配置信息。 一個(gè)節(jié)點(diǎn)就是在一臺(tái)機(jī)器上安裝的Presto實(shí)例。 這份配置文件一般情況下是在Presto第一次安裝的時(shí)候,由部署系統(tǒng)創(chuàng)建的。 一個(gè)etc/node.properties配置文件至少包含如下配置信息:

node.environment=productionnode.id=ffffffff-ffff-ffff-ffff-ffffffffffffnode.data-dir=/var/presto/data

針對(duì)上面的配置信息描述如下:

node.environment: 集群名稱。所有在同一個(gè)集群中的Presto節(jié)點(diǎn)必須擁有相同的集群名稱。

node.id: 每個(gè)Presto節(jié)點(diǎn)的唯一標(biāo)示。每個(gè)節(jié)點(diǎn)的node.id都必須是唯一的。在Presto進(jìn)行重啟或者升級(jí)過程中每個(gè)節(jié)點(diǎn)的node.id必須保持不變。如果在一個(gè)節(jié)點(diǎn)上安裝多個(gè)Presto實(shí)例(例如:在同一臺(tái)機(jī)器上安裝多個(gè)Presto節(jié)點(diǎn)),那么每個(gè)Presto節(jié)點(diǎn)必須擁有唯一的node.id。

node.data-dir: 數(shù)據(jù)存儲(chǔ)目錄的位置(操作系統(tǒng)上的路徑)。Presto將會(huì)把日期和數(shù)據(jù)存儲(chǔ)在這個(gè)目錄下。

2.1.2 JVM配置

JVM配置文件,etc/jvm.config, 包含一系列在啟動(dòng)JVM的時(shí)候需要使用的命令行選項(xiàng)。這份配置文件的格式是:一系列的選項(xiàng),每行配置一個(gè)單獨(dú)的選項(xiàng)。由于這些選項(xiàng)不在shell命令中使用。 因此即使將每個(gè)選項(xiàng)通過空格或者其他的分隔符分開,java程序也不會(huì)將這些選項(xiàng)分開,而是作為一個(gè)命令行選項(xiàng)處理。(就像下面例子中的OnOutOfMemoryError選項(xiàng))。

一個(gè)典型的etc/jvm.config配置文件如下:

-server-Xmx16G-XX:+UseConcMarkSweepGC-XX:+ExplicitGCInvokesConcurrent-XX:+CMSClassUnloadingEnabled-XX:+AggressiveOpts-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemoryError=kill -9 %p-XX:ReservedCodeCacheSize=150M

由于OutOfMemoryError將會(huì)導(dǎo)致JVM處于不一致狀態(tài),所以遇到這種錯(cuò)誤的時(shí)候我們一般的處理措施就是將dump headp中的信息(用于debugging),然后強(qiáng)制終止進(jìn)程。

Presto會(huì)將查詢編譯成字節(jié)碼文件,因此Presto會(huì)生成很多class,因此我們我們應(yīng)該增大Perm區(qū)的大小(在Perm中主要存儲(chǔ)class)并且要允許Jvm class unloading。

2.1.3 配置屬性

Presto的配置文件:etc/config.properties包含了Presto server的所有配置信息。 每個(gè)Presto server既是一個(gè)coordinator也是一個(gè)worker。 但是在大型集群中,處于性能考慮,建議單獨(dú)用一臺(tái)機(jī)器作為 coordinator。

一個(gè)coordinator的etc/config.properties應(yīng)該至少包含以下信息:

coordinator=truenode-scheduler.include-coordinator=falsehttp-server.http.port=8080task.max-memory=1GBdiscovery-server.enabled=truediscovery.uri=http://example.net:8080

以下是最基本的worker配置:

coordinator=falsehttp-server.http.port=8080query.max-memory=50GBquery.max-memory-per-node=1GBdiscovery.uri=http://example.net:8080

但是如果你用一臺(tái)機(jī)器進(jìn)行測(cè)試,那么這一臺(tái)機(jī)器將會(huì)即作為coordinator,也作為worker。配置文件將會(huì)如下所示:

coordinator=truenode-scheduler.include-coordinator=truehttp-server.http.port=8080task.max-memory=1GBdiscovery-server.enabled=truediscovery.uri=http://example.net:8080

對(duì)配置項(xiàng)解釋如下:

coordinator:指定是否運(yùn)維Presto實(shí)例作為一個(gè)coordinator(接收來自客戶端的查詢情切管理每個(gè)查詢的執(zhí)行過程)。

node-scheduler.include-coordinator:是否允許在coordinator服務(wù)中進(jìn)行調(diào)度工作。對(duì)于大型的集群,在一個(gè)節(jié)點(diǎn)上的Presto server即作為coordinator又作為worke將會(huì)降低查詢性能。因?yàn)槿绻粋€(gè)服務(wù)器作為worker使用,那么大部分的資源都不會(huì)被worker占用,那么就不會(huì)有足夠的資源進(jìn)行關(guān)鍵任務(wù)調(diào)度、管理和監(jiān)控查詢執(zhí)行。

http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP進(jìn)行內(nèi)部和外部的所有通訊。

task.max-memory=1GB:一個(gè)單獨(dú)的任務(wù)使用的最大內(nèi)存 (一個(gè)查詢計(jì)劃的某個(gè)執(zhí)行部分會(huì)在一個(gè)特定的節(jié)點(diǎn)上執(zhí)行)。 這個(gè)配置參數(shù)限制的GROUP BY語句中的Group的數(shù)目、JOIN關(guān)聯(lián)中的右關(guān)聯(lián)表的大小、ORDER BY語句中的行數(shù)和一個(gè)窗口函數(shù)中處理的行數(shù)。 該參數(shù)應(yīng)該根據(jù)并發(fā)查詢的數(shù)量和查詢的復(fù)雜度進(jìn)行調(diào)整。如果該參數(shù)設(shè)置的太低,很多查詢將不能執(zhí)行;但是如果設(shè)置的太高將會(huì)導(dǎo)致JVM把內(nèi)存耗光。

discovery-server.enabled:Presto 通過Discovery 服務(wù)來找到集群中所有的節(jié)點(diǎn)。為了能夠找到集群中所有的節(jié)點(diǎn),每一個(gè)Presto實(shí)例都會(huì)在啟動(dòng)的時(shí)候?qū)⒆约鹤?cè)到discovery服務(wù)。Presto為了簡(jiǎn)化部署,并且也不想再增加一個(gè)新的服務(wù)進(jìn)程,Presto coordinator 可以運(yùn)行一個(gè)內(nèi)嵌在coordinator 里面的Discovery 服務(wù)。這個(gè)內(nèi)嵌的Discovery 服務(wù)和Presto共享HTTP server并且使用同樣的端口。

discovery.uri:Discovery server的URI。由于啟用了Presto coordinator內(nèi)嵌的Discovery 服務(wù),因此這個(gè)uri就是Presto coordinator的uri。修改example.net:8080,根據(jù)你的實(shí)際環(huán)境設(shè)置該URI。注意:這個(gè)URI一定不能以“/“結(jié)尾。集群中worker節(jié)點(diǎn)配置的URL地址是你的coordinator的地址

2.1.4 日志配置

日志配置文件:etc/log.properties。在這個(gè)配置文件中允許你根據(jù)不同的日志結(jié)構(gòu)設(shè)置不同的日志級(jí)別。每個(gè)logger都有一個(gè)名字(通常是使用logger的類的全標(biāo)示類名). Loggers通過名字中的“.“來表示層級(jí)和集成關(guān)系。 (像java里面的包). 如下面的log配置信息:

com.facebook.presto=INFO

2.1.5 Catalog屬性

Presto通過connectors訪問數(shù)據(jù)。這些connectors掛載在catalogs上。 connector 可以提供一個(gè)catalog中所有的schema和表。 例如: Hive connector 將每個(gè)hive的database都映射成為一個(gè)schema, 所以如果hive connector掛載到了名為hive的catalog, 并且在hive的web有一張名為clicks的表, 那么在Presto中可以通過hive.web.clicks來訪問這張表。

通過在etc/catalog目錄下創(chuàng)建catalog屬性文件來完成catalogs的注冊(cè)。

2.1.5.1 JMX配置

可以先創(chuàng)建一個(gè)etc/catalog/jmx.properties文件,文件中的內(nèi)容如下,完成在jmxcatalog上掛載一個(gè)jmxconnector:

connector.name=jmx

2.1.5.2 hive配置

connector.name=hive-hadoop2hive.metastore.uri=thrift://dpnode03:9083hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xmlhive.allow-drop-table=truehive.storage-format=PARQUET

Connectorhttps://prestodb.io/docs/current/connector.htmlConnector連接器官方文檔

3.worker節(jié)點(diǎn)配置

worker節(jié)點(diǎn)配置和上面其他的配置基本一樣,只需要將config.properties稍作修改

coordinator=falsenode-scheduler.include-coordinator=truehttp-server.http.port=5050query.max-memory=8GBquery.max-memory-per-node=1GBdiscovery-server.enabled=truediscovery.uri=http://dpnode03:5050

4.集群安裝

集群安裝,只需要將worker節(jié)點(diǎn),復(fù)制到其他節(jié)點(diǎn),然后啟動(dòng)就可以了

5.集群?jiǎn)?dòng)

Presto沒有提供start all這種命令,所以需要每一臺(tái)機(jī)器手動(dòng)啟動(dòng),你也可以自己寫一個(gè)啟動(dòng)腳本,啟動(dòng)整個(gè)集群和停止整個(gè)集群

在安裝目錄的bin/launcher文件,就是啟動(dòng)腳本。Presto可以使用如下命令作為一個(gè)后臺(tái)進(jìn)程啟動(dòng):

bin/launcher start

另外,也可以在前臺(tái)運(yùn)行, 日志和相關(guān)輸出將會(huì)寫入stdout/stderr(可以使用類似daemontools的工具捕捉這兩個(gè)數(shù)據(jù)流):

bin/launcher run

運(yùn)行bin/launcher–help,Presto將會(huì)列出支持的命令和命令行選項(xiàng)。 另外可以通過運(yùn)行bin/launcher–verbose命令,來調(diào)試安裝是否正確。

啟動(dòng)完之后,日志將會(huì)寫在var/log目錄下,該目錄下有如下文件:

launcher.log: 這個(gè)日志文件由launcher創(chuàng)建,并且server的stdout和stderr都被重定向到了這個(gè)日志文件中。 這份日志文件中只會(huì)有很少的信息,包括:

在server日志系統(tǒng)初始化的時(shí)候產(chǎn)生的日志和JVM產(chǎn)生的診斷和測(cè)試信息。

server.log: 這個(gè)是Presto使用的主要日志文件。一般情況下,該文件中將會(huì)包括server初始化失敗時(shí)產(chǎn)生的相關(guān)信息。這份文件會(huì)被自動(dòng)輪轉(zhuǎn)和壓縮。

http-request.log: 這是HTTP請(qǐng)求的日志文件,包括server收到的每個(gè)HTTP請(qǐng)求信息,這份文件會(huì)被自動(dòng)輪轉(zhuǎn)和壓縮。

備注:如果你的機(jī)器上已經(jīng)安裝了JDK6或者7的版本,你需要在launcher腳本中添加你的JAVA_HOME

6.命令行接口

命令行接口

Presto CLI為用戶提供了一個(gè)用于查詢的可交互終端窗口。CLI是一個(gè)可執(zhí)行JAR文件, 這也就意味著你可以像UNIX終端窗口一樣來使用CLI。

下載presto-cli-0.100-executable.jar,重名名為?presto?, 使用?chmod?+x?命令設(shè)置可執(zhí)行權(quán)限,然后執(zhí)行:

./presto --server localhost:8080 --catalog hive --schema default

使用?--help?選項(xiàng)運(yùn)行CLI,可以看到可用的選項(xiàng)。

默認(rèn)情況下,查詢的結(jié)果是分頁的。而這種分頁的實(shí)現(xiàn)不需要你去編寫什么代碼,而是通過配置一系列的配置信息來實(shí)現(xiàn)的。你也可以通過將環(huán)境變量:PRESTO_PAGER 設(shè)置為你自己的程序名稱來自己實(shí)現(xiàn)分頁或者也可以PRESTO_PAGER 的值設(shè)置為空,從而禁止分頁


WEB監(jiān)控界面

http://:<配置的端口>/


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容