# Doris(Palo)

官方文档 (opens new window)

# 一、安装

# 1.1 系统配置

设置系统最大打开文件句柄数(注意这里的*不要去掉)

sudo vim /etc/security/limits.conf

* hard nofile 65535
* soft nofile 65535
* soft nproc 65535
* hard nproc 65535
1
2
3
4
5
6

设置最大虚拟块的大小

sudo vim /etc/sysctl.conf
vm.max_map_count=2000000
1
2

# 1.2 下载doris安装包

下载地址:https://doris.apache.org/download 查看CPU是否支持 avx2 cat /proc/cpuinfo

# 1.3 解压

[root@node01 opt]# tar -xJf apache-doris-1.2.6-bin-x64.tar.xz
1

# 1.4 配置 FE

修改FE配置文件

[hadoop@node01 opt]$ vim /opt/doris/fe/conf/fe.conf
# web 页面访问端口
http_port = 7030
# 配置文件中指定元数据路径:默认在 fe 的根目录下,可以不配
# meta_dir = /opt/doris/fe/doris-meta
# 修改绑定 ip
priority_networks = 192.168.0.0/16
# 生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好)。
# 如果机器有多个ip, 比如内网外网, 虚拟机docker等, 需要进行ip绑定,才能正确识别。
# JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
1
2
3
4
5
6
7
8
9
10

启动FE

[hadoop@node01 opt]$ /opt/doris/fe/bin/start_fe.sh --daemon
1

登录页面

地址: http://node01:7030/login
用户:root
密码:无
1
2
3

# 1.5 配置 BE

修改BE配置文件

[hadoop@node01 opt]$ vim /opt/doris/be/conf/be.conf
# 不配置存储目录, 则会使用默认的存储目录
# storage_root_path = /opt/doris-1.1.1/doris-storage1;/opt/doris-1.1.1/doris-storage2.SSD,10
priority_networks = 192.168.0.0/16
webserver_port = 7040 
# storage_root_path默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号;分隔(最后一个目录后不要加)。
# 可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开,如:
# storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
# 说明:
# /home/disk1/doris.HDD,50,表示存储限制为50GB,HDD;
# /home/disk2/doris.SSD,10,存储限制为10GB,SSD;
# /home/disk2/doris,存储限制为磁盘最大容量,默认为HDD
# 如果是 hdd,sdd 混合存储,则直接写目录即可。
# 如果机器有多个IP, 比如内网外网, 虚拟机docker等, 需要进行IP绑定,才能正确识别。

[hadoop@node01 opt]$ xsync /opt/doris/be/conf/be.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1.6 添加 BE

BE节点需要先在FE中添加,才可加入集群。可以使用mysql-client连接到FE。

# FE root 默认没有密码
mysql -hnode01 -P9030 -uroot

ALTER SYSTEM ADD BACKEND "node01:9050";
ALTER SYSTEM ADD BACKEND "node02:9050";
ALTER SYSTEM ADD BACKEND "node03:9050";
1
2
3
4
5
6

查看 BE状态

没启动的话Alive是false

mysql> SHOW PROC '/backends'\G
*************************** 1. row ***************************
              BackendId: 11201
                   Host: node01
          HeartbeatPort: 9050
                 BePort: -1
               HttpPort: -1
               BrpcPort: -1
          LastStartTime: NULL
          LastHeartbeat: NULL
                  Alive: false
   SystemDecommissioned: false
              TabletNum: 0
       DataUsedCapacity: 0.000
          AvailCapacity: 1.000 B
          TotalCapacity: 0.000
                UsedPct: 0.00 %
         MaxDiskUsedPct: 0.00 %
     RemoteUsedCapacity: 0.000
                    Tag: {"location" : "default"}
                 ErrMsg: java.net.ConnectException: 拒绝连接 (Connection refused)
                Version:
                 Status: {"lastSuccessReportTabletsTime":"N/A","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 5
               NodeRole:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 1.7 启动 BE

分别在多节点执行如下命令

[hadoop@node01 fe]$ /opt/doris/be/bin/start_be.sh --daemon
1

# 1.8 FE 扩容和缩容

# 1.8.1 查看 FE 状态

mysql -hnode01 -P9030 -uroot
mysql> show proc '/frontends';
+-----------------------------------------+------------+-------------+----------+-----------+---------+----------+----------+------------+------+-------+-------------------+---------------------+----------+--------+--------------------------+------------------+
| Name                                    | Host       | EditLogPort | HttpPort | QueryPort | RpcPort | Role     | IsMaster | ClusterId  | Join | Alive | ReplayedJournalId | LastHeartbeat       | IsHelper | ErrMsg | Version                  | CurrentConnected |
+-----------------------------------------+------------+-------------+----------+-----------+---------+----------+----------+------------+------+-------+-------------------+---------------------+----------+--------+--------------------------+------------------+
| fe_f69e0e5b_6bac_4028_8fdd_b500224cdd20 | 172.17.0.1 | 9010        | 7030     | 9030      | 9020    | FOLLOWER | true     | 1612328039 | true | true  | 951               | 2023-08-24 15:50:56 | true     |        | doris-2.0.0-rc04-96bb9a7 | Yes              |
+-----------------------------------------+------------+-------------+----------+-----------+---------+----------+----------+------------+------+-------+-------------------+---------------------+----------+--------+--------------------------+------------------+
1 row in set (0.07 sec)

mysql>
1
2
3
4
5
6
7
8
9
10

# 1.8.2 增加FE节点

FE分为Leader,Follower和Observer三种角色。 默认一个集群只能有一个Leader,可以有多个Follower和Observer。其中Leader和Follower组成一个Paxos选择组,如果 Leader宕机,则剩下的Follower 会自动选出新的Leader,保证写入高可用。Observer 同步 Leader的数据,但是不参加选举。 如果只部署一个FE,则FE 默认就是Leader。在此基础上,可以添加若干Follower和 Observer。

ALTER SYSTEM ADD OBSERVER "node02:9010";
ALTER SYSTEM ADD OBSERVER "node03:9010";
1
2

node01node02 启动 FE

# 要删掉元数据 rm -rf /opt/doris/fe/doris-meta/*
# 第一次启动需要增加额外参数`--helper leader主机: edit_log_port`
[hadoop@node02 opt]$ /opt/doris/fe/bin/start_fe.sh --daemon --helper node01:9010
[hadoop@node03 ~]$ /opt/doris/fe/bin/start_fe.sh --daemon --helper node01:9010
1
2
3
4

# 1.8.3 删除 FE 节点(缩容)

# 注意:删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
1
2

# 1.9 BE 扩容和缩容

# 1.9.1 增加BE节

在MySQL客户端,通过 ALTER SYSTEM ADD BACKEND 命令增加BE节点。

# 1.9.2 DROP方式删除BE节点(不推荐)

ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";

注意:DROP BACKEND 会直接删除该BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除BE节点。当你使用这个语句时,会有对应的防误操作提示。

# 1.9.3 DECOMMISSION 方式删除BE节点(推荐)

ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";

  • 该命令用于安全删除BE节点。命令下发后,Doris 会尝试将该BE上的数据向其他BE节点迁移,当所有数据都迁移完成后,Doris会自动删除该节点。
  • 该命令是一个异步操作。执行后,可以通过 SHOW PROC '/backends'; 看到该 BE 节点的isDecommission状态为true。表示该节点正在进行下线。
  • 该命令不一定执行成功。比如剩余BE存储空间不足以容纳下线BE上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且BE会一直处于 isDecommission为true的状态。
  • DECOMMISSION的进度,可以通过SHOW PROC '/backends'; 中的TabletNum查看,如果正在进行,TabletNum将不断减少。
  • 该操作可以通过如下命令取消:CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";

取消后,该BE上的数据将维持当前剩余的数据量。后续Doris重新进行负载均衡。

# 2.0 Doris 起停脚本

#!/bin/bash
case $1 in
    "start")
        for host in node01 node02 node03 ; do
            echo "========== 在 $host 上启动 fe  ========="
            ssh $host "source /etc/profile; /opt/doris/fe/bin/start_fe.sh --daemon"
        done
        for host in node01 node02 node03 ; do
            echo "========== 在 $host 上启动 be  ========="
            ssh $host "source /etc/profile; /opt/doris/be/bin/start_be.sh --daemon"
        done

       ;;
    "stop")
            for host in node01 node02 node03 ; do
                echo "========== 在 $host 上停止 fe  ========="
                ssh $host "source /etc/profile; /opt/doris/fe/bin/stop_fe.sh "
            done
            for host in node01 node02 node03 ; do
                echo "========== 在 $host 上停止 be  ========="
                ssh $host "source /etc/profile; /opt/doris/be/bin/stop_be.sh "
            done

           ;;

    *)
        echo "你启动的姿势不对"
        echo "  start   启动doris集群"
        echo "  stop    停止stop集群"

    ;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 二、DDL

# 2.1 增加字段

alter table idl_annual_card_orders_class add COLUMN  is_test_user int;
1

# 2.2 增加外表

CREATE EXTERNAL TABLE XXX.XXX(
  orderid int(11) ,
  bbsuserid bigint(20) ,
 ....
) 
ENGINE = mysql
PROPERTIES (
"host" = "",
"port" = "",
"user" = "",
"password" = "",
"database" = "",
"table" = ""
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2.3 修改字段

-- 修改 base index 的 col1 列的类型为 BIGINT,并移动到 col2 列后面
ALTER TABLE example_db.my_table
    MODIFY COLUMN col1 BIGINT DEFAULT "1" AFTER col2;
1
2
3

# 2.4 创建表 (opens new window)

CREATE TABLE [IF NOT EXISTS] [database.]table
(
    column_definition_list,
    [index_definition_list]
)
[engine_type]
[keys_type]
[table_comment]
[partition_info]
distribution_info
[rollup_list]
[properties]
[extra_properties]
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.4.1 key_type 三种数据模型

  • DUPLICATE KEY(默认):其后指定的列为排序列。
  • AGGREGATE KEY:其后指定的列为维度列。
  • UNIQUE KEY:其后指定的列为主键列。
DUPLICATE KEY(col1, col2),
AGGREGATE KEY(k1, k2, k3),
UNIQUE KEY(k1, k2)
1
2
3

# 三、物化视图

# 文档

物化视图文档:物化视图 (opens new window) 创建物化视图:CREATE-MATERIALIZED-VIEW (opens new window) 删除物化视图:DROP MATERIALIZED VIEW (opens new window) 查看物化视图:SHOW CREATE MATERIALIZED VIEW (opens new window)

# 注意事项

  1. Hive中的表格必须为文本格式
  2. PALO三种数据模型可参考官方文档 (opens new window)
更新时间: 8/25/2023, 10:50:52 AM