【超詳細】Apache Durid從入門到安裝詳細教程

来源:https://www.cnblogs.com/jiagooushi/archive/2022/08/26/16627356.html
-Advertisement-
Play Games

1. Durid概述 Apache Druid是一個集時間序列資料庫、數據倉庫和全文檢索系統特點於一體的分析性數據平臺。本文將帶你簡單瞭解Druid的特性,使用場景,技術特點和架構。這將有助於你選型數據存儲方案,深入瞭解Druid存儲,深入瞭解時間序列存儲等。 Apache Druid是一個高性能的 ...


file

1. Durid概述

Apache Druid是一個集時間序列資料庫、數據倉庫和全文檢索系統特點於一體的分析性數據平臺。本文將帶你簡單瞭解Druid的特性,使用場景,技術特點和架構。這將有助於你選型數據存儲方案,深入瞭解Druid存儲,深入瞭解時間序列存儲等。

Apache Druid是一個高性能的實時分析型資料庫。

1.1 為什麼使用

1.1.1 雲原生資料庫

一個現代化的雲原生,流原生,分析型資料庫

​ Druid是為快速查詢和快速攝入數據的工作流而設計的。Druid強在有強大的UI,運行時可操作查詢,和高性能併發處理。Druid可以被視為一個滿足多樣化用戶場景的數據倉庫的開源替代品。

1.1.2 輕鬆集成

輕鬆與現有的數據管道集成

​ Druid可以從消息匯流排流式獲取數據(如Kafka,Amazon Kinesis),或從數據湖批量載入文件(如HDFS,Amazon S3和其他同類數據源)。

1.1.3 超高性能

比傳統方案快100倍的性能

  • Druid對數據攝入和數據查詢的基準性能測試大大超過了傳統解決方案。

  • Druid的架構融合了數據倉庫,時間序列資料庫和檢索系統最好的特性。

1.1.4 工作流

解鎖新的工作流

​ Druid為Clickstream,APM(應用性能管理系統),supply chain(供應鏈),網路遙測,數字營銷和其他事件驅動形式的場景解鎖了新的查詢方式和工作流。Druid專為實時和歷史數據的快速臨時查詢而構建。

1.1.5 多種部署方式

可以部署在AWS/GCP/Azure,混合雲,k8s和租用伺服器上

​ Druid可以部署在任Linux環境中,無論是內部環境還是雲環境。部署Druid是非常easy的:通過添加或刪減服務來擴容縮容。

1.2 使用場景

Apache Druid適用於對實時數據提取,高性能查詢和高可用要求較高的場景。因此,Druid通常被作為一個具有豐富GUI的分析系統,或者作為一個需要快速聚合的高併發API的後臺。Druid更適合面向事件數據。

1.2.1 常見的使用場景

比較常見的使用場景

1.2.1.1 用戶活動和行為

​ Druid經常用在點擊流,訪問流,和活動流數據上。具體場景包括:衡量用戶參與度,為產品發佈追蹤A/B測試數據,並瞭解用戶使用方式。Druid可以做到精確和近似計算用戶指標,例如不重覆計數指標。這意味著,如日活用戶指標可以在一秒鐘計算出近似值(平均精度98%),以查看總體趨勢,或精確計算以展示給利益相關者。Druid可以用來做“漏斗分析”,去測量有多少用戶做了某種操作,而沒有做另一個操作。這對產品追蹤用戶註冊十分有用。

1.2.1.2 網路流

​ Druid常常用來收集和分析網路流數據。Druid被用於管理以任意屬性切分組合的流數據。Druid能夠提取大量網路流記錄,並且能夠在查詢時快速對數十個屬性組合和排序,這有助於網路流分析。這些屬性包括一些核心屬性,如IP和埠號,也包括一些額外添加的強化屬性,如地理位置,服務,應用,設備和ASN。Druid能夠處理非固定模式,這意味著你可以添加任何你想要的屬性。

1.2.1.3 數字營銷

​ Druid常常用來存儲和查詢線上廣告數據。這些數據通常來自廣告服務商,它對衡量和理解廣告活動效果,點擊穿透率,轉換率(消耗率)等指標至關重要。

​ Druid最初就是被設計成一個面向廣告數據的強大的面向用戶的分析型應用程式。在存儲廣告數據方面,Druid已經有大量生產實踐,全世界有大量用戶在上千台伺服器上存儲了PB級數據。

1.2.1.4 應用性能管理

​ Druid常常用於追蹤應用程式生成的可運營數據。和用戶活動使用場景類似,這些數據可以是關於用戶怎樣和應用程式交互的,它可以是應用程式自身上報的指標數據。Druid可用於下鑽發現應用程式不同組件的性能如何,定位瓶頸,和發現問題。

​ 不像許多傳統解決方案,Druid具有更小存儲容量,更小複雜度,更大數據吞吐的特點。它可以快速分析數以千計屬性的應用事件,並計算複雜的載入,性能,利用率指標。比如,基於百分之95查詢延遲的API終端。我們可以以任何臨時屬性組織和切分數據,如以天為時間切分數據,如以用戶畫像統計,如按數據中心位置統計。

1.2.1.5 物聯網和設備指標

​ Driud可以作為時間序列資料庫解決方案,來存儲處理伺服器和設備的指標數據。收集機器生成的實時數據,執行快速臨時的分析,去估量性能,優化硬體資源,和定位問題。

​ 和許多傳統時間序列資料庫不同,Druid本質上是一個分析引擎,Druid融合了時間序列資料庫,列式分析資料庫,和檢索系統的理念。它在單個系統中支持了基於時間分區,列式存儲,和搜索索引。這意味著基於時間的查詢,數字聚合,和檢索過濾查詢都會特別快。

​ 你可以在你的指標中包括百萬唯一維度值,並隨意按任何維度組合group和filter(Druid 中的 dimension維度類似於時間序列資料庫中的tag)。你可以基於tag group和rank,並計算大量複雜的指標。而且你在tag上檢索和過濾會比傳統時間序列資料庫更快。

1.2.1.6 OLAP和商業智能

​ Druid經常用於商業智能場景。公司部署Druid去加速查詢和增強應用。和基於Hadoop的SQL引擎(如Presto或Hive)不同,Druid為高併發和亞秒級查詢而設計,通過UI強化互動式數據查詢。這使得Druid更適合做真實的可視化交互分析。

1.2.2 適合的場景

如果您的使用場景符合以下的幾個特征,那麼Druid是一個非常不錯的選擇:

  • 數據插入頻率比較高,但較少更新數據
  • 大多數查詢場景為聚合查詢和分組查詢(GroupBy),同時還有一定得檢索與掃描查詢
  • 將數據查詢延遲目標定位100毫秒到幾秒鐘之間
  • 數據具有時間屬性(Druid針對時間做了優化和設計)
  • 在多表場景下,每次查詢僅命中一個大的分散式表,查詢又可能命中多個較小的lookup表
  • 場景中包含高基維度數據列(例如URL,用戶ID等),並且需要對其進行快速計數和排序
  • 需要從Kafka、HDFS、對象存儲(如Amazon S3)中載入數據
1.2.3 不適合的場景

如果您的使用場景符合以下特征,那麼使用Druid可能是一個不好的選擇:

  • 根據主鍵對現有數據進行低延遲更新操作。Druid支持流式插入,但不支持流式更新(更新操作是通過後臺批處理作業完成)
  • 延遲不重要的離線數據系統
  • 場景中包括大連接(將一個大事實表連接到另一個大事實表),並且可以接受花費很長時間來完成這些查詢

2. Durid是什麼

Apache Druid 是一個開源的分散式數據存儲引擎。

​ Druid的核心設計融合了OLAP/analytic databases,timeseries database,和search systems的理念,以創造一個適用廣泛用例的統一系統。Druid將這三種系統的主要特性融合進Druid的ingestion layer(數據攝入層),storage format(存儲格式化層),querying layer(查詢層),和core architecture(核心架構)中。

file

2.1 主要特性

2.1.1 列式存儲

​ Druid單獨存儲並壓縮每一列數據。並且查詢時只查詢特定需要查詢的數據,支持快速scan,ranking和groupBy。

2.2.2 原生檢索索引

​ Druid為string值創建倒排索引以達到數據的快速搜索和過濾。

2.2.3 流式和批量數據攝入

​ 開箱即用的Apache kafka,HDFS,AWS S3連接器connectors,流式處理器。

2.2.4 靈活的數據模式

​ Druid優雅地適應不斷變化的數據模式和嵌套數據類型。

2.2.5 基於時間的優化分區

​ Druid基於時間對數據進行智能分區。因此,Druid基於時間的查詢將明顯快於傳統資料庫。

2.2.6 支持SQL語句

​ 除了原生的基於JSON的查詢外,Druid還支持基於HTTP和JDBC的SQL。

2.2.7 水平擴展能力

​ 百萬/秒的數據攝入速率,海量數據存儲,亞秒級查詢。

2.2.8 易於運維

​ 可以通過添加或移除Server來擴容和縮容。Druid支持自動重平衡,失效轉移。

2.3 技術選型

file

技術對比
Druid

​ 是一個實時處理時序數據的OLAP資料庫,它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。

Kylin

​ 核心是Cube,Cube是一種預計算技術,預先對數據作多維索引,查詢時只掃描索引而不訪問原始數據從而提速。

Presto

​ 它沒有使用MapReduce,大部分場景下比Hive快一個數量級,其中的關鍵是所有的處理都在記憶體中完成。

Impala

​ 基於記憶體運算,速度快,支持的數據源沒有Presto多。

Spark SQL

​ 基於Spark平臺上的一個OLAP框架,基本思路是增加機器來並行計算,從而提高查詢速度。

ES

​ 最大的特點是使用了倒排索引解決索引問題。根據研究,ES在數據獲取和聚集用的資源比在Druid高。

框架選型
  • 從超大數據的查詢效率來看:
    Druid > Kylin > Presto > Spark SQL
  • 從支持的數據源種類來講:
    Presto > Spark SQL > Kylin > Druid

2.4 數據攝入

​ Druid同時支持流式和批量數據攝入。Druid通常通過像Kafka這樣的消息匯流排(載入流式數據)或通過像HDFS這樣的分散式文件系統(載入批量數據)來連接原始數據源。

​ Druid通過Indexing處理將原始數據以segment的方式存儲在數據節點,segment是一種查詢優化的數據結構。

file

2.5 數據存儲

​ 像大多數分析型資料庫一樣,Druid採用列式存儲。根據不同列的數據類型(string,number等),Druid對其使用不同的壓縮和編碼方式。Druid也會針對不同的列類型構建不同類型的索引。

​ 類似於檢索系統,Druid為string列創建反向索引,以達到更快速的搜索和過濾。類似於時間序列資料庫,Druid基於時間對數據進行智能分區,以達到更快的基於時間的查詢。

​ 不像大多數傳統系統,Druid可以在數據攝入前對數據進行預聚合。這種預聚合操作被稱之為rollup,這樣就可以顯著的節省存儲成本。

file

2.6 查詢

​ Druid支持JSON-over-HTTP和SQL兩種查詢方式。除了標準的SQL操作外,Druid還支持大量的唯一性操作,利用Druid提供的演算法套件可以快速的進行計數,排名和分位數計算。

file

Drui被設計成一個健壯的系統,它需要7*24小時運行。

Druid擁有以下特性,以確保長期運行,並保證數據不丟失。

2.6.1 數據副本

​ Druid根據配置的副本數創建多個數據副本,所以單機失效不會影響Druid的查詢。

2.6.2 獨立服務

​ Druid清晰的命名每一個主服務,每一個服務都可以根據使用情況做相應的調整。服務可以獨立失敗而不影響其他服務的正常運行。例如,如果數據攝入服務失效了,將沒有新的數據被載入進系統,但是已經存在的數據依然可以被查詢。

2.6.3 自動數據備份

​ Druid自動備份所有已經indexed的數據到一個文件系統,它可以是分散式文件系統,如HDFS。你可以丟失所有Druid集群的數據,並快速從備份數據中重新載入。

2.6.4 滾動更新

​ 通過滾動更新,你可以在不停機的情況下更新Druid集群,這樣對用戶就是無感知的。所有Druid版本都是向後相容。

3. 安裝部署

3.1 環境介紹

3.1.1 Durid埠列表

以下是Durid預設的埠列表,防止因為埠占用導致伺服器啟動失敗

角色 介紹
Coordinator 8081 管理集群上的數據可用性
Historical 8083 存儲歷史查詢到的數據
Broker 8082 處理來自外部客戶端的查詢請求
Realtime 8084
Overlord 8090 控制數據攝取工作負載的分配
MiddleManager 8091 負責攝取數據
Router 8888 可以將請求路由到Brokers, Coordinators, and Overlords

3.2 安裝方式

獲取Druid安裝包有以下幾種方式

3.2.1 源代碼編譯

druid/release,主要用於定製化需求時,比如結合實際環境中的周邊依賴,或者是加入支持特定查詢的部分的優化等。

3.2.2 官網下載

​ 官網安裝包下載:download,包含Druid部署運行的最基本組件

3.2.3 Imply組合套件

Imply,該套件包含了穩定版本的Druid組件、實時數據寫入支持服務、圖形化展示查詢Web UI和SQL查詢支持組件等,目的是為更加方便、快速地部署搭建基於Druid的數據分析應用產品。

3.3 單機配置參考

3.3.1 Nano-Quickstart

1 CPU, 4GB 記憶體

  • 啟動命令: bin/start-nano-quickstart
  • 配置目錄: conf/druid/single-server/nano-quickstart
3.3.2 微型快速入門

4 CPU, 16GB 記憶體

  • 啟動命令: bin/start-micro-quickstart
  • 配置目錄: conf/druid/single-server/micro-quickstart
3.3.3 小型

8 CPU, 64GB 記憶體 (~i3.2xlarge)

  • 啟動命令: bin/start-small
  • 配置目錄: conf/druid/single-server/small
3.3.4 中型

16 CPU, 128GB 記憶體 (~i3.4xlarge)

  • 啟動命令: bin/start-medium
  • 配置目錄: conf/druid/single-server/medium
3.3.5 大型

32 CPU, 256GB 記憶體 (~i3.8xlarge)

  • 啟動命令: bin/start-large
  • 配置目錄: conf/druid/single-server/large
3.3.6 超大型

64 CPU, 512GB 記憶體 (~i3.16xlarge)

  • 啟動命令: bin/start-xlarge
  • 配置目錄: conf/druid/single-server/xlarge

3.4 單機版安裝

3.4.1 軟體要求
  • Java 8 (8u92+)
  • Linux, Mac OS X, 或者其他的類Unix OS (Windows是不支持的)
  • 安裝Docker環境
  • 安裝Docker-compose環境
3.4.2 硬體要求

Druid包括幾個單服務配置示例,以及使用這些配置啟動Druid進程的腳本。

​ 如果您在筆記本電腦等小型機器上運行以進行快速評估,那麼micro-quickstart配置是一個不錯的選擇,適用於 4CPU/16GB RAM環境。如果您計劃在教程之外使用單機部署進行進一步評估,我們建議使用比micro-quickstart更大的配置。

​ 雖然為大型單台電腦提供了示例配置,但在更高規模下,我們建議在集群部署中運行Druid,以實現容錯和減少資源爭用。

3.5 imply方式安裝

安裝推薦Imply方式,Imply方式出了提供druid組件,還有圖形化、報表等功能

3.5.1 安裝perl

因為啟動druid 需要用到perl環境,需要安裝下

yum install perl gcc kernel-devel
3.5.2 關閉防火牆
#查看防火狀態
systemctl status firewalld
#暫時關閉防火牆
systemctl stop firewalld
#永久關閉防火牆
systemctl disable firewalld

file

3.5.3 安裝JDK

選擇與自己系統相匹配的版本,我的是Centos7 64位的,所以如果是我的話我會選擇此版本,要記住的你們下載的話選擇的是以tar.gz結尾的。

3.5.3.1 下載JDK

到Oracle 官網下載jdk1.8,選擇jdk-8u301-linux-x64.tar.gz

file

將文件下載到本地後上傳到linux目錄下

3.5.3.2 上傳解壓

上傳文件

mkdir /usr/local/java

解壓目錄

tar -zxvf jdk-8u301-linux-x64.tar.gz
3.5.3.3 配置環境變數

配置環境變數,修改profile文件並加入如下內容

vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

file

3.5.3.4 生效配置
source /etc/profile
3.5.3.5 檢查環境
java -version

file

3.5.4 安裝imply
3.5.4.1 登錄Imply官網

訪問https://imply.io/get-started,進入Imply官網,查找合適的imply的版本的安裝包,並填寫簡要信息後就可以下載了

file

3.5.4.2 解壓imply

下載後上傳到伺服器,併進行解壓

# 創建imply安裝目錄
mkdir /usr/local/imply
# 解壓imply
tar -zxvf imply-2021.05-1.tar.gz
3.5.4.3 環境準備

進入imply-2021.05-1目錄後

# 進入imply目錄
cd imply-2021.05-1
3.5.4.4 快速啟動

使用本地存儲、預設元數據存儲derby,自帶zookeeper啟動,來體驗下druid

# 創建日誌目錄
mkdir logs
# 使用命令啟動
nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
3.5.4.5 查看日誌

通過quickstart.log來查看impl啟動日誌

tail -f logs/quickstart.log

file

每啟動一個服務均會列印出一條日誌。可以通過var/sv/xxx/current查看服務啟動時的日誌信息

tail -f var/sv/broker/current

file

3.5.4.6 訪問Imply

可以通過訪問9095埠來訪問imply的管理頁面

http://192.168.64.173:9095/

file

3.5.4.7 訪問Druid

訪問8888埠就可以訪問到我們的druid

http://192.168.64.173:8888/

file

本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 很多小伙伴總是問我,數據來源怎麼找啊,怎麼抓包,其實很簡單,多操作幾遍就記住了。 今天咱們通過三個案例來展示一下 某牙直播抓包 首先咱們進入目標網頁,隨便找一個視頻,通過開發者工具抓包分析。 首先按F12或者點擊右鍵選擇檢查,打開開發者工具,依次選擇 network(網路面板) → AII (全部) ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~激不激動,開不開森 ! web版的微信有專門的實時收發消息api,可以用Python直接調用,但是現在基本上登錄不了web版微信,所以就用不了了。 但這不是還有windows版的微信嗎,於是在基於前輩寫好的第三方庫,今天我們來實 ...
  • 有一個線性表,採用帶頭結點的單鏈表L來存儲,設計一個演算法將其逆置,且不能建立新節點,只能通過表中已有的節點的重新組合來完成。 ##分析:線性表中關於逆序的問題,就是用建立鏈表的頭插法.而本題要求不能建立新結點,也就不能把元素重新弄到一個表中.可以將L中的元素作為逆轉後的L的元素來源,將L->next ...
  • 1.元組的定義 元組,其實就是一個不可變的‘列表’ 用小括弧()定義,括弧內用逗號分隔開任意類型的數據,當只有一個數據時也需要加逗號 元組中的數據是不可改變指的是:數據的記憶體地址不可改變,如果元組裡是列表(可變類型),可以通過方法往列表裡增刪值!!! 2.元組的作用 按照索引/位置存放多個數據,這些 ...
  • SQL與Pandas都可以完成大部分數據分析需求。本文用SQL與Pands逐一實現10類核心數據分析需求,輕鬆進行對比學習:數據選擇、限制、統計計數、排序、新欄位生成、數據選擇、數據分組、統計均值、方差、極差/範圍。 ...
  • 在開發過程中經常會遇到 MD5、SHA1、SHA256 等詞語,這些是加密演算法嗎?嚴格意義上講,這些並不是加密演算法,而是消息摘要演算法。咱就用人聽得懂的話來聊聊“消息摘要”。 ...
  • “請你描述一下Redis的緩存淘汰策略” 你如果你正好遇到這個問題,想好怎麼回答了嗎? 關於這個問題,我把高手的回答整理到了15W字的面試文檔裡面 大家可以私信留言領取。 下麵看看高手的回答。 高手: 這個問題我需要從三個方面來回答。 第一個方面: 當Redis使用的記憶體達到maxmemory參數配 ...
  • 1.用 __new__方法 class Singleton(object): def __new__(cls): if not hasattr(cls,'_instance'): cls._instance=super(Singleton,cls).__new__(cls) # cls.__inst ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...