赞
踩
实测 CentOS 7.6 和 7.9都可用,CentOS安装包为:标准安装盘DVD版,如果系统安装的是精简版,需要挂载DVD版或者自行下载依赖。
参考文档
Doris 下载地址:2.1.1 ( Latest ) -> x64 ( avx2 ) -> Binary
下载免安装的 MySQL 客户端:8.0.36 -> Red Hat Enterprise Linux -> Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit) -> RPM Bundle
使用软件包:
1.硬件设置
创建目录:
mkdir -p /home/soft/package
mkdir -p /home/soft/package
1.1 设置系统最大打开文件句柄数
- vi /etc/security/limits.conf
- # 按键盘 shift+g, 加入
- * soft nofile 65536
- * hard nofile 65536
1.2 时钟同步
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
1.2.1 安装NTP软件
查询主机Linux系统版本
cat /etc/redhat-release
直接下载地址:
http://mirror.centos.org/centos/7/os/x86_64/Packages/ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
http://mirror.centos.org/centos/7/os/x86_64/Packages/ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
http://mirror.centos.org/centos/7/os/x86_64/Packages/autogen-libopts-5.18-5.el7.x86_64.rpm
- # 在只有这三个包的目录里面执行
- rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
- rpm -ivh ntp*
1.2.2 配置 NTP时间同步源
1.2.2.1 ntp时钟服务端配置
修改/etc/ntp.conf 文件配置
vi /etc/ntp.conf
注释掉
#restrict default nomodify notrap nopeer noquery
注释原有的,添加新的(按照自己的服务器地址修改)
- #server 0.centos.pool.ntp.org iburst
- #server 1.centos.pool.ntp.org iburst
- #server 2.centos.pool.ntp.org iburst
- #server 3.centos.pool.ntp.org iburst
-
- # 默认的一个内部时钟数据,在没有外部NTP服务器时,它为局域网用户提供服务
- server 127.127.1.0 stratum 3
-
- # 表示网关为192.168.5.0,子网掩码为255.255.255.0,网段为192.168.5.0-192.168.5.255的机器可通过该服务端时间校准
- restrict 192.168.5.0 mask 255.255.255.0
- # 允许修改本机时间
- restrict 192.168.5.160 nomodify notrap noquery nopeer
其他的一些配置【可选】
- # 不允许来自公网上ipv4和ipv6客户端的访问
- restrict -4 default kod notrap nomodify nopeer noquery limited
- restrict -6 default kod notrap nomodify nopeer noquery limited
重启
- systemctl restart ntpd
- systemctl start ntpd
- systemctl enable ntpd
查看服务是否运行
- ps -ef |grep ntpd
- 或者
- systemctl status ntpd
- 或者
- ntpq -p
查看同步状态
timedatectl status
1.2.2.2 ntp时钟客户端配置
修改/etc/ntp.conf 文件配置
vi /etc/ntp.conf
注释原有的时间服务器地址,添加新的ntp时间服务器地址
- #server 0.centos.pool.ntp.org iburst
- #server 1.centos.pool.ntp.org iburst
- #server 2.centos.pool.ntp.org iburst
- #server 3.centos.pool.ntp.org iburst
- # ntp时间服务器地址
- server 192.168.5.160 prefer
重启
- systemctl restart ntpd
- systemctl enable ntpd
查看服务是否运行
- systemctl status ntpd
- 或者
- ps -ef |grep ntpd
测试是否成功
ntpstat
出现失败,需要等待大约2-3分钟左右
- unsynchronised
- time server re-starting
- polling server every 8 s
再执行ntpstat出现成功
- synchronised to NTP server (172.17.100.8) at stratum 7
- time correct to within 951 ms
- polling server every 64 s
查看同步状态
timedatectl status
1.2.2.3 关闭防火墙服务或者开启端口,关闭selinux
如果你的服务器有防火墙,确保UDP端口123(NTP默认端口)是开放的,以便其他设备可以与NTP服务器通信。
- # 开端口123(CentOS)
- firewall-cmd --permanent --add-port=123/udp
- firewall-cmd --reload
- # 查询端口
- firewall-cmd --list-ports |grep 123
-
- # 开端口123(Ubuntu)
- ufw allow 123/udp
或者直接关闭防火墙,禁用开机启动(不建议)
- systemctl stop firewalld
- systemctl disable firewalld
关闭selinux服务,设置selinux策略为“disabled”。
- setenforce 0
- sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
1.2.2.4 设置本地时间
设置本地时间方便测试
date -s "2024-03-10 00:00:00"
1.2.2.5 手动同步与定时同步
在配置完成后,可以尝试手动同步时间以验证NTP服务的配置是否正确。
若ntp服务正在运行,则需要执行以下命令,先停止ntp服务(因为ntpdate工具和ntp守护进程冲突,因此执行ntpdate命令时需要保证ntpd进程未运行)。
systemctl stop ntpd
手动同步时间以验证NTP服务的配置
ntpdate 192.168.5.160
需要定时同步系统时间,可以使用crontab工具来设置。例如,下面的命令会每五分钟执行一次ntpdate命令进行时间同步:
crontab -e
然后在编辑窗口中加入如下内容:
*/5 * * * * /usr/sbin/ntpdate 192.168.5.160
1.2.2.6 监控和日志
你可以使用ntptime命令来查看当前系统时间与NTP服务器的时间偏差。
NTP服务的日志文件通常位于/var/log/syslog或/var/log/ntp.log,你可以查看这些日志来监控NTP服务的运行情况和解决潜在问题。
请注意,NTP服务器的配置可能因具体的网络环境和需求而有所不同。因此,在实际部署过程中,建议参考相关的官方文档和最佳实践,并根据实际情况进行调整和优化。此外,确保在配置过程中考虑到安全性和稳定性方面的因素。
常见问题及其解决方法在设置NTP时间同步服务器时,可能会遇到一些常见问题。
1.2.2.6 常见问题及其解决方法:
- 1. NTP服务未启动或未安装:
- 使用以下命令安装和启动 NTP 服务:
- yum install ntp 或 apt-get install ntp
- systemctl start ntpd 或 systemctl start chronyd
- 2. 防火墙设置不正确:
- 确保防火墙已经打开并允许NTP端口(UDP 123)通过:
- firewall-cmd --add-service=ntp --permanent
- firewall-cmd --reload
- 3. 与NTP服务器的连接失败:
- 确保您的Linux主机可以连接到NTP服务器,并且NTP服务器的DNS解析正确。您可以使用以下命令检查IP地址是否可用:
- ping ntp.server.com
- 4. 时间同步失败:
- 如果时间同步失败,可能需要手动将系统时间设置为与NTP服务器时间相同:
- ntpdate -u ntp.server.com
1.3 关闭交换分区(swap)
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前(永久)禁用交换分区
1.3.1 查看交换分区信息
首先,使用 swapon --show 或 cat /proc/swaps 命令来查看当前的交换分区状态。它会列出所有当前启用的 swap 分区。如果没有输出,则表示没有 swap 分区被启用。
- swapon --show
- NAME TYPE SIZE USED PRIO
- /dev/dm-1 partition 3G 0B -2
1.3.2 永久关闭交换区,防止交换分区在启动时自动挂载
要永久关闭交换分区,需要编辑 /etc/fstab 文件,并从中删除或注释掉与交换分区相关的行。使用文本编辑器(如 vi 或 nano)打开 /etc/fstab 文件。
vi /etc/fstab
找到类似以下内容的行(可能稍有不同):
UUID=xxxx-xxxx none swap sw 0 0
或者
/dev/sdXN none swap sw 0 0
在该行前面添加 # 符号来注释掉它,然后保存并关闭文件。
1.3.3 更新 GRUB 配置(可选)
在某些情况下,你可能还需要更新 GRUB 配置以确保在下次启动时不会使用交换分区。这通常不是必需的,但如果你之前在系统引导时配置了交换分区,那么可能需要执行此步骤。
grub2-mkconfig -o /boot/grub2/grub.cfg
1.3.4 重启系统
重启的 CentOS 7 系统以确保更改生效。
reboot
1.3.5 重新查看交换分区信息
重新连接服务器,查看交换分区信息是否关闭。如果没有关闭,检查/etc/fstab文件是否还有未注释的swap内容。有可能1.3.2 里面的两个都要注释掉。
swapon --show
2.配置jdk
- cd /home/soft/package/
- tar -xzvf jdk-8u121-linux-x64.tar.gz
- mkdir -p /usr/local/java/
- mv jdk1.8.0_121/ /usr/local/java/
- vi /etc/profile
- # 按键盘 shift+g,按键盘 o 字母,回车,添加下面的目录,目录路径为自己的jdk路径
- export JAVA_HOME=/usr/local/java/jdk1.8.0_121
- export PATH=$JAVA_HOME/bin:$PATH
- # ESC退出,:wq保存
- source /etc/profile
- # 查看是否安装成功
- java -version
- # 查看JAVA_HOME路径
- echo $JAVA_HOME
3.安装mysql客户端
下载免安装的 MySQL 客户端:8.0.36 -> Red Hat Enterprise Linux -> Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit) -> RPM Bundle
- # 1.创建目录,解压包
- mkdir mysql-package
- mv mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar mysql-package/
- # 进入目录,解压出全部的rpm包
- tar -xvf mysql-8.0.36-1.el7.x86_64.rpm-bundle.tar
- # 2.删除原有的mariadb
- # 先查看一下是否已经安装了,命令:
- rpm -qa|grep mariadb
- # 删除mariadb,命令:
- rpm -e --nodeps mariadb-libs
- # 检查是否已经删除
- rpm -qa|grep mariadb
- # 3.依次安装common、libs、client。出现安装依赖关系,报错后,先安装依赖,再重复执行就可以了
- rpm -ivh mysql-community-common-8.0.36-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-8.0.36-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-8.0.36-1.el7.x86_64.rpm
- # 验证
- mysql -V
4.Frontend(FE)
主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- cd /home/soft/package/
- tar -xzvf apache-doris-2.1.1-bin-x64.tar.gz
- mkdir /home/soft/Doris/
- mv apache-doris-2.1.1-bin-x64 /home/soft/Doris/
- cd /home/soft/Doris/
配置 FE
修改 FE 配置文件 conf/fe.conf
- cd apache-doris-2.1.1-bin-x64/fe
- vi conf/fe.conf
添加 priority_networks 参数,ip的前三位加上 .0/24
priority_networks=192.168.5.0/24
开端口8030
- firewall-cmd --zone=public --add-port=8030/tcp --permanent
- firewall-cmd --reload
启动FE
- cd /home/soft/Doris/apache-doris-2.1.1-bin-x64/fe
- ./bin/start_fe.sh --daemon
查看 FE 运行状态
curl http://127.0.0.1:8030/api/bootstrap
访问http://192.168.5.160:8030/,用户名root
连接 FE
执行mysql 命令行工具连接 Doris
mysql -uroot -P9030 -h127.0.0.1
这里使用的 root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看 权限管理
-P:这里是我们连接 Doris 的查询端口,默认端口是 9030,对应的是 fe.conf 里的 query_port
-h:这里是我们连接的 FE IP 地址,如果你的客户端和 FE 安装在同一个节点可以使用 127.0.0.1。
执行下面的命令查看 FE 运行状态
mysql> show frontends\G;
如果结果里面 IsMaster、Join 和 Alive 三列均为 true,则表示节点正常。
停止 FE 节点
./bin/stop_fe.sh
5.Backend(BE)
主要负责数据存储、查询计划的执行。
配置 BE
进入到 apache-doris-2.1.1-bin-x64/be 目录
cd apache-doris-2.1.1-bin-x64/be vi conf/be.conf
5.1 修改 BE 配置文件 conf/be.conf
这里我们主要修改两个参数:priority_networks 及 storage_root ,如果你需要更多优化配置,请参考 BE 参数配置说明,进行调整。
添加 priority_networks 参数
priority_networks=192.168.5.0/24
配置 BE 数据存储目录(可选)
storage_root_path=/path/your/data_dir
注意:默认目录在 BE 安装目录的 storage 目录下。BE 配置的存储目录必须先创建好。
5.2 vm.max_map_count修改
启动如果报如下错误:
Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'.
vm.max_map_count 是一个 Linux 内核参数,它定义了单个进程可以拥有的最大内存区域(memory mapping areas)的数量。这个参数对于某些使用内存映射的应用程序来说非常重要。
- # 永久配置,在系统重启后仍然保持此设置
- vi /etc/sysctl.conf
- # 将以下行添加到 /etc/sysctl.conf 文件(或 /etc/sysctl.d/ 目录下的一个新文件中):
- vm.max_map_count=2000000
- # 然后,运行以下命令以使更改生效:
- sudo sysctl -p
5.3 开端口9050
- firewall-cmd --zone=public --add-port=9050/tcp --permanent
- firewall-cmd --reload
启动 BE
在 BE 安装目录下执行下面的命令,来完成 BE 的启动。
- cd /home/soft/Doris/apache-doris-2.1.1-bin-x64/be
- ./bin/start_be.sh --daemon
添加 BE 节点到集群(扩容)
通过 MySQL 客户端连接到 FE
mysql -uroot -P9030 -h127.0.0.1
或者访问http://192.168.5.160:8030/,PlayGround里面,选择information_schema数据库
执行下面的 SQL,将 BE 添加到集群中
- # ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
- ALTER SYSTEM ADD BACKEND "192.168.5.160:9050";
be_host_ip:这里是你 BE 的 IP 地址,和你在 be.conf 里的 priority_networks 匹配,。
heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在 be.conf 里的 heartbeat_service_port 匹配,默认是 9050。
删除 BE 节点(缩容)
- # 安全删除 BE 节点
- ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
- # 直接删除 BE 节点
- ALTER SYSTEM DROPP BACKEND "be_host:be_heartbeat_service_port";
- -- ALTER SYSTEM DROPP BACKEND "192.168.5.160:9050";
查看 BE 运行状态
你可以在 MySQL 命令行下执行下面的命令查看 BE 的运行状态。
mysql> SHOW BACKENDS\G;
或者访问http://192.168.5.160:8030/,PlayGround里面,选择information_schema数据库,执行 SHOW BACKENDS
Alive : true 表示节点运行正常
停止 BE 节点
./bin/stop_be.sh
6. 创建数据表
创建一个数据库
- create database demo;
- use demo;
创建数据表
- CREATE TABLE IF NOT EXISTS demo.example_tbl
- (
- `user_id` LARGEINT NOT NULL COMMENT "用户id",
- `date` DATE NOT NULL COMMENT "数据灌入日期时间",
- `city` VARCHAR(20) COMMENT "用户所在城市",
- `age` SMALLINT COMMENT "用户年龄",
- `sex` TINYINT COMMENT "用户性别",
- `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
- `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
- `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
- `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
- )
- AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
- DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
- PROPERTIES (
- "replication_allocation" = "tag.location.default: 1"
- );
示例数据
- 10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10
- 10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2
- 10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22
- 10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5
- 10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11
- 10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3
- 10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6
将上面的数据保存在test.csv文件中。
导入数据
这里我们通过 Stream load 方式将上面保存到文件中的数据导入到我们刚才创建的表里。
curl --location-trusted -u root: -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/example_tbl/_stream_load
-T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径
-u root : 这里是用户名密码,我们使用默认用户 root,密码是空
127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port
执行成功之后我们可以看到下面的返回信息
- {
- "TxnId": 30303,
- "Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25",
- "TwoPhaseCommit": "false",
- "Status": "Success",
- "Message": "OK",
- "NumberTotalRows": 7,
- "NumberLoadedRows": 7,
- "NumberFilteredRows": 0,
- "NumberUnselectedRows": 0,
- "LoadBytes": 399,
- "LoadTimeMs": 381,
- "BeginTxnTimeMs": 3,
- "StreamLoadPutTimeMs": 5,
- "ReadDataTimeMs": 0,
- "WriteDataTimeMs": 191,
- "CommitAndPublishTimeMs": 175
- }
NumberLoadedRows: 表示已经导入的数据记录数
NumberTotalRows: 表示要导入的总数据量
Status :Success 表示导入成功
到这里我们已经完成的数据导入,下面就可以根据我们自己的需求对数据进行查询分析了。
查询数据
- mysql> select * from example_tbl;
- mysql> select * from example_tbl where city='上海';
- mysql> select city, sum(cost) as total_cost from example_tbl group by city;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。