大數(shù)據(jù)實時查詢-Presto集群部署搭建

Presto介紹

Presto是一個分布式SQL查詢引擎, 它被設(shè)計為用來專門進行高速、實時的數(shù)據(jù)分析。它支持標準的ANSI SQL,包括復(fù)雜查詢、聚合(aggregation)、連接(join)和窗口函數(shù)(window functions)。Presto的運行模型和Hive或MapReduce有著本質(zhì)的區(qū)別。Hive將查詢翻譯成多階段的MapReduce任務(wù), 一個接著一個地運行。 每一個任務(wù)從磁盤上讀取輸入數(shù)據(jù)并且將中間結(jié)果輸出到磁盤上。 然而Presto引擎沒有使用MapReduce。它使用了一個定制的查詢和執(zhí)行引擎和響應(yīng)的操作符來支持SQL的語法。除了改進的調(diào)度算法之外, 所有的數(shù)據(jù)處理都是在內(nèi)存中進行的。 不同的處理端通過網(wǎng)絡(luò)組成處理的流水線。 這樣會避免不必要的磁盤讀寫和額外的延遲。 這種流水線式的執(zhí)行模型會在同一時間運行多個數(shù)據(jù)處理段, 一旦數(shù)據(jù)可用的時候就會將數(shù)據(jù)從一個處理段傳入到下一個處理段。 這樣的方式會大大的減少各種查詢的端到端響應(yīng)時間。

Presto查詢引擎是一個Master-Slave的架構(gòu),由一個Coordinator節(jié)點,一個Discovery Server節(jié)點,多個Worker節(jié)點組成,Discovery Server通常內(nèi)嵌于Coordinator節(jié)點中。Coordinator負責解析SQL語句,生成執(zhí)行計劃,分發(fā)執(zhí)行任務(wù)給Worker節(jié)點執(zhí)行。Worker節(jié)點負責實際執(zhí)行查詢?nèi)蝿?wù)。Worker節(jié)點啟動后向Discovery Server服務(wù)注冊,Coordinator從Discovery Server獲得可以正常工作的Worker節(jié)點。如果配置了Hive Connector,需要配置一個Hive MetaStore服務(wù)為Presto提供Hive元信息,Worker節(jié)點與HDFS交互讀取數(shù)據(jù)。

image.png

Presto支持從以下版本的Hadoop中讀取Hive數(shù)據(jù):支持以下文件類型:Text, SequenceFile, RCFile, ORC

  • Apache Hadoop 1.x (hive-hadoop1)
  • Apache Hadoop 2.x (hive-hadoop2)
  • Cloudera CDH 4 (hive-cdh4)
  • Cloudera CDH 5 (hive-cdh5)

此外,需要有遠程的Hive元數(shù)據(jù)。 不支持本地或嵌入模式。 Presto不使用MapReduce,只需要HDFS.

部署安裝

https://prestodb.io/docs/current/installation/deployment.html

下載

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/

將安裝包copy至服務(wù)器

創(chuàng)建log目錄

sudo mkdir /opt/bigdata
sudo mkdir /opt/bigdata/presto
sudo mkdir /opt/bigdata/presto/data

解壓安裝包

目錄/opt/bigdata/presto/

sudo tar -zxvf /opt/bigdata/presto/presto-server-0.208.tar.gz
sudo mkdir /opt/bigdata/presto/presto-server-0.208/catalog
sudo mkdir /opt/bigdata/presto/presto-server-0.208/etc

更改用戶組

sudo chgrp -R ec2-user /opt/bigdata

sudo chown -R ec2-user /opt/bigdata

配置文件

在presto目錄下創(chuàng)建etc目錄,并在etc目錄下,創(chuàng)建以下配置文件

  1. config.properties :Presto 服務(wù)配置
  2. node.properties :環(huán)境變量配置,每個節(jié)點特定配置
  3. jvm.config :Java虛擬機的命令行選項
  4. log.properties: 允許你根據(jù)不同的日志結(jié)構(gòu)設(shè)置不同的日志級別
  5. catalog目錄 :每個連接者配置(data sources)

coordinator config.properties

包含了Presto server的所有配置信息。 每個Presto server既是一個coordinator也是一個worker。 但是在大型集群中,處于性能考慮,建議單獨用一臺機器作為 coordinator,一個coordinator的etc/config.properties應(yīng)該至少包含以下信息:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=9000
query.max-memory=30GB
query.max-total-memory-per-node=6GB
query.max-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://10.111.0.0:9000

參數(shù)說明:

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

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

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

  4. 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)存耗光

  5. 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并且使用同樣的端口

  6. discovery.uri:Discovery server的URI。由于啟用了Presto coordinator內(nèi)嵌的Discovery 服務(wù),因此這個uri就是Presto coordinator的uri。注意:這個URI一定不能以“/“結(jié)尾

worker config.properties

coordinator=false
http-server.http.port=9000
query.max-memory=30GB
query.max-total-memory-per-node=10GB
query.max-memory-per-node=2GB
discovery.uri=http://10.111.0.0:9000

node.properties

包含針對于每個節(jié)點的特定的配置信息。 一個節(jié)點就是在一臺機器上安裝的Presto實例,etc/node.properties配置文件至少包含如下配置信息

node.environment=presto
node.id=
node.data-dir=/opt/bigdata/presto/data

參數(shù)說明:

  1. node.environment: 集群名稱, 所有在同一個集群中的Presto節(jié)點必須擁有相同的集群名稱
  2. node.id: 每個Presto節(jié)點的唯一標示。每個節(jié)點的node.id都必須是唯一的。在Presto進行重啟或者升級過程中每個節(jié)點的node.id必須保持不變。如果在一個節(jié)點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節(jié)點),那么每個Presto節(jié)點必須擁有唯一的node.id
  3. node.data-dir: 數(shù)據(jù)存儲目錄的位置(操作系統(tǒng)上的路徑), Presto將會把日期和數(shù)據(jù)存儲在這個目錄下

jvm.config

包含一系列在啟動JVM的時候需要使用的命令行選項。這份配置文件的格式是:一系列的選項,每行配置一個單獨的選項。由于這些選項不在shell命令中使用。 因此即使將每個選項通過空格或者其他的分隔符分開,java程序也不會將這些選項分開,而是作為一個命令行選項處理,信息如下:

-server
-Xmx10G
-Xms10G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ReservedCodeCacheSize=150M
-XX:CMSInitiatingOccupancyFraction=70

log.properties

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

com.facebook.presto=DEBUG

配置日志等級,類似于log4j。四個等級:DEBUG,INFO,WARN,ERROR

Catalog Properties

通過在etc/catalog目錄下創(chuàng)建catalog屬性文件來完成catalogs的注冊。 例如:可以先創(chuàng)建一個etc/catalog/jmx.properties文件,文件中的內(nèi)容如下,完成在jmxcatalog上掛載一個jmxconnector

connector.name=jmx

在etc/catalog目錄下創(chuàng)建hive.properties,信息如下:

connector.name=hive-hadoop2
hive.metastore.uri=thrift://10.111.0.0:9083
hive.config.resources=/opt/bigdata/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml, /opt/bigdata/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml
hive.allow-drop-table=true

啟動

在安裝目錄的bin/launcher文件,就是啟動腳本。Presto可以使用如下命令作為一個后臺進程啟動:

bin/launcher start

也可以在前臺運行, 可查看具體的日志

bin/launcher run

停止服務(wù)進程命令

bin/launcher stop

查看進程:

ps -aux|grep PrestoServer 或 jps

安裝cli

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/

./presto-cli-0.208-executable.jar --server 10.111.0.86:9000 --catalog hive --schema db_name;

WebUI

http://ip:9000/ui/

image.png

歡迎關(guān)注 高廣超的簡書博客 與 收藏文章 !
歡迎關(guān)注 頭條號:互聯(lián)網(wǎng)技術(shù)棧 !

個人介紹:

高廣超:多年一線互聯(lián)網(wǎng)研發(fā)與架構(gòu)設(shè)計經(jīng)驗,擅長設(shè)計與落地高可用、高性能、可擴展的互聯(lián)網(wǎng)架構(gòu)。目前從事大數(shù)據(jù)相關(guān)研發(fā)與架構(gòu)工作。

本文首發(fā)在 高廣超的簡書博客 轉(zhuǎn)載請注明!

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

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

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