參考書目《Druid實時大數據分析原理與實踐》
1.druid概覽
Druid,中文名是德魯伊。Druid是一個分布式的支持實時分析的數據存儲系統,Druid的設計為分析而生,是一個分布式的數據分析平台。在處理數據的實時性、規模上相比傳統OLAP系統有了顯著提升。官網: http://druid.io 。Druid誕生於MetaMarkets公司(https://metamarkets.com/)。
Hadoop/Hive數據分析有個致命弱點就是速度,為了提升速度,很多公司都嘗試過如下的查詢架構:
很明顯,相比於第4種架構,第5種直接對數據源進行流式處理,真可謂簡單、直接。
MetaMarkets公司為了滿足自身實時數據分析的需要,曾經嘗試過第2、3種架構,但是無法解決下面2個問題:
- RDBMS查詢速度太慢(Mysql等全表掃描大數據量時響應時間是個問題);
- 不支持靈活的查詢分析能力(一般在第3種方案,需要按維度預計算、存儲在Nosql/Hbase中,以提高速度。但是,維度如果很多就是災難。Kylin就是這么做的....)
Druid的設計之初,確定了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文件從制造到傳播的過程如下:
- 實時節點產出Segment數據文件,並上傳到DeepStorage中;
- Segment相關文件的元數據信息存放MetaStore里。
- Master節點(Coordinator Nodes)根據元數據信息,根據規則配置分配給符合條件的歷史節點。
- 實時節點丟棄該Segment數據文件,並向集群聲明不再提供該Segment數據文件的查詢服務。