presto 架構

presto 介紹

  • 是Facebook開源的,徹底基於內存的並⾏計算,分佈式SQL交互式查詢引擎
  • 是一種Massively parallel processing (MPP)架構,多個節點管道式執⾏
  • ⽀持任意數據源(經過擴展式Connector組件),數據規模GB~PB級
  • 使用的技術,如向量計算,動態編譯執⾏計劃,優化的ORC和Parquet Reader等
  • presto不太支持存儲過程,支持部分標準sql
  • presto的查詢速度比hive快5-10倍

presto應用場景

  • 適合:PB級海量數據複雜分析,交互式SQL查詢,⽀持跨數據源查詢
  • 不適合:多個大表的join操做,由於presto是基於內存的,多張大表在內存裏可能放不下

框架對比

presto:facebook開源的一個java寫的分佈式數據查詢框架,是一個交互式查詢引擎,原生集成了Hive、Hbase和關係型數據庫,Presto背後所使用的執行模式與Hive有根本的不一樣,它沒有使用MapReduce,大部分場景下比hive快一個數量級,其中的關鍵是全部的處理都在內存中完成。 
Druid:是一個實時處理時序數據的Olap數據庫,由於它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。 
spark SQL:基於spark平臺上的一個olap框架,本質上也是基於DAG的MPP, 基本思路是增長機器來並行計算,從而提升查詢速度。 
kylin:核心是Cube,cube是一種預計算技術,基本思路是預先對數據做多維索引,查詢時只掃描索引而不訪問原始數據從而提速。java

presto整體架構

跟hive架構類似sql

hive:client將查詢請求發送到hive server,它會和metastor交互,獲取表的元信息,如表的位置結構等,以後hive server會進行語法解析,解析成語法樹,變成查詢計劃,進行優化後,將查詢計劃交給執行引擎,默認是MR,而後翻譯成MR數據庫

presto內部架構

這裏面三個服務:架構

Coordinator是一箇中心的查詢角色,它主要的一個做用是接受查詢請求,將他們轉換成各類各樣的任務,將任務拆解後分發到多個worker去執行各類任務的節點框架

一、解析SQL語句分佈式

二、⽣成執⾏計劃優化

三、分發執⾏任務給Worker節點執⾏ui

Worker,是一個真正的計算的節點,執行任務的節點,它接收到task後,就會到對應的數據源裏面,去把數據提取出來,提取方式是經過各類各樣的connector:spa

一、負責實際執⾏查詢任務翻譯

Discovery service,是將coordinator和woker結合到一塊兒的服務:

一、Worker節點啓動後向Discovery Server服務註冊

二、Coordinator從Discovery Server得到Worker節點

coordinator和woker之間的關係是怎麼維護的呢?是經過Discovery Server,全部的worker都把本身註冊到Discovery Server上,Discovery Server是一個發現服務的service,Discovery Server發現服務以後,coordinator便知道在個人集羣中有多少個worker可以給我工做,而後我分配工做到worker時便有了根據

最後,presto是經過connector plugin獲取數據和元信息的,它不是⼀個數據存儲引擎,不須要有數據,presto爲其餘數據存儲系統提供了SQL能⼒,客戶端協議是HTTP+JSON

相關文章
相關標籤/搜索