Presto是一個運行在多台服務器上的分布式系統。 完整安裝包括一個coordinator(調度節點)和多個worker。 由客戶端提交查詢,從Presto命令行CLI提交到coordinator。 coordinator進行解析,分析並執行查詢計划,然后分發處理隊列到worker
目錄:
- 環境基本要求
- 集群規划
- 連接器
- 安裝步驟
- config.properties
- node.properties
- jvm.config
- log.properties
- Catalog Properties
- 運行presto
- 測試驗證
環境基本要求
- Linux or Mac OS X
- Java 8, 64-bit
- Python 2.4+
集群規划
- hdp1 ( 192.169.1.89) : 調度節點
- hdp2 (192.169.1.2) : worker節點
- hdp3 (192.169.1.99) : worker節點
連接器
- 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
安裝步驟
- 下載 presto-server-0.100, ( 下載地址:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.100/presto-server-0.100.tar.gz)
- 將 presto-server-0.100.tar.gz 上傳至linux主機,解壓后的文件目錄結構如下(稱為安裝目錄):Presto需要一個用於存儲日志、本地元數據等的數據目錄。 建議在安裝目錄的外面創建一個數據目錄。這樣方便Presto進行升級,如:/presto/data
- 在安裝目錄中創建一個etc目錄, 在這個etc目錄中放入以下配置文件:
- config.properties :Presto 服務配置
- node.properties :環境變量配置,每個節點特定配置
- jvm.config :Java虛擬機的命令行選項
- log.properties: 允許你根據不同的日志結構設置不同的日志級別
- catalog目錄 :每個連接者配置(data sources)
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
task.max-memory=1GB discovery-server.enabled=true discovery.uri=http://192.169.1.89:9000
-
-
coordinator:指定是否運維Presto實例作為一個coordinator(接收來自客戶端的查詢情切管理每個查詢的執行過程)
- node-scheduler.include-coordinator:是否允許在coordinator服務中進行調度工作, 對於大型的集群,在一個節點上的Presto server即作為coordinator又作為worke將會降低查詢性能。因為如果一個服務器作為worker使用,那么大部分的資源都會被worker占用,那么就不會有足夠的資源進行關鍵任務調度、管理和監控查詢執行
- http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP進行內部和外部的所有通訊
- task.max-memory=1GB:一個單獨的任務使用的最大內存 (一個查詢計划的某個執行部分會在一個特定的節點上執行)。 這個配置參數限制的GROUP BY語句中的Group的數目、JOIN關聯中的右關聯表的大小、ORDER BY語句中的行數和一個窗口函數中處理的行數。 該參數應該根據並發查詢的數量和查詢的復雜度進行調整。如果該參數設置的太低,很多查詢將不能執行;但是如果設置的太高將會導致JVM把內存耗光
- discovery-server.enabled:Presto 通過Discovery 服務來找到集群中所有的節點。為了能夠找到集群中所有的節點,每一個Presto實例都會在啟動的時候將自己注冊到discovery服務。Presto為了簡化部署,並且也不想再增加一個新的服務進程,Presto coordinator 可以運行一個內嵌在coordinator 里面的Discovery 服務。這個內嵌的Discovery 服務和Presto共享HTTP server並且使用同樣的端口
- 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=1GB discovery.uri=http://192.169.1.89:9000 -
如果用一台機器進行測試,那么這一台機器將會即作為coordinator,也作為worker。配置文件將會如下所示:
coordinator=true node-scheduler.include-coordinator=true http-server.http.port=9000
task.max-memory=1GB discovery-server.enabled=true discovery.uri=http://192.169.1.89:9000
node.properties
- 包含針對於每個節點的特定的配置信息。 一個節點就是在一台機器上安裝的Presto實例,etc/node.properties配置文件至少包含如下配置信息
node.environment=test
node.id=ffffffff-ffff-ffff-ffff-ffffffffff01 node.data-dir=/presto/data
-
node.environment: 集群名稱, 所有在同一個集群中的Presto節點必須擁有相同的集群名稱
- node.id: 每個Presto節點的唯一標示。每個節點的node.id都必須是唯一的。在Presto進行重啟或者升級過程中每個節點的node.id必須保持不變。如果在一個節點上安裝多個Presto實例(例如:在同一台機器上安裝多個Presto節點),那么每個Presto節點必須擁有唯一的node.id
- node.data-dir: 數據存儲目錄的位置(操作系統上的路徑), Presto將會把日期和數據存儲在這個目錄下
jvm.config
- 包含一系列在啟動JVM的時候需要使用的命令行選項。這份配置文件的格式是:一系列的選項,每行配置一個單獨的選項。由於這些選項不在shell命令中使用。 因此即使將每個選項通過空格或者其他的分隔符分開,java程序也不會將這些選項分開,而是作為一個命令行選項處理,信息如下:
-server -Xmx16G -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -XX:ReservedCodeCacheSize=150M
-
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://192.169.1.89:9083 hive.config.resources=/etc/hadoop/2.4.2.0-258/0/core-site.xml, /etc/hadoop/2.4.2.0-258/0/hdfs-site.xml hive.allow-drop-table=true
運行presto
- 在安裝目錄的bin/launcher文件,就是啟動腳本。Presto可以使用如下命令作為一個后台進程啟動:
bin/launcher start
- 也可以在前台運行, 可查看具體的日志
bin/launcher run
- 停止服務進程命令
bin/laucher stop
- 查看進程: ps -aux|grep PrestoServer 或 jps
測試驗證
- 下載 presto-cli-0.100-executable.jar:Presto CLI為用戶提供了一個用於查詢的可交互終端窗口。CLI是一個 可執行 JAR文件, 這也就意味着你可以像UNIX終端窗口一樣來使用CLI ,下載地址(https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.100/presto-cli-0.100-executable.jar)
- 文件下載后,重名名為 presto , 使用 chmod +x 命令設置可執行權限
chmod +x /presto/presto.jar
- 在hive中查一下hive default庫中的表, 結果如下圖:
- 退出hive cli,進入presto cli
- 命令: ./presto.jar --server 192.168.1.89:9000 --catalog hive --schema default (如果要調度,可加 --debug, 紅色標識的項必須與 config.properties 配置文件中的uri 地址一致,配置的IP就用IP,機器名就用機器名)
- 命令: show tables; (查看 hive defult 庫中表結構),如下:
- 或者使用下面命令:
- ./presto.jar --server 192.168.1.89:9000 --catalog hive
- show tables from default;
- 命令: select * from web_log; (查詢上面創建Hive表的結果)
- 命令: quit; 退出presto cli