【趙強老師】大數據分析引擎:Presto

1、什麼是Presto?

  • 背景知識:Hive的缺點和Presto的背景

Hive使用MapReduce做爲底層計算框架,是專爲批處理設計的。但隨着數據愈來愈多,使用Hive進行一個簡單的數據查詢可能要花費幾分到幾小時,顯然不能知足交互式查詢的需求。Presto是一個分佈式SQL查詢引擎,它被設計爲用來專門進行高速、實時的數據分析。它支持標準的ANSI SQL,包括複雜查詢、聚合(aggregation)、鏈接(join)和窗口函數(window functions)。這其中有兩點就值得探究,首先是架構,其次天然是怎麼作到低延遲來支持及時交互。node

  • PRESTO是什麼?

Presto是一個開源的分佈式SQL查詢引擎,適用於交互式分析查詢,數據量支持GB到PB字節。Presto的設計和編寫徹底是爲了解決像Facebook這樣規模的商業數據倉庫的交互式分析和處理速度的問題。web

  • 它能夠作什麼?

Presto支持在線數據查詢,包括Hive, Cassandra, 關係數據庫以及專有數據存儲。 一條Presto查詢能夠將多個數據源的數據進行合併,能夠跨越整個組織進行分析。Presto以分析師的需求做爲目標,他們指望響應時間小於1秒到幾分鐘。 Presto終結了數據分析的兩難選擇,要麼使用速度快的昂貴的商業方案,要麼使用消耗大量硬件的慢速的「免費」方案。數據庫

  • 誰在使用它?

Facebook使用Presto進行交互式查詢,用於多個內部數據存儲,包括300PB的數據倉庫。 天天有1000多名Facebook員工使用Presto,執行查詢次數超過30000次,掃描數據總量超過1PB。領先的互聯網公司包括Airbnb和Dropbox都在使用Presto。服務器

2、Presto的體系架構

Presto是一個運行在多臺服務器上的分佈式系統。 完整安裝包括一個coordinator和多個worker。 由客戶端提交查詢,從Presto命令行CLI提交到coordinator。 coordinator進行解析,分析並執行查詢計劃,而後分發處理隊列到worker。架構

 

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交互讀取數據。框架

3、安裝Presto Server

  • 安裝介質
presto-cli-0.217-executable.jar
presto-server-0.217.tar.gz 
  • 安裝配置Presto Server

  一、解壓安裝包jvm

tar -zxvf presto-server-0.217.tar.gz -C ~/training/

   二、建立etc目錄分佈式

cd ~/training/presto-server-0.217/
mkdir etc

  三、須要在etc目錄下包含如下配置文件函數

Node Properties: 節點的配置信息
JVM Config: 命令行工具的JVM配置參數
Config Properties: Presto Server的配置參數
Catalog Properties: 數據源(Connectors)的配置參數
Log Properties:日誌參數配置
  • 編輯node.properties
#集羣名稱。全部在同一個集羣中的Presto節點必須擁有相同的集羣名稱。
node.environment=production
 
#每一個Presto節點的惟一標示。每一個節點的node.id都必須是惟一的。在Presto進行重啓或者升級過程當中每一個節點的node.id必須保持不變。若是在一個節點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節點),那麼每一個Presto節點必須擁有惟一的node.id。
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 
 
# 數據存儲目錄的位置(操做系統上的路徑)。Presto將會把日期和數據存儲在這個目錄下。
node.data-dir=/root/training/presto-server-0.217/data
  • 編輯jvm.config

因爲OutOfMemoryError將會致使JVM處於不一致狀態,因此遇到這種錯誤的時候咱們通常的處理措施就是收集dump headp中的信息(用於debugging),而後強制終止進程。Presto會將查詢編譯成字節碼文件,所以Presto會生成不少class,所以咱們咱們應該增大Perm區的大小(在Perm中主要存儲class)而且要容許Jvm class unloading。工具

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
  • 編輯config.properties

    coordinator的配置

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://192.168.157.226:8080

    workers的配置

coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://192.168.157.226: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
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://192.168.157.226:8080

    參數說明:

  • 編輯log.properties

    配置日誌級別。

com.facebook.presto=INFO
  • 配置Catalog Properties

Presto經過connectors訪問數據。這些connectors掛載在catalogs上。 connector能夠提供一個catalog中全部的schema和表。例如:Hive connector 將每一個hive的database都映射成爲一個schema,因此若是hive connector掛載到了名爲hive的catalog, 而且在hive的web有一張名爲clicks的表, 那麼在Presto中能夠經過hive.web.clicks來訪問這張表。經過在etc/catalog目錄下建立catalog屬性文件來完成catalogs的註冊。 若是要建立hive數據源的鏈接器,能夠建立一個etc/catalog/hive.properties文件,文件中的內容以下,完成在hivecatalog上掛載一個hiveconnector。

#註明hadoop的版本
connector.name=hive-hadoop2
 
#hive-site中配置的地址
hive.metastore.uri=thrift://192.168.157.226:9083
 
#hadoop的配置文件路徑
hive.config.resources=/root/training/hadoop-2.7.3/etc/hadoop/core-site.xml,/root/training/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

 注意:要訪問Hive的話,須要將Hive的MetaStore啓動:hive --service metastore

4、啓動Presto Server

./launcher start

5、運行presto-cli

  • 下載:presto-cli-0.217-executable.jar
  • 重命名jar包,並增長執行權限
cp presto-cli-0.217-executable.jar presto 
chmod a+x presto
  • 鏈接Presto Server
./presto --server localhost:8080 --catalog hive --schema default

6、使用Presto

  • 使用Presto操做Hive
  • 使用Presto的Web Console:端口:8080

  • 使用JDBC操做Presto

    一、須要包含的Maven依賴

<dependency>
	<groupId>com.facebook.presto</groupId>
	<artifactId>presto-jdbc</artifactId>
	<version>0.217</version>
</dependency>

    二、JDBC代碼

*******************************************************************************************

 

相關文章
相關標籤/搜索