presto 相關

簡介:sql

基於內存的並行計算,Facebook推出的分佈式SQL交互式查詢引擎 多個節點管道式執行
支持任意數據源 數據規模GB~PB 是一種Massively parallel processing(mpp)(大規模並行處理)模型
數據規模PB 不是把PB數據放到內存,只是在計算中拿出一部分放在內存、計算、拋出、再拿網絡

爲何要用&優勢&特色

多數據源、支持SQL、擴展性(能夠本身擴展新的connector)、混合計算(同一種數據源的不一樣庫 or表;將多個數據源的數據進行合併)、高性能、流水線(pipeline)架構

 

 

與其餘組件的關係及對比

hive

數據倉庫 交互式略弱的查詢引擎 只能訪問HDFS文件 磁盤
可是presto是沒法代替hive的分佈式

spark SQL

基於spark core mpp模式 詳細課件spark sql一文oop

kylin

cube預計算性能

Druid

時序,數據放內存 索引 預計算ui

缺點

不適合多個大表的join操做,由於presto是基於內存的,太多數據內存放不下的
若是一個presto查詢查過30分鐘,那
就kill吧,說明不適合 也違背了presto的實時初衷spa

基本概念

catalog

至關於MySQL的一個實例,插件

schema

至關於MySQL的database3d

presto查詢執行模型

  • Statement語句 其實就是輸入的SQL
  • Query 根據SQL語句生成查詢執行計劃,進而生成能夠執行的查詢(Query),一個查詢執行由Stage、Task、Driver、Split、Operator和DataSource組成
  • Stage 執行查詢階段 Stage之間是樹狀的結構 ,RootStage 將結果返回給coordinator ,SourceStage接收coordinator數據 其餘stage都有上下游 stage分爲四種 single(root)、Fixed、source、coordinator_only(DML or DDL)
  • Exchange 兩個stage數據的交換經過Exchange 兩種Exchange ;Output Buffer (生產數據的stage經過此傳給下游stage)Exchange Client (下游消費);若是stage 是source 直接經過connector 讀數據,則改stage經過Operator與connector交互
  • stage 並不會被執行,只是對執行計劃進行管理
  • Task 實際運行在worker上的
  • Driver 一個Driver處理一個split
  • Operator 一個operator表明對一個split的一種操做 operator每次只會讀取一個paged對象
  • Split 分片一個分片就是一個大的數據集中的一個小的子集
  • Page presto中處理的最小數據單元 一個page包含多個block對象,每一個block對象是個字節數據

一個查詢分解爲多個stage 每一個 stage拆分多個task,每一個task處理一個or多個split ,一個task被分解爲一個或多個Driver

硬件架構

大內存、萬兆網絡、高計算能力

軟件架構

presto 查詢引擎是一個Master-Slave的拓撲架構

 

coordinator

中心的查詢角色 接收查詢請求、解析SQL 生成執行計劃 任務調度 worker管理
coordinator進行是presto集羣的master進程

worker

執行任務的節點

connector

presto以插件形式對數據存儲層進行了抽象,它叫作鏈接器,不只包含Hadoop相關組件的鏈接器還包括RDBMS鏈接器
具體訪問哪一個數據源是經過catalog 中的XXXX.properties文件中connector.name決定的
提取數據 負責實際執行查詢計劃

discovery service

將coordinator和worker結合在一塊兒服務;
worker節點啓動後向discovery service服務註冊
coordinator經過discovery service獲取註冊的worker節點

要想使用presto 還須要客戶端 CLI客戶端 or 應用客戶端

工做原理

SQL運行過程

一、coordinator接到SQL後,經過SQL語法解析器把SQL語法解析變成一個抽象的語法樹AST,只是進行語法解析若是有錯誤此環節暴露
二、語法符合SQL語法,會通過一個邏輯查詢計劃器組件,經過connector 查詢metadata中schema 列名 列類型等,將之與抽象語法數對應起來,生成一個物理的語法樹節點 若是有類型錯誤會在此步報錯
三、若是經過,會獲得一個邏輯的查詢計劃,將其分發到分佈式的邏輯計劃器裏,進行分佈式解析,最後轉化爲一個個task
四、在每一個task裏面,會將位置信息解析出來,交給執行的plan,由plan將task分給worker執行

presto執行過程

 
 

低延遲原理

  • 基於內存的並行計算

  • 流水式計算做業

  • 本地化計算
    Presto在選擇Source任務計算節點的時候,對於每個Split,按下面的策略選擇一些minCandidates
    優先選擇與Split同一個Host的Worker節點
    若是節點不夠優先選擇與Split同一個Rack的Worker節點
    若是節點還不夠隨機選擇其餘Rack的節點

  • 動態編譯執行計劃

  • GC控制

容錯

一、若是某個worker掛了,discovery service 會通知coordinator二、對於query是沒有容錯的,一旦worker掛了,query就執行失敗了,與其在這裏容錯不如直接執行三、coordinator 和discovery service 的單點故障問題尚未解決

相關文章
相關標籤/搜索