亚洲综合图片区自拍_思思91精品国产综合在线观看_一区二区三区欧美_欧美黑人又粗又大_亚洲人成精品久久久久桥本

焦點精選!初識Druid分布式存儲系統(tǒng)

2022-12-08 18:19:39 來源:51CTO博客


(資料圖)

Druid是一個用于大數(shù)據(jù)實時查詢與分析的分布式列式數(shù)據(jù)存儲系統(tǒng)。為了應對海量數(shù)據(jù)的實時查詢和多維分析,Druid應運而生。 Druid誕生于MetaMarkets公司,而互聯(lián)網廣告分析正是MetaMarkets最重要的業(yè)務之一,基于同樣的業(yè)務需求背景,微博廣告也開始嘗試將 Druid 作為監(jiān)控平臺后端數(shù)據(jù)引擎的技術方案之一。

一、Druid特性

Druid的特性如下:

支持部分嵌套數(shù)據(jù)結構的列式存儲。 進行剪枝的分布式層級查詢。 通過索引快速過濾。 數(shù)據(jù)的實時攝入和查詢。 容錯分布式架構確保數(shù)據(jù)不丟失。 水平擴展。

二、Druid架構

1、Druid節(jié)點組成

Druid 是一個分布式系統(tǒng),由多個角色的節(jié)點組合而成,每個節(jié)點都只關心自己的工作。Druid架構示意圖如下。

實時節(jié)點:實時節(jié)點提供實時的索引服務,通過這些節(jié)點索引的數(shù)據(jù)可以立即用于查詢。實時節(jié)點將在一定時間內收集到的數(shù)據(jù)生成一個 Segment 數(shù)據(jù)文件,并將這個Segment數(shù)據(jù)文件發(fā)送到歷史節(jié)點中。通過ZooKeeper監(jiān)控傳輸和元數(shù)據(jù)庫來存儲被發(fā)送的 Segment 數(shù)據(jù)文件的元數(shù)據(jù)。發(fā)送完成后,實時節(jié)點就會丟棄被發(fā)送的 Segment數(shù)據(jù)文件。歷史節(jié)點:存儲和查詢歷史數(shù)據(jù)。歷史節(jié)點不與其他節(jié)點直接通信,而是通過與ZooKeeper保持一個長連接,實時觀察指定路徑下的新Segment數(shù)據(jù)文件信息。當歷史節(jié)點注意到 ZooKeeper 指定隊列路徑下有一個條目時,首先它會檢查本地緩存中是否存在該Segment數(shù)據(jù)文件的元信息,如果本地緩存中不存在新Segment數(shù)據(jù)文件的元信息,那么歷史節(jié)點將從ZooKeeper中讀取新Segment數(shù)據(jù)文件的元信息到本地,并根據(jù)下載到本地的Segment數(shù)據(jù)文件的元信息去Deep Storage中拉取Segment數(shù)據(jù)文件。最后,歷史節(jié)點會通過ZooKeeper向集群宣布,它將提供該Segment數(shù)據(jù)文件的查詢服務。協(xié)調節(jié)點:主要負責Segment數(shù)據(jù)文件的加載、刪除,管理Segment數(shù)據(jù)文件副本和平衡各歷史節(jié)點的Segment數(shù)據(jù)文件。協(xié)調節(jié)點根據(jù)配置文件中指定的參數(shù)定期運行,每次運行,它都會監(jiān)測集群狀態(tài),并采取相關的動作。協(xié)調節(jié)點通過 ZooKeeper 來獲取集群信息,同時還會保持與存儲可用段表和規(guī)則表的數(shù)據(jù)庫的連接。協(xié)調節(jié)點不會直接與歷史節(jié)點通信,它會根據(jù)規(guī)則、容量等信息指定歷史節(jié)點,并在 ZooKeeper 中該歷史節(jié)點的隊列路徑下生成關于 Segment 數(shù)據(jù)文件的臨時信息。歷史節(jié)點看到這些臨時信息,就會去拉取Segment數(shù)據(jù)文件。代理節(jié)點:接收客戶端的查詢請求,并路由請求到實時節(jié)點或歷史節(jié)點。代理節(jié)點通過ZooKeeper知道每個Segment數(shù)據(jù)文件存在于哪個節(jié)點上。代理節(jié)點還用于聚合每個節(jié)點返回的結果,再將聚合后的結果集返回給客戶端。代理節(jié)點還可以通過配置緩存來存儲歷史節(jié)點查詢的結果,提高了相同查詢的效率。索引服務節(jié)點:索引服務是一個高可用的分布式服務,運行與索引相關的任務。索引服務是一個主/從架構。索引服務由三個組件組成,即運行一個任務的peon組件、管理peon的Middle Manager組件和管理任務分配給Middle Manager的Overlord組件。其中Middle Manager和peon組件必須在同一個節(jié)點上。
2、外部依賴
ZooKeeper集群:用于集群服務的發(fā)現(xiàn)和當前數(shù)據(jù)拓撲的維護。 Metadata Storage:用于存儲數(shù)據(jù)文件的元數(shù)據(jù),但是不存儲實際的數(shù)據(jù)??梢允褂肕ySQL或者PostgreSQL作為Metadata Storage。Metadata Storage一般會存儲以下幾個表。 Segments Table:Segment數(shù)據(jù)文件的元信息表。 Rule Table:Segment數(shù)據(jù)文件的存儲規(guī)則表。 Config Table:配置表,用于存儲運行時的配置對象。 Task-related Table:索引服務創(chuàng)建并使用到的表。 Audit Table:審計表,用于存儲配置變化的審計歷史記錄。 Deep Storage:用于存儲Segment數(shù)據(jù)文件。
3、Segment傳輸過程

Segment傳輸過程如下圖。

實時數(shù)據(jù)寫入后的Segment傳輸流程如下:

實時節(jié)點將在一定時間內收集到的數(shù)據(jù)生成一個 Segment 數(shù)據(jù)文件,并發(fā)送到 Deep Storage,同時將該Segment數(shù)據(jù)文件的元信息發(fā)送到元數(shù)據(jù)庫中。 協(xié)調節(jié)點從元數(shù)據(jù)庫中獲取新的Segment數(shù)據(jù)文件的元信息,根據(jù)規(guī)則分配該Segment數(shù)據(jù)文件存儲的歷史節(jié)點,并將元數(shù)據(jù)寫入在ZooKeeper上創(chuàng)建的一個臨時節(jié)點中。 歷史節(jié)點從ZooKeeper的臨時節(jié)點中讀取元數(shù)據(jù),去Deep Storage中拉取指定的Segment數(shù)據(jù)文件,并刪除在ZooKeeper上創(chuàng)建的臨時節(jié)點。
4、DataSource

在Druid中,數(shù)據(jù)是存儲在每個DataSource中的,而一個DataSource就相當于MySQL的一個總表。每個DataSource都會包含下面三部分信息。

Timestamp:存儲指標的UTC時間列,可以精確到毫秒。 Dimension:存儲指標的維度列。 Metric:指標列,用來聚合計算。
5、Segment

DataSource 描述的是數(shù)據(jù)的邏輯結構,而 Segment 則體現(xiàn)了數(shù)據(jù)的物理存儲方式。Druid通過segmentGranularity參數(shù)來設置Segment劃分的時間范圍,而Druid查詢也正是通過指定的時間范圍來確認需要查詢的Segment數(shù)據(jù)文件的,減小了查詢的數(shù)據(jù)量,提高了查詢的效率。

標簽: 數(shù)據(jù)文件 元數(shù)據(jù)庫

上一篇:python django-user模型(登陸,注冊,密碼修改,注銷)
下一篇:環(huán)球速訊:【深入分析java線程池的實現(xiàn)原理】