presto:facebook開源的一個java寫的分佈式數據查詢框架,是一個交互式查詢引擎,原生集成了Hive、Hbase和關係型數據庫,Presto背後所使用的執行模式與Hive有根本的不一樣,它沒有使用MapReduce,大部分場景下比hive快一個數量級,其中的關鍵是全部的處理都在內存中完成。
Druid:是一個實時處理時序數據的Olap數據庫,由於它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。
spark SQL:基於spark平臺上的一個olap框架,本質上也是基於DAG的MPP, 基本思路是增長機器來並行計算,從而提升查詢速度。
kylin:核心是Cube,cube是一種預計算技術,基本思路是預先對數據做多維索引,查詢時只掃描索引而不訪問原始數據從而提速。java
跟hive架構類似sql
hive:client將查詢請求發送到hive server,它會和metastor交互,獲取表的元信息,如表的位置結構等,以後hive server會進行語法解析,解析成語法樹,變成查詢計劃,進行優化後,將查詢計劃交給執行引擎,默認是MR,而後翻譯成MR數據庫
這裏面三個服務:架構
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