Doris 簡介
Doris 概述
Apache Doris 由百度大資料部研發 (之前叫百度 Palo,2018 年貢獻到 Apache 社區后,更名為 Doris), 在百度內部,有超過 200 個產品線在使用,部署機器超過 1000 臺,單一業務最大可達到上百 TB,
Apache Doris 是一個現代化的 MPP(Massively Parallel Processing,即大規模并行處理)分析型(OLAP)資料庫產品,僅需亞秒級回應時間即可獲得查詢結果,有效地支持實時資料分析,
Apache Doris 的分布式架構非常簡潔,易于運維,并且可以支持 10PB 以上的超大資料集,
Apache Doris 可以滿足多種資料分析需求,例如固定歷史報表,實時資料分析,互動式資料分析和探索式資料分析等,
OLAP和OLTP
聯機事務處理OLTP(On-Line Transaction Processing)
公司業務系統使用資料庫的場景,針對業務系統資料庫有大量隨機的增刪改查
要求: 高并發 速度快 支持事務
聯機分析處理OLAP(On-Line Analytical Processing)
公司的資料分析使用資料庫的場景,對已經生成好的資料進行統計分析
要求:
- 一次操作都是針對的整個資料集
- 只有查這個動作,不會去增刪改
- 查詢的回應速度相對慢點也能接受
- 并發量要求不是太高
比較
| OLTP | OLAP | |
|---|---|---|
| 資料源 | 僅包含當前運行日常業務資料 | 整合來自多個來源的資料,包括OLTP和外部來源 |
| 目的 | 面向應用,面向業務,支撐事務 | 面向主題,面向分析,支持分析決策 |
| 焦點 | 當下 | 主要面向過去,面向歷史(實時數倉除外) |
| 任務 | 增刪改查 | 要是用于讀,select查詢,寫操作很少 |
| 回應時間 | 毫秒 | 秒,分鐘,小時 取決于資料量和查詢的復雜程度 |
| 資料量 | 小資料,MB,GB | 大資料,TP,PB |
使用場景
- 報表分析
- 實時看板 (Dashboards)
- 面向企業內部分析師和管理者的報表
- 面向用戶或者客戶的高并發報表分析(Customer Facing Analytics),比如面向網站主的站點分析、面向廣告主的廣告報表,并發通常要求成千上萬的 QPS ,查詢延時要求毫秒級回應,著名的電商公司京東在廣告報表中使用 Apache Doris ,每天寫入 100 億行資料,查詢并發 QPS 上萬,99 分位的查詢延時 150ms,
- 即席查詢(Ad-hoc Query):面向分析師的自助分析,查詢模式不固定,要求較高的吞吐,小米公司基于 Doris 構建了增長分析平臺(Growing Analytics,GA),利用用戶行為資料對業務進行增長分析,平均查詢延時 10s,95 分位的查詢延時 30s 以內,每天的 SQL 查詢量為數萬條,
- 統一數倉構建 :一個平臺滿足統一的資料倉庫建設需求,簡化繁瑣的大資料軟體堆疊,海底撈基于 Doris 構建的統一數倉,替換了原來由 Spark、Hive、Hbase、Phoenix 組成的舊架構,架構大大簡化,
- 資料湖聯邦查詢:通過外表的方式聯邦分析位于 Hive、Hudi 中的資料,在避免資料拷貝的前提下,查詢性能大幅提升
優勢

架構
Doris 的架構很簡潔,只設 FE(Frontend)前端行程、BE(Backend)后端行程兩種角色、兩個后臺的服務行程,不依賴于外部組件,方便部署和運維,FE、BE 都可在線性擴展,
- FE(Frontend):存盤、維護集群元資料;負責接收、決議查詢請求,規劃查詢計劃,調度查詢執行,回傳查詢結果,主要有三個角色:
- Leader 和 Follower:主要是用來達到元資料的高可用,保證單節點宕機的情況下,元資料能夠實時地在線恢復,而不影響整個服務,
- Observer:用來擴展查詢節點,同時起到元資料備份的作用,如果在發現集群壓力非常大的情況下,需要去擴展整個查詢的能力,那么可以加 observer 的節點,observer 不參與任何的寫入,只參與讀取,
- BE(Backend):負責物理資料的存盤和計算;依據 FE 生成的物理計劃,分布式地執行查詢,資料的可靠性由 BE 保證,BE 會對整個資料存盤多副本或者是三副本,副本數可根據需求動態調整,
- MySQL Client:Doris 借助 MySQL 協議,用戶使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客戶端,都可以直接訪問 Doris,
- Broker:一個獨立的無狀態行程,封裝了檔案系統介面,提供 Doris 讀取遠端存盤系統中檔案的能力,包括 HDFS,S3,BOS 等,

默認埠
| 實體名稱 | 埠名稱 | 默認埠 | 通訊方向 | 說明 |
|---|---|---|---|---|
| BE | be_port | 9060 | FE-->BE | BE 上 thrift server 的埠,用于接收來自 FE 的請求 |
| BE | webserver_port | 8040 | BE<-->FE | BE 上的 http server 埠 |
| BE | heartbeat_service_port | 9050 | FE-->BE | BE 上心跳服務埠,用于接收來自 FE 的心跳 |
| BE | brpc_prot* | 8060 | FE<-->BE,BE<-->BE | BE 上的 brpc 埠,用于 BE 之間通信 |
| FE | http_port | 8030 | FE<-->FE ,用戶<--> FE | FE 上的 http_server 埠 |
| FE | rpc_port | 9020 | BE-->FE ,FE<-->FE | FE 上 thirft server 埠 |
| FE | query_port | 9030 | 用戶<--> FE | FE 上的 mysql server 埠 |
| FE | edit_log_port | 9010 | FE<-->FE | FE 上 bdbje 之間通信用的埠 |
| Broker | broker_ipc_port | 8000 | FE-->BROKER,BE-->BROKER | Broker 上的 thrift server,用于接收請求 |
安裝
安裝前準備
-
Linux 作業系統版本需求
CentOS 7.1及以上版本
Ubuntu 16.04及以上版本 -
軟體需求
java 1.8及以上版本
GCC 4.8.2及以上版本 -
作業系統環境要求
vi /etc/security/limits.conf
# 在檔案最后添加下面幾行資訊(注意* 也要復制進去)
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# ulimit -n 65535 臨時生效
# 重啟永久生效,
# 如果不修改這個句柄數大于等于60000,啟動doris be節點時會報如下錯誤
File descriptor number is less than 60000. Please use (ulimit -n) to set a value equal or greater than 60000
W1120 18:14:20.934705 3437 storage_engine.cpp:188] check fd number failed, error: Internal error: file descriptors limit is too small
W1120 18:14:20.934713 3437 storage_engine.cpp:102] open engine failed, error: Internal error: file descriptors limit is too small
F1120 18:14:20.935087 3437 doris_main.cpp:404] fail to open StorageEngine, res=file descriptors limit is too small
- 時鐘同步
Doris 的元資料要求時間精度要小于5000ms,所以所有集群所有機器要進行時鐘同步,避免因為時鐘問題引發的元資料不一致導致服務出現例外,
# ntpdate是一個向互聯網上的時間服務器進行時間同步的軟體
yum install ntpdate -y
# 然后開始三臺機器自己同步時間
ntpdate ntp.sjtu.edu.cn
# 美國標準技術院時間服務器:time.nist.gov(192.43.244.18)
# 上海交通大學網路中心NTP服務器地址:ntp.sjtu.edu.cn(202.120.2.101)
# 中國國家授時中心服務器地址:cn.pool.ntp.org(210.72.145.44)
# 將當前時間寫入bios,這樣才能永久生效不變,不然reboot后還會恢復到原來的時間
clock -w
- 關閉交換磁區(swap)
交換磁區是linux用來當做虛擬記憶體用的磁盤磁區;
linux可以把一塊磁盤磁區當做記憶體來使用(虛擬記憶體、交換磁區);
Linux使用交換磁區會給Doris帶來很嚴重的性能問題,建議在安裝之前禁用交換磁區;
# 臨時關閉交換磁區
swapoff -a
# 永久洗掉Swap掛載
vim /etc/fstab
注釋 swap 行
- mysql
安裝FE
1.官網下載原始碼包,官網地址:https://doris.apache.org
2.下載后上傳到linux并解壓
3.修改組態檔
# 去自己的路勁中找到fe.conf檔案
vi /opt/apps/doris/fe/conf/fe.conf
#組態檔中指定元資料路徑: 注意這個檔案夾要自己創建
meta_dir = /opt/data/dorisdata/doris-meta
#修改系結 ip(每臺機器修改成自己的 ip)
priority_networks = 192.168.22.0/24
安裝BE
1.官網下載原始碼包,官網地址:https://doris.apache.org
2.下載后上傳到linux并解壓
3.修改組態檔
# 去自己的路勁中找到be.conf檔案
vi /opt/apps/doris/be/conf/be.conf
#組態檔中指定資料存放路徑: 需在啟動前創建目錄
storage_root_path = /opt/data/doris/be/storage.HDD;/opt/data/doris/be/storage.SSD
#修改系結 ip(每臺機器修改成自己的 ip)
priority_networks = 192.168.17.0/24
分發集群
for i in 2 3
do
scp /et/profile linux0$i:/etc/profile
scp -r /opt/apps/doris/ linux0$i:/opt/apps/
done
Mysql CLient連接FE
# 進入到fe的bin目錄下執行
./start_fe.sh --daemon
mysql -h linux01 -P 9030 -uroot
# 設定密碼
SET PASSWORD FOR 'root' = PASSWORD('123');
# 查看fe的運行狀態
SHOW PROC '/frontends'\G;
# 添加BE節點
ALTER SYSTEM ADD BACKEND "linux01:9050";
ALTER SYSTEM ADD BACKEND " linux02:9050";
ALTER SYSTEM ADD BACKEND " linux03:9050";
# 查看BE狀態
SHOW PROC '/backends';
# 添加環境變數
vi /etc/profile
#doris_fe
export DORIS_FE_HOME=/opt/app/doris1.1.4/fe
export PATH=$PATH:$DORIS_FE_HOME/bin
#doris_be
export DORIS_BE_HOME=/opt/app/doris1.1.4/be
export PATH=$PATH:$DORIS_BE_HOME/bin
source /etc/profile
# 啟動 BE(每個節點)
start_be.sh --daemon
# 啟動后再次查看BE的節點
SHOW PROC '/backends';
# Alive 為 true 表示該 BE 節點存活
部署FS_Broker
Broker 以插件的形式,獨立于 Doris 部署,如果需要從第三方存盤系統匯入資料,需要部署相應的 Broker,默認提供了讀取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker,fs_broker 是無狀態的,建議每一個 FE 和 BE 節點都部署一個 Broker,
# 啟動 Broker
/opt/apps/doris/fe/apache_hdfs_broker/bin/start_broker.sh --daemon
# 使用 mysql-client 連接啟動的 FE,執行以下命令:
mysql -h linux01 -P 9030 -uroot -p 123
ALTER SYSTEM ADD BROKER broker_name "linux01:8000","linux02:8000","linux03:8000";
# broker_name 這只是一個名字,可以自己取
# 查看 Broker 狀態
# 使用 mysql-client 連接任一已啟動的 FE,執行以下命令查看 Broker 狀態:
SHOW PROC "/brokers";
擴容和縮容
FE 擴容和縮容
可以通過將 FE 擴容至 3 個以上節點來實作 FE 的高可用,
使用 MySQL 登錄客戶端后,可以使用 sql 命令 SHOW PROC '/frontends'\G; 查看 FE 狀態,目前就一臺 FE
FE 分為 Leader,Follower 和 Observer 三種角色, 默認一個集群,只能有一個 Leader,可以有多個 Follower 和 Observer,其中 Leader 和 Follower 組成一個 Paxos 選擇組,如果Leader 宕機,則剩下的 Follower 會自動選出新的 Leader,保證寫入高可用,Observer 同步 Leader 的資料,但是不參加選舉,
如果只部署一個 FE,則 FE 默認就是 Leader,在此基礎上,可以添加若干 Follower 和 Observer,
-- 添加FE的新節點
ALTER SYSTEM ADD FOLLOWER "linux02:9010";
ALTER SYSTEM ADD OBSERVER "linux03:9010";
在linux01和linux02分別啟動FE
# 第一次添加,一定要加這兩個引數 --helper linux01:9010
/opt/apps/doris/fe/bin/start_fe.sh --helper linux01:9010 --daemon
此時,再在linux01的mysql客戶端中使用 SHOW PROC '/frontends'\G; 命令查看FE的狀態
洗掉FE節點命令
-- 洗掉 Follower FE 時,確保最終剩余的 Follower(包括 Leader)節點最好為奇數,
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
ALTER SYSTEM DROP FOLLOWER "linux03:9010";
BE 擴容和縮容
增加 BE 節點
-- 在 MySQL 客戶端,通過 ALTER SYSTEM ADD BACKEND 命令增加 BE 節點,
ALTER SYSTEM ADD BACKEND "linux01:9050";
-- DROP 方式洗掉 BE 節點(不推薦)
ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
ALTER SYSTEM DROP BACKEND "linux03:9050";
-- 注意:DROP BACKEND 會直接洗掉該 BE,并且其上的資料將不能再恢復!!!所以我們強烈不推薦使用 DROP BACKEND 這種方式洗掉 BE 節點,當你使用這個陳述句時,會有對應的防誤操作提示,
-- DECOMMISSION 方式洗掉 BE 節點(推薦)
ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
ALTER SYSTEM DECOMMISSION BACKEND "linux03:9050";
-- 1.該命令用于安全洗掉 BE 節點,命令下發后,Doris 會嘗試將該 BE 上的資料向其 他 BE 節點遷移,當所有資料都遷移完成后,Doris 會自動洗掉該節點,
-- 2.該命令是一個異步操作,執行后,可以通過 SHOW PROC '/backends'; 看到該 BE節點的 isDecommission 狀態為 true,表示該節點正在進行下線,
-- 3.該命令不一定執行成功,比如剩余 BE 存盤空間不足以容納下線 BE 上的資料,或者剩余機器數量不滿足最小副本數時,該命令都無法完成,并且 BE 會一直處于isDecommission 為 true 的狀態,
-- 4.DECOMMISSION 的進度,可以通過 SHOW PROC '/backends'; 中的 TabletNum 查看,如果正在進行,TabletNum 將不斷減少,
-- 5.該操作可以通過如下命令取消:CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port"; 取消0后,該 BE 上的資料將維持當前剩余的資料量,后續 Doris 重新進行負載均衡,
Broker 擴容縮容
-- Broker 實體的數量沒有硬性要求,通常每臺物理機部署一個即可,Broker 的添加和洗掉可以通過以下命令完成:
ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";
ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";
ALTER SYSTEM DROP ALL BROKER broker_name;
-- Broker 是無狀態的行程,可以隨意啟停,當然,停止后,正在其上運行的作業會失敗,重試即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553562.html
標籤:其他
上一篇:一文教會你用Apache SeaTunnel Zeta離線把資料從MySQL同步到StarRocks
下一篇:返回列表
