一、什么是即席查詢
即席查詢是用戶根據自己的需求,靈活的選擇查詢條件,系統根據用戶的選擇生成相應的統計報表。普通查應用查詢是定制開發的,即席查詢是用戶自定義查詢條件
理解:快速的執行自定義SQL(可能無法提前運算和預測)
重點關注:數據存儲格式和架構
二、Kylin
1、定義:Apache kylin是一個開源分布式分析引擎、提供Hadoop、Spark之上的SQL
查詢接口及多維分析(OLAP)能力,可以再亞秒內查詢巨大的Hive表
(還可以與BI工具集成ODBC、JDBC、RestAPI、還有自帶的Zepplin插件,來訪問Kylin服務)
2、架構
Kylin架構
a、REST 服務層:應用程序開發的入口點
b、查詢引擎層:Cube准備就緒后,與系統中的其他組件進行交互,從而向用戶返回對應的結果
c、路由層:將解析的SQL生成的執行計划轉換成Cube緩存的查詢,cube通過預計算緩存在hbase中,這些操作可以在毫秒級完成,還有一些操作使用的原始查詢,這部分延遲較高(麒麟高版本中已刪除該層)
d、元數據管理工具:kylin的元數據管理存儲在hbase中
e、任務引擎:處理所有離線任務:包括shell腳本、javaAPI以及MapReduce任務等等
三、impala
1、定義:Cloudera公司推出,提供對HDFS、Hbase數據的高性能、低延遲的交互式SQL查詢功能。基於Hive,使用內存計算,兼顧數據倉庫、具有實時、批處理、多並發等優點。
2、架構
Impala架構
從上圖可以看出,Impala自身包含三個模塊:Impalad、Statestore和Catalog,除此之外它還依賴hive Metastore和HDFS
1) Impalad:
接收client的請求、Query執行並返回給中心協調節點。
子節點上的守護進程,負責向statestore保持通信,匯報工作。
2) Catalog:
分發表的元數據信息到各個impalad中;
接收來自statestore的所有請求。
3) Statestore:
負責收集分布在集群中各個impalad進程的資源信息、各節點健康狀況,同步節點信息;
負責query的協調調度。
3、存儲和架構
四、Druid
1、定義
Druid 是一個分布式的支持實時分析的數據存儲系統,具有以下幾個特點
- 亞秒級 OLAP 查詢,包括多維過濾、Ad-hoc 的屬性分組、快速聚合數據等等。
- 實時的數據消費,真正做到數據攝入實時、查詢結果實時。
- 高效的多租戶能力,最高可以做到幾千用戶同時在線查詢。
- 擴展性強,支持 PB 級數據、千億級事件快速處理,支持每秒數千查詢並發。
- 極高的高可用保障,支持滾動升級。
實時數據分析是 Apache Druid 最典型的使用場景。該場景涵蓋的面很廣,例如:
- 實時指標監控
- 推薦模型
- 廣告平台
- 搜索模型
這些場景的特點都是擁有大量的數據,且對數據查詢的時延要求非常高。在實時指標監控中,系統問題需要在出現的一刻被檢測到並被及時給出報警。在推薦模型中,用戶行為數據需要實時采集,並及時反饋到推薦系統中。用戶幾次點擊之后系統就能夠識別其搜索意圖,並在之后的搜索中推薦更合理的結果
五、Presto
1、定義
Presto是一個開源的分布式SQL查詢引擎,適用於交互式分析查詢,數據量支持GB到PB字節。注:雖然Presto可以解析SQL,但它不是一個標准的數據庫。不是MySQL、Oracle的代替品,也不能用來處理在線事務(OLTP)
應用場景
Presto支持在線數據查詢,包括Hive,關系數據庫(MySQL、Oracle)以及專有數據存儲。一條Presto查詢可以將多個數據源的數據進行合並,可以跨越整個組織進行分析。
Presto主要用來處理響應時間小於1秒到幾分鍾的場景。
總結:
1.Druid:是一個實時處理時序數據的OLAP數據庫,因為它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。
2.Kylin:核心是Cube,Cube是一種預計算技術,基本思路是預先對數據作多維索引,查詢時只掃描索引而不訪問原始數據從而提速。
3.Presto:它沒有使用Mapreduce,大部分場景下比HIVE塊一個數量級,其中的關鍵是所有的處理都在內存中完成。
4.Impala:基於內存計算,速度快,支持的數據源沒有Presto多。
5.SparkSQL:是spark用來處理結構化的一個模塊,它提供一個抽象的數據集DataFrame,並且是作為分布式SQL查詢引擎的應用。它還可以實現Hive on Spark,hive里的數據用sparksql查詢。
6.框架選型:(1)從超大數據的查詢效率來看:
Druid>Kylin>Presto>SparkSQL
(2)從支持的數據源種類來講:
Presto>SparkSQL>Kylin>Druid