天天看點

druid,impala,presto對比背景引用概念參考文檔

背景

資料軌迹在湖北落地,面臨查詢分析時間過長的問題,并且查詢時間與大資料能夠配置設定的資源有直接的線性關系。需要考慮如何将資料軌迹查詢提速。

與paas的niuxl溝通,建議使用impala或者spark做查詢,于是查詢對比各種開源的OLAP引擎。

按照查詢類型劃分,OLAP一般分為即席查詢和固化查詢,

  • 即席查詢:通過手寫sql完成一些臨時的資料分析需求,這類sql形式多變、邏輯複雜,對查詢時間沒有嚴格要求
  • 固化查詢:指的是一些固化下來的取數、看數需求,通過資料産品的形式提供給使用者,進而提高資料分析和營運的效率。這類的sql固定模式,對響應時間有較高要求。

按照架構實作劃分,主流的OLAP引擎主要有下面三點:

  • MPP架構系統(Presto/Impala/SparkSQL/Drill等)。這種架構主要還是從查詢引擎入手,使用分布式查詢引擎,而不是使用hive+mapreduce架構,提高查詢效率。
  • 搜尋引擎架構的系統(es,solr等),在入庫時将資料轉換為反向索引,采用Scatter-Gather計算模型,犧牲了靈活性換取很好的性能,在搜尋類查詢上能做到亞秒級響應。但是對于掃描聚合為主的查詢,随着處理資料量的增加,響應時間也會退化到分鐘級。
  • 預計算系統(Druid/Kylin等)則在入庫時對資料進行預聚合,進一步犧牲靈活性換取性能,以實作對超大資料集的秒級響應。

資料軌迹現有的實作方式,從業務訴求看為:每賬期按照指定的查詢列取資料,進行分析未結算原因,偏向固化查詢的方式。但現有的實作方式為先按照查詢列值查詢出主表資料,再根據主表附屬表的關聯字段,擷取查詢附屬表的sql,sql為動态拼接出來,這種方式更偏向于即席查詢的實作。

需要從以下三個方面考慮架構選型:資料存儲和建構、安裝搭建、開發成本。

impala

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

  • impala可以直接查詢hdfs或hbase上的資料,可以與現有的存儲無縫對接。
  • impala需要單獨安裝,公司内paas主推。需要與現場确認。
  • impala提供jdbc接口和sql執行引擎,可以與現有系統內建

Presto

presto是Facebook開源的大資料查詢引擎,為了解決hive查詢慢産生。使用java編寫,資料全部在記憶體中處理。

  • 原生內建了Hive、Hbase和關系型資料庫。
  • 需要與現場确認是否能提供
  • 提供jdbc接口和sql執行引擎,可以與現有系統內建

druid

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

  • 需要預計算,将資料存儲在druid的Segment檔案中,占用一部分存儲資源
  • 需要與現場确認是否能提供
  • 對sql支援不友好,需要用他自己的方言書寫

kylin

kylin是一種OLAP資料引擎,支援大資料生态圈的資料分析業務,主要是通過預計算的方式将使用者設定的多元度資料立方體(cube)緩存起來,達到快速查詢的目的。應用場景應該是針對複雜sql join後的資料緩存。

這種OLAP引擎,一般包括以下幾部分:

  • 資料建構存儲:cube建構,中繼資料資訊
  • sql解析執行:Query引擎(sql解釋器),routing子產品(sql執行)
  • 上層接口服務;jdbc/odbc接口,rest服務

應用思路:将hive中的資料按照查詢列 建構成cube,存儲到hbase中,資料軌迹連接配接kylin的jdbc接口實作快速查詢。

  • 需要預計算,将資料建構成cube存儲到hbase
  • 需要與現場确認是否能提供
  • 提供jdbc接口和rest服務

redis

将要分析的資料同步到redis,在redis中快速查詢資料。可以在分析前将本月資料同步到redis。

遺留問題:

  1. 如何同步資料,如何删除上個賬期資料
  2. 用什麼做key,資料沒有主鍵,是否可以使用查詢列做key,如何從hive中将資料同步出來?

hive操作hbase

較多hive操作hbase的方法,沒有hbase操作hive資料的。

引用概念

  • Serde:序列化反序列化,serialize/deSerialize
  • MPP:大規模并行處理技術(Massively Parallel Processor)

參考文檔

  • Apache Kylin在美團點評的應用(https://zhuanlan.zhihu.com/p/27461561)
  • presto、druid、sparkSQL、kylin的對比分析(https://www.zhihu.com/question/41541395)
  • 盤點SQL on Hadoop中用到的主要技術(http://sunyi514.github.io/2014/11/15/盤點sql-on-hadoop中用到的主要技術/)
  • Druid(準)實時分析統計資料庫——列存儲+高效壓縮(https://www.cnblogs.com/bonelee/p/6248172.html)

繼續閱讀