目前最流行的大數據查詢引擎非hive莫屬,它是基于MR的類SQL查詢工具,會把輸入的查詢SQL解釋為MapReduce,能極大的降低使用大數據查詢的門檻, 讓一般的業務人員也可以直接對大數據進行查詢。但因其基于MR,運行速度是一個弊端,通常運行一個查詢需等待很久才會有結果。對于此情況,創造了hive的facebook不負眾望,創造了新神器---presto,其查詢速度平均比hive快10倍,現在就來部署體驗一下吧。
一、 準備工作
操作系統: centos7
JAVA: JDK8(155版本及以上),我使用的是jdk1.8.0_191
presto server:presto-server-0.221.tar.gz
presto client: presto-cli-0.221-executable.jar
注:
1、本次是基于hive來進行部署使用,因此相關節點已部署hadoop、hive。
2、presto官網地址為https://prestodb.github.io presto server、client及jdbc jar均可以從官網下載。
二、 部署階段
1、 將jdk、 presto server presto client 上傳至各服務器上
jdk包我上傳至/usr/local 目錄,并解壓、配置軟鏈接,配置環境變量,如不配置環境變量,也可在launcher里修改。
presto server及client上傳至 /opt/presto下,同時解壓server包。
2、各節點信息如下
其中包含一個Coordinator節點及8個worker節點。
ip |
節點角色 |
節點名 |
192.168.11.22 |
Coordinator |
node22 |
192.168.11.50 |
Worker |
node50 |
192.168.11.51 |
Worker |
node51 |
192.168.11.52 |
Worker |
node52 |
192.168.11.53 |
Worker |
node53 |
192.168.11.54 |
Worker |
node54 |
192.168.11.55 |
Worker |
node55 |
192.168.11.56 |
Worker |
node56 |
192.168.11.57 |
Worker |
node57 |
3、創建presto數據及日志目錄
以下操作各節點均相同,只有配置文件處需根據各節點情況,對應修改。
mkdir -p /data/presto
4、創建etc目錄
cd /opt/presto/presto-server-0.221
mkdir etc
5、創建所需的配置文件
(1)創建并配置 config.properties
如果是Coordinator節點,建議如下配置(內存大小根據實際情況修改)
vim config.properties
## 添加如下內容
coordinator=true
datasources=hive
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=80GB
query.max-memory-per-node=10GB
query.max-total-memory-per-node=10GB
discovery-server.enabled=true
discovery.uri=http://192.168.11.22:8080
如果是worker 節點:
vim config.properties ## 添加如下內容
coordinator=false
#datasources=hive
#node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=80GB
query.max-memory-per-node=10GB
query.max-total-memory-per-node=10GB
#discovery-server.enabled=true
discovery.uri=http://192.168.11.22:8080
參數說明:
coordinator:是否運行該實例為coordinator(接受client的查詢和管理查詢執行)。
node-scheduler.include-coordinator:coordinator是否也作為work。對于大型集群來說,在coordinator里做worker的工作會影響查詢性能。
http-server.http.port:指定HTTP端口。Presto使用HTTP來與外部和內部進行交流。
query.max-memory: 查詢能用到的最大總內存
query.max-memory-per-node: 查詢能用到的最大單結點內存
discovery-server.enabled: Presto使用Discovery服務去找到集群中的所有結點。每個Presto實例在啟動時都會在Discovery服務里注冊。這樣可以簡化部署, 不需要額外的服務,Presto的coordinator內置一個Discovery服務。也是使用HTTP端口。
discovery.uri: Discovery服務的URI。將192.168.11.22:8080替換為coordinator的host和端口。這個URI不能以斜杠結尾,這個錯誤需特別注意,不然會報404錯誤。
另外還有以下屬性:
jmx.rmiregistry.port: 指定JMX RMI的注冊。JMX client可以連接此端口
jmx.rmiserver.port: 指定JXM RMI的服務器。可通過JMX監聽。
(2)配置 jvm.config
vim jvm.config
# 添加如下內容
-server
-Xmx20G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
JVM配置文件包含啟動Java虛擬機時的命令行選項。格式是每一行是一個命令行選項。此文件數據是由shell解析,所以選項中包含空格或特殊字符會被忽略。
(3)配置log.properties
vim log.properties
# 添加如下內容
com.facebook.presto=INFO
日志級別有四種,DEBUG, INFO, WARN and ERROR。
(4)配置node.properties
vim node.properties
## 添加如下內容
node.environment=presto_ocean
node.id=node22
node.data-dir=/data/presto
參數說明:
node.environment: 環境名字,Presto集群中的結點的環境名字都必須是一樣的。
node.id: 唯一標識,每個結點的標識都必須是為一的。就算重啟或升級Presto都必須還保持原來的標識。
node.data-dir: 數據目錄,Presto用它來保存log和其他數據
(5)配置catalog及hive.properties
創建 catalog目錄,因本次使用的hive,因此在此目錄下創建hive.properties 并配置對應參數
mkdir catalog
vim hive.properties
# 添加如下內容
connector.name=hive-hadoop2
hive.metastore.uri=thrift://192.168.11.22:9083
hive.config.resources=/opt/hadoop/hadoop-3.2.0/etc/hadoop/core-site.xml,/opt/hadoop/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
hive.allow-drop-table=true
至此 相關配置文件配置完成。
三、 啟動presto-server并連接
進入/opt/presto/presto-server-0.221/bin,有launcher命令。
如果需要配置JAVA等環境變量也可以在此文件里修改。在此處修改的好處在于可以與不同版本的jdk共存 而不影響原有業務。
1、啟動presto-server
./launcher start
此時如果/data/presto/var日志生成,且無報錯信息,代表啟動正常。
2、presto-cli 連接
把下載的jar包:
presto-cli-0.221-executable.jar 重命名為:presto 并且賦予權限。
ln -s presto-cli-0.221-executable.jar presto
chmod +x presto
./presto --server localhost:8080 --catalog hive --schema default
此時可以查看到hive里的庫及表。
3、查看web界面
登錄??http://192.168.11.22:8080/ui/可查看整體狀態。??
至此,presto部署就完成了。其與hive的性能對比、工作原理及使用建議等后續有機會再介紹。