DorisDB | 安裝配置


DorisDB

Apache Doris最早誕生於2008年,最初只為解決百度鳳巢報表的專用系統。在08年那個時候數據存儲和計算成熟的開源產品非常少,Hbase的導入性能只有大約2000條/秒,在這種不能滿足業務的背景下,doris

誕生了,並且跟隨百度鳳巢系統一起正式上線。

Apache Doris是一個現代化的MPP分析性數據庫產品。僅需要亞秒級響應時間即可獲得查詢結果,有效地支持實時數據分析。Apache Doris可以滿足多種數據分析需求,例如固定歷史報表,實時數據分析。

https://baijiahao.baidu.com/s?id=1633669902039812353&wfr=spider&for=pc

http://doc.dorisdb.com/2178813

DorisDB集群的安裝

hadoop102

hadoop103

hadoop104

FE(LEADER)

FE(FOLLOWER)

FE(OBSERVER)

BE

BE

BE

BROKER

BROKER

BROKER

1.FE的磁盤主要用於存儲元數據,包括日志,和image。通常幾百MB到幾個GB不等

2.BE的磁盤主要用於存儲用戶數據,總磁盤空間按用戶總數據量*3(3份副本)計算,然后再預留額外40%的空間用作后台compaction以及一些中間數據的存放。

3.一台機器上可以部署多個BE實例,但只能部署一個FE。如果需要3副本數據,那么至少三台機器各部署一個BE實例。

4.FE角色分為Follower和Observer,(Leader為Follwer中選舉出來的一種角色)

5.FE節點至少為1個。當部署1個Follower和1個Observer時,可以實現高可用HA

6.Follower的數量必須為奇數,Observer數量隨意

7.根據官網描述,以往經驗,當集群可用性要求很高,可以部署3個Follower和1-3個Observer。如果是離線業務,建議部署1個Follower和1-3個Observer

8.Broker部署,Broker是用於訪問外部數據源hdfs進程。通常每台機器上部署一個broker實例即可。

 

二進制產品包

安裝包的下載:https://www.starrocks.com/zh-CN/download/community 

DorisDB-XX-1.0.0

├── be  # BE目錄

│   ├── bin

│   │   ├── start_be.sh # BE啟動命令

│   │   └── stop_be.sh  # BE關閉命令

│   ├── conf

│   │   └── be.conf     # BE配置文件

│   ├── lib

│   │   ├── dorisdb_be  # BE可執行文件

│   │   └── meta_tool

│   └── www

├── fe  # FE目錄

│   ├── bin

│   │   ├── start_fe.sh # FE啟動命令

│   │   └── stop_fe.sh  # FE關閉命令

│   ├── conf

│   │   └── fe.conf     # FE配置文件

│   ├── lib

│   │   ├── dorisdb-fe.jar  # FE jar包

│   │   └── *.jar           # FE 依賴的jar包

│   └── webroot

└── udf

部署FE

FE的基本配置

第一步: 定制配置文件conf/fe.conf:

  FE的配置文件為DorisDB-XX-1.0.0/fe/conf/fe.conf

  可以根據FE內存大小調整 -Xmx4096m,為了避免GC建議16G以上,DorisDB的元數據都在內存中保存。

vim  fe/conf/fe.conf

  meta_dir = /opt/module/apache-doris/fe/doris-meta

第二步: 創建元數據目錄: 

  mkdir -p fe/doris-meta  

第三步: 啟動FE進程:

  fe/bin/start_fe.sh --daemon 

第四步: 確認啟動FE啟動成功.

   查看日志log/fe.log確認.

[FeServer.start():48] thrift server started.
[NMysqlServer.start():70] Open mysql server success on 9030
[QeService.start():60] QE service start.
[HttpServer$HttpServerThread.run():231] HttpServer started with port 8030
  • 如果FE啟動失敗,可能是由於端口號被占用,修改配置文件conf/fe.conf中的端口號http_port。
  • 使用jps命令查看java進程確認"DorisDbFe"存在.
  • 使用瀏覽器訪問8030端口, 打開DorisDB的WebUI, 用戶名為root, 密碼為空.

使用MySQL客戶端訪問FE

第一步: 安裝mysql客戶端(如果已經安裝,可忽略此步):

  Ubuntu:sudo apt-get install mysql

  Centos:sudo yum install mysql-client

第二步: 使用mysql客戶端連接:

  mysql -h hadoop102 -P9030 -uroot

  注意:這里默認root用戶密碼為空,端口為fe/conf/fe.conf中的query_port配置項,默認為9030

第三步: 查看FE狀態:

  mysql> SHOW PROC '/frontends'\G

mysql>  SHOW PROC '/frontends'\G *************************** 1. row *************************** Name: 192.168.122.1_9010_1634461485149 IP: 192.168.122.1 HostName: 192.168.122.1 EditLogPort: 9010 HttpPort: 8030 QueryPort: 9030 RpcPort: 9020 Role: FOLLOWER IsMaster: true ClusterId: 1315220597
             Join: true Alive: true ReplayedJournalId: 61 LastHeartbeat: 2021-10-17 17:08:25 IsHelper: true ErrMsg: 1 row in set (20.07 sec)

 Role為FOLLOWER說明這是一個能參與選主的FE;IsMaster為true,說明該FE當前為主節點。

如果MySQL客戶端連接不成功,請查看log/fe.warn.log日志文件,確認問題。由於是初次啟動,如果在操作過程中遇到任何意外問題,都可以刪除並重新創建FE的元數據目錄,再從頭開始操作。

FE的高可用集群部署

FE的高可用集群采用主從復制架構, 可避免FE單點故障. FE采用了類raft的bdbje協議完成選主,  日志復制和故障切換.  在FE集群中,  多實例分為兩種角色: follower和observer;  前者為復制協議的可投票成員, 參與

選主和提交日志, 一般數量為奇數(2n+1), 使用多數派(n+1)確認,  可容忍少數派(n)故障;  而后者屬於非投票成員,  用於異步訂閱復制日志,  observer的狀態落后於follower,  類似其他復制協議中的leaner角色.

FE集群從follower中自動選出master節點,  所有更改狀態操作都由master節點執行,  從FE的master節點可以讀到最新的狀態.  更改操作可以從非master節點發起,  繼而轉發給master節點執行, 非master節點記錄最

近一次更改操作在復制日志中的LSN, 讀操作可以直接在非master節點上執行, 但需要等待非master節點的狀態已經同步到最近一次更改操作的LSN, 因此讀寫非Master節點滿足順序一致性. Observer節點能夠增

加FE集群的讀負載能力, 時效性要求放寬的非緊要用戶可以讀observer節點.

FE節點之間的時鍾相差不能超過5s, 使用NTP協議校准時間.

一台機器上只可以部署單個FE節點。所有FE節點的http_port需要相同。

集群部署按照下列步驟逐個增加FE實例.

第一步: 分發二進制和配置文件到另外兩個節點, 配置文件和單實例情形相同.

  scp -r apache-doris/ hadoop103:/opt/module/

  scp -r apache-doris/ hadoop104:/opt/module/

第二步: 使用MySQL客戶端連接已有的FE,  添加新實例的信息,信息包括角色、ip、port:

mysql> ALTER SYSTEM ADD FOLLOWER "host:port"; 或 mysql> ALTER SYSTEM ADD OBSERVER "host:port"; mysql> ALTER SYSTEM ADD FOLLOWER "hadoop103:9010"; Query OK, 0 rows affected (0.02 sec) mysql> ALTER SYSTEM ADD OBSERVER "hadoop104:9010"; Query OK, 0 rows affected (0.00 sec)

host為機器的IP,如果機器存在多個IP,需要選取priority_networks里的IP,例如priority_networks=192.168.1.0/24 可以設置使用192.168.1.x 這個子網進行通信。port為edit_log_port,默認為9010。

DorisDB的FE和BE因為安全考慮都只會監聽一個IP來進行通信,如果一台機器有多塊網卡,可能DorisDB無法自動找到正確的IP,例如 ifconfig 命令能看到 eth0 ip為 192.168.1.1, docker0: 172.17.0.1 ,我們可以設置 192.168.1.0/24 這一個字網來指定使用eth0作為通信的IP,這里采用是CIDR的表示方法來指定IP所在子網范圍,這樣可以在所有的BE,FE上使用相同的配置。
priority_networks 是 FE 和 BE 相同的配置項,寫在 fe.conf 和 be.conf 中。該配置項用於在 FE 或 BE 啟動時,告訴進程應該綁定哪個IP。示例如下:
priority_networks=10.1.3.0/24

啟動hadoop103、hadoop104的fe

  sh bin/start_fe.sh --daemon

mysql>  SHOW PROC '/frontends'\G *************************** 1. row *************************** Name: 192.168.122.1_9010_1634461485149 IP: 192.168.122.1 HostName: 192.168.122.1 EditLogPort: 9010 HttpPort: 8030 QueryPort: 9030 RpcPort: 9020 Role: FOLLOWER  IsMaster: true  ClusterId: 1315220597
             Join: true Alive: true ReplayedJournalId: 687 LastHeartbeat: 2021-10-17 17:43:03 IsHelper: true ErrMsg: *************************** 2. row *************************** Name: 192.168.1.104_9010_1634463682433 IP: 192.168.1.104 HostName: hadoop104 EditLogPort: 9010 HttpPort: 8030 QueryPort: 9030 RpcPort: 9020 Role: OBSERVER IsMaster: false ClusterId: 1315220597
             Join: false Alive: true ReplayedJournalId: 549 LastHeartbeat: 2021-10-17 17:43:03 IsHelper: false ErrMsg: *************************** 3. row *************************** Name: 192.168.1.103_9010_1634463628227 IP: 192.168.1.103 HostName: hadoop103 EditLogPort: 9010 HttpPort: 8030 QueryPort: 9030 RpcPort: 9020 Role: FOLLOWER IsMaster: false ClusterId: 1315220597
             Join: false Alive: true ReplayedJournalId: 539 LastHeartbeat: 2021-10-17 17:43:03 IsHelper: true ErrMsg: 3 rows in set (20.08 sec) mysql> 

節點的Alive顯示為true則說明添加節點成功。192.168.122.1_9010_1634461485149 為主節點。

xcall.sh jps --------- hadoop102 ----------
3008 StarRocksFe 3760 Jps --------- hadoop103 ----------
3441 Jps 3244 StarRocksFe --------- hadoop104 ----------
3234 StarRocksFe 3404 Jps

部署BE

如果開啟了hadoop,yarn的8040端口號與be的web端口號會產生沖突;

 

 修改doris fe.conf配置,將http port修改為其他端口

BE的基本配置

  BE的配置文件為DorisDB-XX-1.0.0/be/conf/be.conf, 

BE部署

用戶可使用下面命令添加BE到DorisDB集群, 一般至少部署3個BE實例, 每個實例的添加步驟相同.

cd DorisDB-XX-1.0.0/be

第一步: 創建數據目錄:

  mkdir -p be/storage

  添加到be/conf/be.conf中 vim be/conf/be.conf

  storage_root_path = /opt/module/apache-doris/be/storage,10;

storage_root_path配置存儲目錄,可以用來指定多個目錄,每個目錄后可以跟逗號,指定大小默認GB;

第二步: 通過mysql客戶端添加BE節點:

  mysql> ALTER SYSTEM ADD BACKEND "host:port";

  這里IP地址為和priority_networks設置匹配的IP,portheartbeat_service_port,默認為9050

在mysql客戶端添加BE 節點
mysql> ALTER SYSTEM ADD BACKEND "hadoop102:9050"; Query OK, 0 rows affected (0.00 sec) mysql> ALTER SYSTEM ADD BACKEND "hadoop103:9050"; Query OK, 0 rows affected (0.00 sec) mysql> ALTER SYSTEM ADD BACKEND "hadoop104:9050"; Query OK, 0 rows affected (0.00 sec)
在hadoop102、hadoop103、hadoop104節點啟動BE:
sh bin/start_be.sh --daemon
sh bin/start_be.sh --daemon
sh bin/start_be.sh --daemon

查看BE狀態,確認BE就緒: mysql
> SHOW PROC '/backends'\G *************************** 1. row *************************** BackendId: 10003 Cluster: default_cluster IP: 192.168.1.102 HostName: hadoop102 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2021-10-17 18:07:27 LastHeartbeat: 2021-10-17 18:07:47 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 0 DataUsedCapacity: .000 AvailCapacity: 20.053 GB TotalCapacity: 45.095 GB UsedPct: 55.53 % MaxDiskUsedPct: 55.53 % ErrMsg: Version: 1.18.2-7b65727 Status: {"lastSuccessReportTabletsTime":"2021-10-17 18:07:28"} *************************** 2. row *************************** BackendId: 10007 Cluster: default_cluster IP: 192.168.1.103 HostName: hadoop103 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2021-10-17 18:07:37 LastHeartbeat: 2021-10-17 18:07:47 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 0 DataUsedCapacity: .000 AvailCapacity: 1.000 B TotalCapacity: .000 UsedPct: 0.00 % MaxDiskUsedPct: 0.00 % ErrMsg: Version: 1.18.2-7b65727 Status: {"lastSuccessReportTabletsTime":"N/A"} *************************** 3. row *************************** BackendId: 10008 Cluster: default_cluster IP: 192.168.1.104 HostName: hadoop104 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2021-10-17 18:07:32 LastHeartbeat: 2021-10-17 18:07:47 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 0 DataUsedCapacity: .000 AvailCapacity: 1.000 B TotalCapacity: .000 UsedPct: 0.00 % MaxDiskUsedPct: 0.00 % ErrMsg: Version: 1.18.2-7b65727 Status: {"lastSuccessReportTabletsTime":"N/A"} 3 rows in set (0.03 sec)

如果isAlive為true,則說明BE正常接入集群。如果BE沒有正常接入集群,請查看log目錄下的be.WARNING日志文件確定原因。

部署Broker

部署FS_BROKER,BROKER以插件的形式,獨立與Doris的部署,建議每個PE和BE節點都部署一個Broker,Broker是用於訪問外部數據源的進程,默認是HDSF。

配置文件為apache_hdfs_broker/conf/apache_hdfs_broker.conf

注意:如果機器有多個IP,需要配置priority_networks,方式同FE。

如果有特殊的hdfs配置,復制線上的hdfs-site.xml到conf目錄下

啟動:

./apache_hdfs_broker/bin/start_broker.sh --daemon 

添加broker節點到集群中:

MySQL> ALTER SYSTEM ADD BROKER broker1 "172.16.139.24:8000"; 

查看broker狀態

添加broker節點到集群:
mysql> ALTER SYSTEM ADD BROKER broker2 "hadoop102:8000"; Query OK, 0 rows affected (0.02 sec) mysql> ALTER SYSTEM ADD BROKER broker2 "hadoop103:8000"; Query OK, 0 rows affected (0.00 sec) mysql> ALTER SYSTEM ADD BROKER broker2 "hadoop104:8000"; Query OK, 0 rows affected (0.00 sec)
查看broker狀態: mysql
> SHOW PROC "/brokers"\G *************************** 1. row *************************** Name: broker2 IP: 192.168.1.103 Port: 8000 Alive: true LastStartTime: 2021-10-17 18:24:10 LastUpdateTime: 2021-10-17 18:24:20 ErrMsg: *************************** 2. row *************************** Name: broker2 IP: 192.168.1.104 Port: 8000 Alive: true LastStartTime: 2021-10-17 18:24:00 LastUpdateTime: 2021-10-17 18:24:20 ErrMsg: *************************** 3. row *************************** Name: broker2 IP: 192.168.1.102 Port: 8000 Alive: true LastStartTime: 2021-10-17 18:23:35 LastUpdateTime: 2021-10-17 18:24:20 ErrMsg: 3 rows in set (0.00 sec)

Alive為true代表狀態正常。

 

xcall.sh jps --------- hadoop102 ----------
3008 StarRocksFe 5364 Jps 5189 BrokerBootstrap --------- hadoop103 ----------
4937 Jps 4810 BrokerBootstrap 3244 StarRocksFe --------- hadoop104 ----------
4784 BrokerBootstrap 3234 StarRocksFe 4916 Jps fe節點的查看: ps -ef | grep fe root 94      2  0 16:10 ?        00:00:00 [deferwq] kris 3008      1  1 17:04 pts/0    00:01:17 /opt/module/jdk1.8.0_212/bin/java -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/opt/module/apache-doris/fe/log/fe.gc.log.20211017-170443 com.starrocks.StarRocksFe kris 5356   3381  0 18:34 pts/1    00:00:00 grep --color=auto fe

參數設置

  • Swappiness

關閉交換區,消除交換內存到虛擬內存時對性能的擾動。

echo 0 | sudo tee /proc/sys/vm/swappiness 
  • Compaction相關

當使用聚合表或更新模型,導入數據比較快的時候,可改下列參數以加速compaction。

cumulative_compaction_num_threads_per_disk = 4 base_compaction_num_threads_per_disk = 2 cumulative_compaction_check_interval_seconds = 2 
  • 並行度

在客戶端執行命令,修改DorisDB的並行度(類似clickhouse set max_threads= 8)。並行度可以設置為當前機器CPU核數的一半。

set  global parallel_fragment_exec_instance_num = 8;

使用MySQL客戶端訪問DorisDB

1 Root用戶登錄

使用MySQL客戶端連接某一個FE實例的query_port(9030), DorisDB內置root用戶,密碼默認為空:

mysql -h fe_host -P9030 -u root

2 創建新用戶

通過下面的命令創建一個普通用戶:

mysql > create user 'test' identified by '123456';

3 創建數據庫

DorisDB中root賬戶才有權建立數據庫,使用root用戶登錄,建立example_db數據庫:

mysql > create database example_db;

數據庫創建完成之后,可以通過show databases查看數據庫信息:

mysql > show databases;

+--------------------+

| Database           |

+--------------------+

| example_db         |

| information_schema |

+--------------------+

2 rows in set (0.00 sec)

information_schema是為了兼容mysql協議而存在,實際中信息可能不是很准確,所以關於具體數據庫的信息建議通過直接查詢相應數據庫而獲得。

4 賬戶授權

example_db創建完成之后,可以通過root賬戶example_db讀寫權限授權給test賬戶,授權之后采用test賬戶登錄就可以操作example_db數據庫了:

mysql > grant all on example_db to test;

退出root賬戶,使用test登錄DorisDB集群:

mysql > exit

mysql -h hadoop102 -P9030 -utest -p123456

5 建表 

DorisDB支持支持單分區和復合分區兩種建表方式

在復合分區中:

  • 第一級稱為Partition,即分區。用戶可以指定某一維度列作為分區列(當前只支持整型和時間類型的列),並指定每個分區的取值范圍。
  • 第二級稱為Distribution,即分桶。用戶可以指定某幾個維度列(或不指定,即所有KEY列)以及桶數對數據進行HASH分布。

以下場景推薦使用復合分區:

  • 有時間維度或類似帶有有序值的維度:可以以這類維度列作為分區列。分區粒度可以根據導入頻次、分區數據量等進行評估。
  • 歷史數據刪除需求:如有刪除歷史數據的需求(比如僅保留最近N 天的數據)。使用復合分區,可以通過刪除歷史分區來達到目的。也可以通過在指定分區內發送DELETE語句進行數據刪除。
  • 解決數據傾斜問題:每個分區可以單獨指定分桶數量。如按天分區,當每天的數據量差異很大時,可以通過指定分區的分桶數,合理划分不同分區的數據,分桶列建議選擇區分度大的列。

用戶也可以不使用復合分區,即使用單分區。則數據只做HASH分布。

下面分別演示兩種分區的建表語句:

  1. 首先切換數據庫:mysql > use example_db;
  2. 建立單分區表建立一個名字為table1的邏輯表。使用全hash分桶,分桶列為siteid,桶數為10。這個表的schema如下:
    • siteid:類型是INT(4字節), 默認值為10
    • cidy_code:類型是SMALLINT(2字節)
    • username:類型是VARCHAR, 最大長度為32, 默認值為空字符串
    • pv:類型是BIGINT(8字節), 默認值是0; 這是一個指標列, DorisDB內部會對指標列做聚合操作, 這個列的聚合方法是求和(SUM)。這里采用了聚合模型,除此之外DorisDB還支持明細模型和更新模型,具體參考數據模型介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM