1.Presto是什么
Presto通過使用分布式查詢奔坟,可以快速高效的完成海量數(shù)據(jù)的查詢搭盾。如果你需要處理TB或者PB級別的數(shù)據(jù),那么你可能更希望借助于Hadoop和HDFS來完成這些數(shù)據(jù)的處理鸯隅。作為Hive和Pig(Hive和Pig都是通過MapReduce的管道流來完成HDFS數(shù)據(jù)的查詢)的替代者,Presto不僅可以訪問HDFS蝌以,也可以操作不同的數(shù)據(jù)源,包括:RDBMS和其他的數(shù)據(jù)源(例如:Cassandra)跟畅。
Presto被設(shè)計為數(shù)據(jù)倉庫和數(shù)據(jù)分析產(chǎn)品:數(shù)據(jù)分析、大規(guī)模數(shù)據(jù)聚集和生成報表晤硕。這些工作經(jīng)常通常被認為是線上分析處理操作
2.Presto安裝部署
安裝程序下載地址presto-server-0.167.tar.gz
Presto需要JDK8u92以上版本才可以運行
Presto需要一個用于存儲日志、本地元數(shù)據(jù)等的數(shù)據(jù)目錄舞箍。 建議在安裝目錄的外面創(chuàng)建一個數(shù)據(jù)目錄皆疹。這樣方便Presto進行升級
2.1配置Presto
在安裝目錄中創(chuàng)建一個etc目錄。 在這個etc目錄中放入以下配置信息:
節(jié)點屬性:每個節(jié)點的環(huán)境配置信息(node.properties)
JVM 配置:JVM的命令行選項(jvm.config)
配置屬性:Presto server的配置信息(config.properties)
Catalog屬性:configuration forConnectors(數(shù)據(jù)源)的配置信息
2.1.1 節(jié)點配置
節(jié)點屬性配置文件:etc/node.properties包含針對于每個節(jié)點的特定的配置信息。 一個節(jié)點就是在一臺機器上安裝的Presto實例晃酒。 這份配置文件一般情況下是在Presto第一次安裝的時候,由部署系統(tǒng)創(chuàng)建的贝次。 一個etc/node.properties配置文件至少包含如下配置信息:
node.environment=productionnode.id=ffffffff-ffff-ffff-ffff-ffffffffffffnode.data-dir=/var/presto/data
針對上面的配置信息描述如下:
node.environment: 集群名稱彰导。所有在同一個集群中的Presto節(jié)點必須擁有相同的集群名稱。
node.id: 每個Presto節(jié)點的唯一標(biāo)示位谋。每個節(jié)點的node.id都必須是唯一的。在Presto進行重啟或者升級過程中每個節(jié)點的node.id必須保持不變掏父。如果在一個節(jié)點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節(jié)點),那么每個Presto節(jié)點必須擁有唯一的node.id赊淑。
node.data-dir: 數(shù)據(jù)存儲目錄的位置(操作系統(tǒng)上的路徑)。Presto將會把日期和數(shù)據(jù)存儲在這個目錄下膏燃。
2.1.2 JVM配置
JVM配置文件,etc/jvm.config等龙, 包含一系列在啟動JVM的時候需要使用的命令行選項。這份配置文件的格式是:一系列的選項蛛砰,每行配置一個單獨的選項。由于這些選項不在shell命令中使用泥畅。 因此即使將每個選項通過空格或者其他的分隔符分開,java程序也不會將這些選項分開位仁,而是作為一個命令行選項處理方椎。(就像下面例子中的OnOutOfMemoryError選項)。
一個典型的etc/jvm.config配置文件如下:
-server-Xmx16G-XX:+UseConcMarkSweepGC-XX:+ExplicitGCInvokesConcurrent-XX:+CMSClassUnloadingEnabled-XX:+AggressiveOpts-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemoryError=kill -9 %p-XX:ReservedCodeCacheSize=150M
由于OutOfMemoryError將會導(dǎo)致JVM處于不一致狀態(tài)棠众,所以遇到這種錯誤的時候我們一般的處理措施就是將dump headp中的信息(用于debugging)有决,然后強制終止進程空盼。
Presto會將查詢編譯成字節(jié)碼文件,因此Presto會生成很多class揽趾,因此我們我們應(yīng)該增大Perm區(qū)的大小(在Perm中主要存儲class)并且要允許Jvm class unloading但骨。
2.1.3 配置屬性
Presto的配置文件:etc/config.properties包含了Presto server的所有配置信息。 每個Presto server既是一個coordinator也是一個worker奔缠。 但是在大型集群中校哎,處于性能考慮,建議單獨用一臺機器作為 coordinator闷哆。
一個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
但是如果你用一臺機器進行測試,那么這一臺機器將會即作為coordinator抱怔,也作為worker。配置文件將會如下所示:
coordinator=truenode-scheduler.include-coordinator=truehttp-server.http.port=8080task.max-memory=1GBdiscovery-server.enabled=truediscovery.uri=http://example.net:8080
對配置項解釋如下:
coordinator:指定是否運維Presto實例作為一個coordinator(接收來自客戶端的查詢情切管理每個查詢的執(zhí)行過程)屈留。
node-scheduler.include-coordinator:是否允許在coordinator服務(wù)中進行調(diào)度工作测蘑。對于大型的集群,在一個節(jié)點上的Presto server即作為coordinator又作為worke將會降低查詢性能碳胳。因為如果一個服務(wù)器作為worker使用,那么大部分的資源都不會被worker占用挨约,那么就不會有足夠的資源進行關(guān)鍵任務(wù)調(diào)度、管理和監(jiān)控查詢執(zhí)行诫惭。
http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP進行內(nèi)部和外部的所有通訊贝攒。
task.max-memory=1GB:一個單獨的任務(wù)使用的最大內(nèi)存 (一個查詢計劃的某個執(zhí)行部分會在一個特定的節(jié)點上執(zhí)行)。 這個配置參數(shù)限制的GROUP BY語句中的Group的數(shù)目、JOIN關(guān)聯(lián)中的右關(guān)聯(lián)表的大小荒适、ORDER BY語句中的行數(shù)和一個窗口函數(shù)中處理的行數(shù)开镣。 該參數(shù)應(yīng)該根據(jù)并發(fā)查詢的數(shù)量和查詢的復(fù)雜度進行調(diào)整。如果該參數(shù)設(shè)置的太低邪财,很多查詢將不能執(zhí)行;但是如果設(shè)置的太高將會導(dǎo)致JVM把內(nèi)存耗光树埠。
discovery-server.enabled:Presto 通過Discovery 服務(wù)來找到集群中所有的節(jié)點。為了能夠找到集群中所有的節(jié)點怎憋,每一個Presto實例都會在啟動的時候?qū)⒆约鹤缘絛iscovery服務(wù)。Presto為了簡化部署绊袋,并且也不想再增加一個新的服務(wù)進程,Presto coordinator 可以運行一個內(nèi)嵌在coordinator 里面的Discovery 服務(wù)癌别。這個內(nèi)嵌的Discovery 服務(wù)和Presto共享HTTP server并且使用同樣的端口。
discovery.uri:Discovery server的URI展姐。由于啟用了Presto coordinator內(nèi)嵌的Discovery 服務(wù),因此這個uri就是Presto coordinator的uri诞仓。修改example.net:8080,根據(jù)你的實際環(huán)境設(shè)置該URI墅拭。注意:這個URI一定不能以“/“結(jié)尾。集群中worker節(jié)點配置的URL地址是你的coordinator的地址
2.1.4 日志配置
日志配置文件:etc/log.properties舒憾。在這個配置文件中允許你根據(jù)不同的日志結(jié)構(gòu)設(shè)置不同的日志級別。每個logger都有一個名字(通常是使用logger的類的全標(biāo)示類名). Loggers通過名字中的“.“來表示層級和集成關(guān)系镀迂。 (像java里面的包). 如下面的log配置信息:
com.facebook.presto=INFO
2.1.5 Catalog屬性
Presto通過connectors訪問數(shù)據(jù)。這些connectors掛載在catalogs上探遵。 connector 可以提供一個catalog中所有的schema和表窟赏。 例如: Hive connector 將每個hive的database都映射成為一個schema涯穷, 所以如果hive connector掛載到了名為hive的catalog, 并且在hive的web有一張名為clicks的表拷况, 那么在Presto中可以通過hive.web.clicks來訪問這張表。
通過在etc/catalog目錄下創(chuàng)建catalog屬性文件來完成catalogs的注冊赚瘦。
2.1.5.1 JMX配置
可以先創(chuàng)建一個etc/catalog/jmx.properties文件,文件中的內(nèi)容如下起意,完成在jmxcatalog上掛載一個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é)點配置
worker節(jié)點配置和上面其他的配置基本一樣服爷,只需要將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é)點仍源,復(fù)制到其他節(jié)點舔涎,然后啟動就可以了
5.集群啟動
Presto沒有提供start all這種命令,所以需要每一臺機器手動啟動亡嫌,你也可以自己寫一個啟動腳本,啟動整個集群和停止整個集群
在安裝目錄的bin/launcher文件挟冠,就是啟動腳本。Presto可以使用如下命令作為一個后臺進程啟動:
bin/launcher start
另外知染,也可以在前臺運行, 日志和相關(guān)輸出將會寫入stdout/stderr(可以使用類似daemontools的工具捕捉這兩個數(shù)據(jù)流):
bin/launcher run
運行bin/launcher–help控淡,Presto將會列出支持的命令和命令行選項。 另外可以通過運行bin/launcher–verbose命令掺炭,來調(diào)試安裝是否正確。
啟動完之后涧狮,日志將會寫在var/log目錄下么夫,該目錄下有如下文件:
launcher.log: 這個日志文件由launcher創(chuàng)建肤视,并且server的stdout和stderr都被重定向到了這個日志文件中。 這份日志文件中只會有很少的信息钢颂,包括:
在server日志系統(tǒng)初始化的時候產(chǎn)生的日志和JVM產(chǎn)生的診斷和測試信息。
server.log: 這個是Presto使用的主要日志文件殊鞭。一般情況下,該文件中將會包括server初始化失敗時產(chǎn)生的相關(guān)信息操灿。這份文件會被自動輪轉(zhuǎn)和壓縮。
http-request.log: 這是HTTP請求的日志文件趾盐,包括server收到的每個HTTP請求信息,這份文件會被自動輪轉(zhuǎn)和壓縮救鲤。
備注:如果你的機器上已經(jīng)安裝了JDK6或者7的版本,你需要在launcher腳本中添加你的JAVA_HOME
6.命令行接口
命令行接口
Presto CLI為用戶提供了一個用于查詢的可交互終端窗口本缠。CLI是一個可執(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?選項運行CLI,可以看到可用的選項阶女。
默認情況下,查詢的結(jié)果是分頁的张肾。而這種分頁的實現(xiàn)不需要你去編寫什么代碼,而是通過配置一系列的配置信息來實現(xiàn)的吞瞪。你也可以通過將環(huán)境變量:PRESTO_PAGER 設(shè)置為你自己的程序名稱來自己實現(xiàn)分頁或者也可以PRESTO_PAGER 的值設(shè)置為空,從而禁止分頁
WEB監(jiān)控界面
http://:<配置的端口>/