一、Druid概述
1、Druid簡介
Druid是一款基於分散式架構的OLAP引擎,支援資料寫入、低延時、高效能的資料分析,具有優秀的資料聚合能力與實時查詢能力。在大資料分析、實時計算、監控等領域都有相關的應用場景,是大資料基礎架構建設中重要元件。
與現在相對熱門的Clickhouse引擎相比,Druid對高併發的支援相對較好和穩定,但是Clickhouse在任務佇列模式中的資料查詢能力十分出色,但是對高併發支援不夠友好,需要做好很多服務監控和預警。大資料元件中OLAP引擎的選型有很多,在資料的查詢引擎層通常都具有兩種或者以上的OLAP引擎,選擇合適的元件解決業務需求是優先原則。
2、基本特點
分散式
分散式的OLAP資料引擎,資料分佈在多個服務節點中,當資料量激烈增長的時候,可以通過增加節點的方式進行水平擴容,資料在多個節點相互備份,如果單個節點出現故障,則可基於Zookeeper排程機制重新構建資料,這是分散式OLAP引擎的基本特點,在之前Clickhouse系列中也說過這個策略。
聚合查詢
主要針對時間序列資料提供低延時資料寫入和快速聚合查詢,時序資料庫特點寫入即可查詢,Druid在資料寫入時就會對資料預聚合,進而減少原始資料量,節省儲存空間並提升查詢效率;資料聚合粒度可以基於特定策略,例如分鐘、小時、天等。必須要強調Druid適合資料分析場景,並不適合單條資料主鍵查詢的業務。
列式儲存
Druid面向列的儲存方式,並且可以在叢集中進行大規模的並行查詢,這意味在只需要載入特定查詢所需要的列情況下,查詢速度可以大幅度提升。
3、基礎架構
統治者節點
即Overlord-Node,任務的管理節點,程式監視MiddleManager程式,並且是資料攝入Druid的控制器,負責將提取任務分配給MiddleManagers並協調Segement釋出。
協調節點
即Coordinator-Node,主要負責資料的管理和在歷史節點上的分佈,協調節點告訴歷史節點載入新資料、解除安裝過期資料、複製資料、和為了負載均衡移動資料。
中間管理節點
即MiddleManager-Node,攝入實時資料,已生成Segment資料檔案,可以理解為overlord節點的工作節點。
歷史節點
即Historical-Node,主要負責歷史資料儲存和查詢,接收協調節點資料載入與刪除指令,historical節點是整個叢集查詢效能的核心所在,因為historical會承擔絕大部分的segment查詢。
查詢節點
即Broker-Node,扮演著歷史節點和實時節點的查詢路由的角色,接收客戶端查詢請求,並將這些查詢轉發給Historicals和MiddleManagers,當Brokers從這些子查詢中收到結果時,它們會合並這些結果並將它們返回給呼叫者。
資料檔案儲存庫
即DeepStorage,存放生成的Segment資料檔案。
後設資料庫
即MetadataStorage,儲存Druid叢集的後設資料資訊,比如Segment的相關資訊。
協調中介軟體
即Zookeeper,為Druid叢集提供協調服務,如內部服務的監控,協調和領導者選舉。
二、Druid部署
1、安裝包
imply對druid做了整合,並提供從部署到配置到各種視覺化工具的完整的解決方案。
https://static.imply.io/release/imply-2.7.10.tar.gz
解壓並重新命名。
[root@hop01 opt]# tar -zxvf imply-2.7.10.tar.gz
[root@hop01 opt]# mv imply-2.7.10 imply2.7
2、Zookeeper配置
配置Zookeeper叢集各個節點,逗號分隔。
[root@hop01 _common]# cd /opt/imply2.7/conf/druid/_common
[root@hop01 _common]# vim common.runtime.properties
druid.zk.service.host=hop01:2181,hop02:2181,hop03:2181
關閉Zookeeper內建校驗並且不啟動。
[root@hop01 supervise]# cd /opt/imply2.7/conf/supervise
[root@hop01 supervise]# vim quickstart.conf
註釋掉如下內容:
3、服務啟動
依次啟動相關元件:Zookeeper、Hadoop相關元件,然後啟動imply服務。
[root@hop01 imply2.7]# /opt/imply2.7/bin/supervise -c /opt/imply2.7/conf/supervise/quickstart.conf
注意虛擬機器記憶體問題,在如下的目錄中Druid各個元件的JVM配置,條件不允許的話適當拉低,並且要拉高JVM相關記憶體引數。
[root@hop01 druid]# cd /opt/imply2.7/conf/druid
啟動預設埠:9095
,訪問介面如下:
三、基礎用法
1、資料來源配置
選擇上述Http的方式,基於imply提供的JSON測試檔案。
https://static.imply.io/data/wikipedia.json.gz
2、資料線上載入
執行上述:Sample and continue
。
樣本資料載入配置:
資料列的配置:
配置項總體概覽:
最後執行資料載入任務即可。
3、本地樣本載入
[root@hop01 imply2.7]# bin/post-index-task --file quickstart/wikipedia-index.json
這樣讀取兩份資料指令碼。
4、資料立方體
資料載入完成後,檢視視覺化資料立方體:
資料立方體中提供一些基礎的檢視分析,可以在多個維度上拆分資料集並進行資料分析:
5、SQL查詢
可以基於視覺化工具對Druid進行SQL查詢,語法與常用規則幾乎一樣:
SELECT COUNT(*) AS Edits FROM wikipedia;
SELECT * FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '開始' AND TIMESTAMP '結束';
SELECT page, COUNT(*) AS Edits FROM wikipedia GROUP BY page LIMIT 2;
SELECT * FROM wikipedia ORDER BY __time DESC LIMIT 5;
SELECT * FROM wikipedia LIMIT 3;
6、Segment檔案
檔案位置:
/opt/imply2.7/var/druid/segments/wikipedia/
Druid基於Segment實現對資料的切割,資料按時間的時序分佈,將不同時間範圍內的資料儲存在不同的Segment資料塊中,按時間範圍查詢資料時,可以避免全資料掃描效率可以極大的提高,同時面向列進行資料壓縮儲存,提高分析的效率。
四、原始碼地址
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent
往期推薦
☞ OLAP查詢引擎,ClickHouse叢集化管理
☞ HBase叢集環境搭建和應用案例
☞ 搜尋引擎框架,ElasticSearch叢集應用
☞ 分散式NoSQL系統,Cassandra叢集管理