參考書目《Druid實時大數據分析原理與實踐》sql
Druid,中文名是德魯伊。Druid是一個分佈式的支持實時分析的數據存儲系統,Druid的設計爲分析而生,是一個分佈式的數據分析平臺。在處理數據的實時性、規模上相比傳統OLAP系統有了顯著提高。官網: http://druid.io 。Druid誕生於MetaMarkets公司(https://metamarkets.com/)。數據庫
Hadoop/Hive數據分析有個致命弱點就是速度,爲了提高速度,不少公司都嘗試過以下的查詢架構:數據結構
很明顯,相比於第4種架構,第5種直接對數據源進行流式處理,真可謂簡單、直接。架構
MetaMarkets公司爲了知足自身實時數據分析的須要,曾經嘗試過第二、3種架構,可是沒法解決下面2個問題:負載均衡
Druid的設計之初,肯定了3個原則:分佈式
下面,簡單介紹下Druid的基本概念:工具
1.數據格式:oop
Druid的每一個數據集包含3個部分: 時間列、維度列、指標列。 這三個部分是必須具有的,下邊是一個數據格式:性能
2.數據攝入:大數據
包括2種攝入方式:實時攝入和批處理攝入。
3.數據查詢
Druid原生查詢採用JSON格式,經過HTTP傳送,目前並不支持SQL(後邊組件可能支持,例如PlyQL)。
數據分析是從數據變成信息、從信息變成知識、最後從知識變爲智慧的過程。常常討論的幾個概念是 BI(商業智能) ,DM(數據挖掘)和OLAP(聯機分析處理)。OLAP是一種創建數據系統的方法,核心是構建多維度的數據立方體,以維度、度量爲基本概念,輔以元數據實現能夠鑽取、切片、切塊等靈活、系統和直觀的數據展示。
通常地,Druid、Pinot和Kylin是數據分析軟件選型常常碰到的問題。Pinot設計規範,系統也比較複雜,可是由於開源時間短,社區支持能力弱於Druid。Druid設計輕巧,代碼庫更易懂,支持比較靈活的功能加強。Kylin最大的優點是支持SQL訪問,能夠兼容傳統bi和報表工具,性能並不具優點。
傳統RDBMS爲了提升查詢速度,通常都會建立索引,那麼在數據寫入時,因爲建立索引會消耗額外的性能。也就是說,沒法作到同時保證數據攝入和數據查詢性能。而Druid卻能夠實現,這得力於其獨到的架構設計、DataSource和Segment數據結構以及系統的優秀設計和實現。
下圖爲Druid的架構圖:
實時節點(Real-time Nodes):攝入實時數據,生成Segment文件。
歷史節點(Historical Nodes):加載數據文件,支持查詢。
查詢節點(Broker Nodes):對外提供查詢服務,同時從實時和歷史節點查詢數據並回調對方。
協調節點(Coordinator Nodes):負責歷史節點的負載均衡,以及經過規則管理數據生命週期。
元數據庫(Mysql): 存儲元數據信息,例如Segment。
分佈式協調(Zookeeper):爲Druid集羣提供一致性協調服務組件。
數據文件庫(Deep Storage):存儲Segment數據文件,並供歷史節點下載。(能夠是本地磁盤,或HDFS)
Druid本質上是一個分佈式的時序數據庫。
Druid的DataSource相似於RDBMS的Table,包含時間列、維度列、指標列(第一部分已介紹)。不管是實時消費仍是批處理,druid基於DataSource結構存儲數據。druid在數據存儲時就能夠對數據進行聚合是它的一大特色。
DataSource是邏輯概念,那Segment則是一個物理存儲格式。數據橫向切割:Druid將不一樣時間範圍內的數據存儲在不一樣的Segment塊中。數據縱向切割:Segment也面向列進行數據壓縮存儲。
相似插件功能,Druid支持自身提供的pull-deps工具下載依賴到本地倉庫,來擴展Druid的功能和支持(這裏不展開了)。
實時結點經過firehose來消費實時數據,實時結點會經過Plumber模塊生成segment數據文件。
Segment文件從製造到傳播的過程以下: