doris 作为新型大数据分布式数据库,其数据存储结构和查询引擎对大数据处理有更优的解决方案。
安装部署
docker run -it apache/incubator-doris:build-env-1.3
docker run -it --rm -v /data/m2/repo:/root/.m2/repository -v /data/software/incubator-doris/:/root/incubator-doris/ apache/incubator-doris:build-env-1.3
$ alternatives --set java java-1.8.0-openjdk.x86_64
$ alternatives --set javac java-1.8.0-openjdk.x86_64
$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0
/data/m2/repo/
sh build.sh
关于broker、FE、BE
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
注1:
·FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
·BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
·测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
·所有部署节点关闭 Swap。
注2:
FE 节点的数量
FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower,具体含义见 元数据设计文档)。
FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
Follower 的数量必须为奇数,Observer 数量随意。
根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
手动部署
1.FE 部署
拷贝 FE 部署文件到指定节点
将源码编译生成的 output 下的 fe 文件夹拷贝到 FE 的节点指定部署路径下。
2.配置 FE
配置文件为 conf/fe.conf。其中注意:meta_dir:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录。
注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置
fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
3.启动FE
sh bin/start_fe.sh --daemon
FE进程启动进入后台执行。日志默认存放在 fe/log/ 目录下。如启动失败,可以通过查看 fe/log/fe.log 或者 fe/log/fe.out 查看错误信息。
如需部署多 FE,请参见 “FE 扩容和缩容” 章节
4.BE 部署
拷贝 BE 部署文件到所有要部署 BE 的节点 将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点的指定部署路径下。
5.修改所有 BE 的配置
修改 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。
注意:如果是SSD磁盘要在目录后面加上.SSD,HDD磁盘在目录后面加.HDD
查看磁盘是ssd 还是 hdd
a1. 判断cat /sys/block//queue/rotational的返回值(其中为你的硬盘设备名称,例如sda等等),如果返回1则表示磁盘可旋转,那么就是HDD了;反之,如果返回0,则表示磁盘不可以旋转,那么就有可能是SSD了。
[cheshi@cheshi-laptop2 ~]$ cat /sys/block/nvme0n1/queue/rotational
0
[cheshi@cheshi-laptop2 ~]$ grep ^ /sys/block/*/queue/rotational
/sys/block/dm-0/queue/rotational:0
/sys/block/dm-1/queue/rotational:0
/sys/block/dm-2/queue/rotational:0
/sys/block/nvme0n1/queue/rotational:0
/sys/block/sda/queue/rotational:1
[cheshi@cheshi-laptop2 ~]$
a2. 可以通过fdisk命令查看,参数-l表示列出磁盘详情。在输出结果中,以Disk开头的行表示磁盘简介,下面是一些详细参数,我们可以试着在这些参数中寻找一些HDD特有的关键字,比如:”heads”(磁头),”track”(磁道)和”cylinders”(柱面)。
下面分别是HDD和SSD的输出结果,HDD拷贝自网络。
[cheshi@cheshi-laptop2 ~]$ sudo fdisk -l
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xad91c214
......
[cheshi@cheshi-laptop2 ~]$
示例如下:
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
BE webserver_port端口配置
如果 be 部署在 hadoop 集群中,注意调整 be.conf 中的 webserver_port = 8040 ,以免造成端口冲突
在 FE 中添加所有 BE 节点
BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client(下载MySQL 5.7 (opens new window)) 连接到 FE:
./mysql-client -h host -P port -uroot
mysql -h 127.0.0.1 -P 9030 -uroot
set enable_insert_strict=true
ALTER SYSTEM ADD BACKEND "localhost:9050";
ALTER SYSTEM ADD BACKEND "vm:9050";
ALTER SYSTEM DECOMMISSION BACKEND "127.0.0.1:9050"
ALTER SYSTEM DROP BACKEND "127.0.0.1:9050";
ALTER SYSTEM DROP BACKEND 10002;
SET PASSWORD = PASSWORD('123456')
SET PASSWORD = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
DROP
SHOW PROC '/backends';
其中 host 为 FE 所在节点 ip;port 为 fe/conf/fe.conf 中的 query_port;默认使用 root 账户,无密码登录。
登录后,执行以下命令来添加每一个 BE:
ALTER SYSTEM ADD BACKEND “host:port”;
其中 host 为 BE 所在节点 ip;port 为 be/conf/be.conf 中的 heartbeat_service_port。
启动 BE
sh bin/start_be.sh --daemon
BE 进程将启动并进入后台执行。日志默认存放在 be/log/ 目录下。如启动失败,可以通过查看 be/log/be.log 或者 be/log/be.out 查看错误信息。
查看BE状态
使用 mysql-client 连接到 FE,并执行 SHOW PROC ‘/backends’; 查看 BE 运行情况。如一切正常,isAlive 列应为 true。
#(可选)FS_Broker 部署 Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 和百度云 BOS 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。
拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
修改相应 Broker 配置
在相应 broker/conf/ 目录下对应的配置文件中,可以修改相应配置。
启动 Broker
sh bin/start_broker.sh --daemon 启动 Broker。
添加 Broker
要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。
使用 mysql-client 连接启动的 FE,执行以下命令:
ALTER SYSTEM ADD BROKER broker_name "host1:port1","host2:port2",...;
其中 host 为 Broker 所在节点 ip;port 为 Broker 配置文件中的 broker_ipc_port。
查看 Broker 状态
使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:SHOW PROC “/brokers”;
注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor (opens new window)。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh 启动即可。也可参考 这里(opens new window)
扩容缩容
CREATE TABLE `shopee_hot_tag` (
`platform_id` int(11) NOT NULL DEFAULT "0" COMMENT "站点ID",
`cat_id` int(11) NOT NULL DEFAULT "0" COMMENT "商品最后一级类目ID",
`tag_id` varchar(255) NOT NULL DEFAULT "" COMMENT "标签ID",
`id` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "",
`cat_id_1` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "商品1级类目ID",
`cat_id_2` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "商品2级类目ID",
`cat_id_3` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "商品3级类目ID",
`tag_name` varchar(1024) REPLACE NOT NULL DEFAULT "" COMMENT "标签名称",
`update_time` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "更新时间",
`tag_first_time` int(11) REPLACE NOT NULL DEFAULT "0" COMMENT "标签起始时间",
`tag_last_time` int(11) REPLACE NULL COMMENT "标签结束时间",
`date` date REPLACE NULL COMMENT "更新时间"
) ENGINE=OLAP
AGGREGATE KEY(`platform_id`, `cat_id`, `tag_id`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`platform_id`, `cat_id`, `tag_id`) BUCKETS 32
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"storage_medium" = "SSD",
"storage_format" = "V2"
);
CREATE TABLE `shopee_hot_tag` (
`platform_id` int(11) NOT NULL DEFAULT "0" COMMENT "站点ID",
`cat_id` int(11) NOT NULL DEFAULT "0" COMMENT "商品最后一级类目ID",
`tag_id` varchar(255) NOT NULL DEFAULT "" COMMENT "标签ID",
`id` int(11) NOT NULL DEFAULT "0" COMMENT "",
`cat_id_1` int(11) NOT NULL DEFAULT "0" COMMENT "商品1级类目ID",
`cat_id_2` int(11) NOT NULL DEFAULT "0" COMMENT "商品2级类目ID",
`cat_id_3` int(11) NOT NULL DEFAULT "0" COMMENT "商品3级类目ID",
`tag_name` varchar(1024) NOT NULL DEFAULT "" COMMENT "标签名称",
`update_time` int(11) NOT NULL DEFAULT "0" COMMENT "更新时间",
`tag_first_time` int(11) NOT NULL DEFAULT "0" COMMENT "标签起始时间",
`tag_last_time` int(11) NULL COMMENT "标签结束时间",
`date` date NULL COMMENT "更新时间"
) ENGINE=OLAP
unique KEY(`platform_id`, `cat_id`, `tag_id`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`platform_id`, `cat_id`, `tag_id`) BUCKETS 32
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"storage_medium" = "SSD",
"storage_format" = "V2"
);
SET exec_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";