Druid簡介


參考書目《Druid實時大數據分析原理與實踐》

1.druid概覽

Druid,中文名是德魯伊。Druid是一個分布式的支持實時分析的數據存儲系統,Druid的設計為分析而生,是一個分布式的數據分析平台。在處理數據的實時性、規模上相比傳統OLAP系統有了顯著提升。官網: http://druid.io 。Druid誕生於MetaMarkets公司(https://metamarkets.com/)。

Hadoop/Hive數據分析有個致命弱點就是速度,為了提升速度,很多公司都嘗試過如下的查詢架構:

很明顯,相比於第4種架構,第5種直接對數據源進行流式處理,真可謂簡單、直接。

 

MetaMarkets公司為了滿足自身實時數據分析的需要,曾經嘗試過第2、3種架構,但是無法解決下面2個問題:

  1. RDBMS查詢速度太慢(Mysql等全表掃描大數據量時響應時間是個問題);
  2. 不支持靈活的查詢分析能力(一般在第3種方案,需要按維度預計算、存儲在Nosql/Hbase中,以提高速度。但是,維度如果很多就是災難。Kylin就是這么做的....

 

Druid的設計之初,確定了3個原則:

  1. 快速查詢
  2. 水平擴展能力
  3. 實時分析

 下面,簡單介紹下Druid的基本概念:

1.數據格式:

Druid的每個數據集包含3個部分: 時間列、維度列、指標列。 這三個部分是必須具備的,下邊是一個數據格式:

 

2.數據攝入:

包括2種攝入方式:實時攝入批處理攝入

 

3.數據查詢

Druid原生查詢采用JSON格式,通過HTTP傳送,目前並不支持SQL(后邊組件可能支持,例如PlyQL)。

 

數據分析是從數據變成信息、從信息變成知識、最后從知識變為智慧的過程。經常討論的幾個概念是 BI(商業智能) ,DM(數據挖掘)和OLAP(聯機分析處理)。OLAP是一種建立數據系統的方法,核心是構建多維度的數據立方體,以維度、度量為基本概念,輔以元數據實現可以鑽取、切片、切塊等靈活、系統和直觀的數據展現。

一般地,Druid、Pinot和Kylin是數據分析軟件選型經常碰到的問題。Pinot設計規范,系統也比較復雜,但是因為開源時間短,社區支持能力弱於Druid。Druid設計輕巧,代碼庫更易懂,支持比較靈活的功能增強。Kylin最大的優勢是支持SQL訪問,可以兼容傳統bi和報表工具,性能並不具優勢。

 

2.druid架構

傳統RDBMS為了提高查詢速度,一般都會創建索引,那么在數據寫入時,由於創建索引會消耗額外的性能。也就是說,無法做到同時保證數據攝入和數據查詢性能。而Druid卻可以實現,這得力於其獨到的架構設計、DataSource和Segment數據結構以及系統的優秀設計和實現。

 

2.1 整體架構:

下圖為Druid的架構圖:

 

實時節點(Real-time Nodes):攝入實時數據,生成Segment文件。

歷史節點(Historical Nodes):加載數據文件,支持查詢。

查詢節點(Broker Nodes):對外提供查詢服務,同時從實時和歷史節點查詢數據並回調對方。

協調節點(Coordinator Nodes):負責歷史節點的負載均衡,以及通過規則管理數據生命周期。

元數據庫(Mysql): 存儲元數據信息,例如Segment。

分布式協調(Zookeeper):為Druid集群提供一致性協調服務組件。

數據文件庫(Deep Storage):存儲Segment數據文件,並供歷史節點下載。(可以是本地磁盤,或HDFS)

 

Druid本質上是一個分布式的時序數據庫

2.2 DataSource和Segment數據結構:

Druid的DataSource類似於RDBMS的Table,包含時間列、維度列、指標列(第一部分已介紹)。無論是實時消費還是批處理,druid基於DataSource結構存儲數據。druid在數據存儲時就可以對數據進行聚合是它的一大特點。

DataSource是邏輯概念,那Segment則是一個物理存儲格式。數據橫向切割:Druid將不同時間范圍內的數據存儲在不同的Segment塊中。數據縱向切割:Segment也面向列進行數據壓縮存儲。

類似插件功能,Druid支持自身提供的pull-deps工具下載依賴到本地倉庫,來擴展Druid的功能和支持(這里不展開了)。

 

2.3 實時結點:

實時結點通過firehose來消費實時數據,實時結點會通過Plumber模塊生成segment數據文件。

Segment文件從制造到傳播的過程如下:

  1. 實時節點產出Segment數據文件,並上傳到DeepStorage中;
  2. Segment相關文件的元數據信息存放MetaStore里。
  3. Master節點(Coordinator Nodes)根據元數據信息,根據規則配置分配給符合條件的歷史節點。
  4. 實時節點丟棄該Segment數據文件,並向集群聲明不再提供該Segment數據文件的查詢服務。

 


免責聲明!

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



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