1.Presto簡介說明html
Presto是一個開源的分佈式SQL查詢引擎,適用於交互式分析查詢,數據量支持GB到PB字節。node
Presto的設計和編寫徹底是爲了解決像Facebook這樣規模的商業數據倉庫的交互式分析和處理速度的問題。mysql
Presto支持在線數據查詢,包括Hive, Cassandra, 關係數據庫以及專有數據存儲。一條Presto查詢能夠將多個數據源的數據進行合併,能夠跨越整個組織進行分析。git
Presto是一個分佈式SQL查詢引擎,用於查詢分佈在一個或多個不一樣數據源中的大數據集github
Presto被設計爲數據倉庫和數據分析產品:數據分析、大規模數據彙集和生成報表。這些工做常常一般被認爲是線上分析處理操做。web
因此說,當公司業務有跨庫分析時(通常狀況是,業務數據庫分佈在各個部門),一些數據須要配合其餘部門的數據進行關聯查詢,這個時候能夠考慮Presto。可是目前,對於MySQL統計查詢在性能上有瓶頸。可考慮將數據按時間段歸檔到HDFS中,以提升統計效率。sql
若是須要對業務數據庫進行較爲實時的統計,並且不須要跨庫操做的時候,建議仍是直連數據庫。數據庫
Presto上使用SQL遇到的一些坑:https://segmentfault.com/a/1190000013120454?utm_source=tag-newestvim
Presto是一個運行在多臺服務器上的分佈式系統。 完整安裝包括一個coordinator和多個worker。 由客戶端提交查詢,從Presto命令行CLI提交到coordinator。 coordinator進行解析,分析並執行查詢計劃,而後分發處理隊列到worker。segmentfault
2.官方文檔:https://prestodb.github.io/docs/current/installation.html
3.下載:wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.220/presto-server-0.220.tar.gz
4.解壓,建立文件夾及文件
cd /data/bigdata/presto && mkdir etc && touch etc/{config.properties,jvm.config,log.properties,node.properties} && mkdir etc/catalog
5.修改配置文件
vim etc/config.properties #配置屬性:Presto server的配置信息
每一個Presto server既是一個coordinator也是一個worker。 可是在大型集羣中,處於性能考慮,建議單獨用一臺機器做爲 coordinator。 一個coordinator的etc/config.properties應該至少包含如下信息: coordinator=true node-scheduler.include-coordinator=false http-server.http.port=8080 query.max-memory=50GB query.max-memory-per-node=1GB discovery-server.enabled=true discovery.uri=http://ip_地址:8080 如下是最基本的worker配置: coordinator=false http-server.http.port=8080 query.max-memory=50GB query.max-memory-per-node=1GB discovery.uri=http://ip_地址:8080 可是若是你用一臺機器進行測試,那麼這一臺機器將會即做爲coordinator,也做爲worker。配置文件將會以下所示: coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8080 query.max-memory=5GB query.max-memory-per-node=1GB discovery-server.enabled=true discovery.uri=http://ip_地址:8080
對以上配置項解析:
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。修改example.net:8080,根據你的實際環境設置該URI。注意:這個URI必定不能以「/「結尾。
vim etc/jvm.config #JVM 配置:JVM的命令行選項
-server -Xmx4G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError
vim etc/log.properties #日誌級別
com.facebook.presto=INFO
vim etc/node.properties #節點屬性:每一個節點的環境配置信息
node.environment=production #集羣名稱。全部在同一個集羣中的Presto節點必須擁有相同的集羣名稱 node.id=ffffffff-ffff-ffff-ffff-ffffffffffff #每一個Presto節點的惟一標示。每一個節點的node.id都必須是惟一的。在Presto進行重啓或者升級過程當中每一個節點的node.id必須保持不變。若是在一個節點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節點),那麼每一個Presto節點必須擁有惟一的node.id node.data-dir=/data/bigdata/presto_data #數據存儲目錄的位置,最好獨立存放,便於presto升級
vim etc/catalog/jmx.properties #Catalog屬性:configuration forConnectors(數據源)的配置信息
connector.name=jmx
vim etc/catalog/mysql.properties #數據源,鏈接mysql
connector.name=mysql connection-url=jdbc:mysql://mysql_ip:3336 connection-user=root connection-password=xxxxx
6.運行Presto
後臺運行:cd /data/bigdata/presto/bin && ./launcher start
前臺運行:cd /data/bigdata/presto/bin && ./launcher run
7.部署presto client:https://prestodb.github.io/docs/current/installation/cli.html
下載:wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.220/presto-cli-0.220-executable.jar
重命名:cp -r presto-cli-0.220-executable.jar presto-cli
賦予執行權限:chmod +x presto-cli
鏈接源數據mysql:
/data/bigdata/presto-cli --server localhost:8080 --catalog mysql --schema moodscat
參數說明:
--catalog:指定鏈接數據源,在etc/catalog/mysql.properties中的connector.name指定
--schema:指定鏈接這個數據實例的具體某個數據庫
8.執行數據查詢:
推薦用法:
鏈接全局庫:presto-cli --server localhost:8080
查詢:
select * from 文件名.庫名.代表;