OLAP引擎:基於Druid元件進行資料統計分析

知了一笑發表於2021-04-05

一、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叢集管理

相關文章