大數據實時查詢-Presto集群部署搭建

大數據實時查詢-Presto集群部署搭建

Presto介紹

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

Presto查詢引擎是一個Master-Slave的架構,由一個Coordinator節點,一個Discovery Server節點,多個Worker節點組成,Discovery Server通常內嵌於Coordinator節點中。Coordinator負責解析SQL語句,生成執行計劃,分發執行任務給Worker節點執行。Worker節點負責實際執行查詢任務。Worker節點啟動後向Discovery Server服務註冊,Coordinator從Discovery Server獲得可以正常工作的Worker節點。如果配置了Hive Connector,需要配置一個Hive MetaStore服務為Presto提供Hive元信息,Worker節點與HDFS交互讀取數據。


大數據實時查詢-Presto集群部署搭建


image.png

Presto支持從以下版本的Hadoop中讀取Hive數據:支持以下文件類型: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元數據。 不支持本地或嵌入模式。 Presto不使用MapReduce,只需要HDFS.

部署安裝

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

下載

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

將安裝包copy至服務器

創建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目錄下創建etc目錄,並在etc目錄下,創建以下配置文件

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

coordinator config.properties

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

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

參數說明:

  1. coordinator:指定是否運維Presto實例作為一個coordinator(接收來自客戶端的查詢情切管理每個查詢的執行過程)
  2. node-scheduler.include-coordinator:是否允許在coordinator服務中進行調度工作, 對於大型的集群,在一個節點上的Presto server即作為coordinator又作為worke將會降低查詢性能。因為如果一個服務器作為worker使用,那麼大部分的資源都會被worker佔用,那麼就不會有足夠的資源進行關鍵任務調度、管理和監控查詢執行
  3. http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP進行內部和外部的所有通訊
  4. task.max-memory=1GB:一個單獨的任務使用的最大內存 (一個查詢計劃的某個執行部分會在一個特定的節點上執行)。 這個配置參數限制的GROUP BY語句中的Group的數目、JOIN關聯中的右關聯表的大小、ORDER BY語句中的行數和一個窗口函數中處理的行數。 該參數應該根據併發查詢的數量和查詢的複雜度進行調整。如果該參數設置的太低,很多查詢將不能執行;但是如果設置的太高將會導致JVM把內存耗光
  5. discovery-server.enabled:Presto 通過Discovery 服務來找到集群中所有的節點。為了能夠找到集群中所有的節點,每一個Presto實例都會在啟動的時候將自己註冊到discovery服務。Presto為了簡化部署,並且也不想再增加一個新的服務進程,Presto coordinator 可以運行一個內嵌在coordinator 裡面的Discovery 服務。這個內嵌的Discovery 服務和Presto共享HTTP server並且使用同樣的端口
  6. discovery.uri:Discovery server的URI。由於啟用了Presto coordinator內嵌的Discovery 服務,因此這個uri就是Presto coordinator的uri。注意:這個URI一定不能以“/“結尾

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

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

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

參數說明:

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

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

這個配置文件中允許你根據不同的日誌結構設置不同的日誌級別。每個logger都有一個名字(通常是使用logger的類的全標示類名). Loggers通過名字中的“.“來表示層級和集成關係,信息如下:

com.facebook.presto=DEBUG

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

Catalog Properties

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

connector.name=jmx

在etc/catalog目錄下創建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

停止服務進程命令

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/


大數據實時查詢-Presto集群部署搭建


image.png


歡迎關注 高廣超的簡書博客 與 收藏文章 !


分享到:


相關文章: