Kylin、druid、presto、impala大數據即席查詢


一、OLAP一般分為即席查詢和固化查詢

    即席查詢:用戶根據自己的需求,靈活的選擇查詢條件,系統根據用戶的選擇生成相應的統計報表。普通應用查詢是定制開發的,即席查詢是用戶自定義查詢條件,快速的執行自定義SQL(通過手寫sql完成一些臨時的數據分析需求,這類sql形式多變、邏輯復雜,對查詢時間沒有嚴格要求),無法提前運算和預測。
    固化查詢:指的是一些固化下來的取數、看數需求,通過數據產品的形式提供給用戶,從而提高數據分析和運營的效率。這類的sql固定模式,對響應時間有較高要求。

二、Kylin、druid、presto、impala簡介

       Apache kylin是一個開源分布式分析引擎、提供Hadoop、Spark之上的SQL查詢接口及多維分析(OLAP)能力,可以再亞秒內查詢巨大的Hive表,(還可以與BI工具集成ODBC、JDBC、RestAPI、還有自帶的Zepplin插件,來訪問Kylin服務)。

       kylin是一種OLAP數據引擎,支持大數據生態圈的數據分析業務,主要是通過預計算的方式將用戶設定的多維度數據立方體(cube)緩存起來,達到快速查詢的目的。應用場景應該是針對復雜sql join后的數據緩存。
核心是Cube,cube是一種預計算技術,基本思路是預先對數據作多維索引,查詢時只掃描索引而不訪問原始數據從而提速 。

       Impala是Cloudera開發開源的,Impala是Cloudera開發並開源的,能查詢存儲在HDFS和HBase中的數據。同Hive一樣,也是一種SQL on Hadoop解決方案。但Impala拋棄了MapReduce,使用更類似於傳統的MPP數據庫技術來提高查詢速度。

  •     impala可以直接查詢hdfs或hbase上的數據,可以與現有的存儲無縫對接。
  •     impala需要單獨安裝。
  •     impala提供jdbc接口和sql執行引擎,可以與現有系統集成

 Druid同kylin一樣,是采用預計算的方式。主要解決的是對於大量的基於時序的數據進行聚合查詢。數據可以實時攝入,進入到Druid后立即可查,同時數據是幾乎是不可變。通常是基於時序的事實事件,事實發生后進入Druid,外部系統就可以對該事實進行查詢。

     Druid是一個實時處理時序數據的OLAP數據庫,因為它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。 需要預計算,將數據存儲在druid的Segment文件中,占用一部分存儲資源,對sql支持不友好,需要用他自己的方言書寫 。

     做為一個分布式的支持實時分析的數據存儲系統,具有以下幾個特點

    • 亞秒級 OLAP 查詢,包括多維過濾、Ad-hoc 的屬性分組、快速聚合數據等等。
    • 實時的數據消費,真正做到數據攝入實時、查詢結果實時。
    • 高效的多租戶能力,最高可以做到幾千用戶同時在線查詢。
    • 擴展性強,支持 PB 級數據、千億級事件快速處理,支持每秒數千查詢並發。
    • 極高的高可用保障,支持滾動升級。

      實時數據分析是 Apache Druid 最典型的使用場景。該場景涵蓋的面很廣,例如:實時指標監控、推薦模型、廣告平台、搜索模型等場景。這些場景的特點都是擁有大量的數據,且對數據查詢的時延要求非常高。在實時指標監控中,系統問題需要在出現的一刻被檢測到並被及時給出報警。在推薦模型中,用戶行為數據需要實時采集,並及時反饋到推薦系統中。用戶幾次點擊之后系統就能夠識別其搜索意圖,並在之后的搜索中推薦更合理的結果。

      Presto是Facebook開源的大數據查詢引擎,為了解決hive查詢慢產生。使用java編寫,數據全部在內存中處理。
      Facebook開源的一個java寫的分布式數據查詢框架,原生集成了Hive、Hbase和關系型數據庫,Presto背后所使用的執行模式與Hive有根本的不同,它沒有使用MapReduce,大部分場景下比hive快一個數量級,其中的關鍵是所有的處理都在內存中完成。

  •     原生集成了Hive、Hbase和關系型數據庫。
  •     提供jdbc接口和sql執行引擎,可以與現有系統集成
  •     Presto支持在線數據查詢,包括Hive,關系數據庫(MySQL、Oracle)以及專有數據存儲。一條Presto查詢可以將多個數據源的數據進行合並,可以跨越整個組織進行分析
  •     Presto主要用來處理響應時間小於1秒到幾分鍾的場景。
  •     Presto是一個開源的分布式SQL查詢引擎,適用於交互式分析查詢,數據量支持GB到PB字節。注:雖然Presto可以解析SQL,但它不是一個標准的數據庫。不是MySQL、Oracle的代替品,也不能用來處理在線事務(OLTP)。

三、總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM