初識Druid.io實時OLAP數據分析存儲系統


lxw1234.com網站閱讀學習Druid整理的筆記
參考鏈接:http://lxw1234.com/archives/2015/11/563.htm


一、簡介

Druid 是一個開源的,分佈式的,列存儲的,適用於實時數據分析的存儲系統,能夠快速聚合、靈活過濾、毫秒級查詢、和低延遲數據導入。

特點:

  • Druid在設計時充分考慮到了高可用性,各種節點掛掉都不會使得druid停止工作(但是狀態會無法更新);
  • Druid中的各個組成部分之間耦合性低,如果不需要實時數據完全可以忽略實時節點;
  • Druid使用Bitmap indexing加速列存儲的查詢速度,並使用CONCISE算法來對bitmap indexing進行壓縮,使得生成的segments比原始文本文件小很多;

二、整體架構

Druid集羣的構成和數據流向:
在這裏插入圖片描述
Druid 包含了五種節點 : Realtime、Historical、Coordinator、Broker、Indexer

  • Historical:歷史節點是進行存儲和查詢的“歷史”數據(非實時)的工作區,它會從深存儲區(Deep Storage)中加載數據段(Data/Segments),響應 Broker 節點的查詢請求並返回結果。歷史節點通常會在本機同步深存儲區上的部分數據段,所以即使深存儲區不可訪問了,歷史節點還是能查詢到已經同步的數據段。
  • Realtime:實時節點是進行存儲和查詢實時數據的工作區,它也會響應Broker節點的查詢請求並返回結果 。實時節點會定期地將數據建立成數據段移到歷史節點中。
  • Coordinator:協調節點可以認爲是Druid中的master,它通過Zookeeper管理歷史節點和實時節點,且通過Mysql中的metadata管理數據段。
  • Broker:節點負責響應外部的查詢請求,通過查詢Zookeeper將請求分別轉發給歷史節點和實時節點,最終合併並返回查詢結果給外部, 由Broker節點通過zookeeper決定哪些歷史節點和實時節點提供服務。Broker節點使用Zookeeper來確定哪些Realtime和Historical節點的存在。
  • Indexer:索引節點負責數據導入,加載批次和實時數據到系統中,並可以修改存儲到系統中的數據 。

Druid 包含3個外部依賴 :Mysql、Deep storage、Zookeeper

  • Mysql:存儲關於Druid中的metadata而不是存儲實際數據,包含3張表:”druid_config”(通常是空的), “druid_rules”(協作節點使用的一些規則信息,比如哪個segment從哪個node去load)和“druid_segments”(存儲 每個segment的metadata信息);
  • Deep storage: 存儲segments,保存“冷數據”,Druid目前已經支持本地磁盤,NFS掛載磁盤,HDFS,S3等。Deep Storage的數據有2個來源,一個是批數據攝入, 另一個來自實時節點;
  • ZooKeeper: 被Druid用於管理當前cluster的狀態,比如記錄哪些segments從實時節點移到了歷史節點;

三、安裝和配置

參考:http://lxw1234.com/archives/2015/11/554.htm

四、數據導入

導入數據方式

  • 文件。 從HDFS, S3, 本地文件等地方導入。

  • Stream push。使用Tranquility工具實時向Druid攝入數據,這種方式通常用於Kafka, Storm, Spark Streaming等。

  • Stream pull。 從外部數據源拉取數據,不常用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章