当前位置: 首页 > article >正文

Doris集群搭建

1、虚拟机创建

创建三台centos7虚拟机,分别命名为hadoop102(192.168.10.102)、hadoop103(192.168.10.103)、hadoop104(192.168.10.104)。

2、虚拟机设置

2.1 关闭防火墙

查看状态

firewall-cmd --state

刷新

firewall-cmd --reload

启动/停止

systemctl start firewalld.service
systemctl stop firewalld.service

启用/禁止 开机启动

systemctl enable firewalld.service 
systemctl disable firewalld.service 

2.2  新建一个普通用户

新建用户

adduser doris

设置密码

passwd doris

sudo权限

方式1

usermod -aG wheel doris

方式2

修改/etc/sudoers文件,在%wheel这行下面添加一行

doris  ALL=(ALL)     NOPASSWD:ALL

2.3 时钟同步

使用ntpdate

使用如下命令检查是否安装,没有安装运行安装命令安装即可

rpm -q ntpdate

同步系统时间

公共NTP服务器

  • pool.ntp.org
  • time.google.com
  • time.windows.com

使用ntpdate命令同步系统时间

sudo ntpdate pool.ntp.org

 也可以选择阿里云时钟服务器

sudo ntpdate ntp.aliyun.com 

硬件时间同步

将系统时间写入硬件时钟,以确保重启后时间仍然准确

sudo hwclock -w

设置时间同步定时任务

# 设置时间同步定时任务,每小时执行一次
(crontab -l 2>/dev/null; echo "0 * * * * /usr/sbin/ntpdate pool.ntp.org; /sbin/hwclock -w") | crontab -

2.4 免密登录

在每台机器上生成SSH密钥对

ssh-keygen -t rsa

将公钥复制到其他机器

以103为例

ssh-copy-id hadoop103

登录测试

ssh hadoop103

2.5 关闭SELinux

查看 SElinux 状态

getenforce

Enforcing表示开启,Permissive表示临时关闭,disabled表示永久关闭

临时关闭 SElinux

sudo setenforce 0 

重启后失效 

永久关闭 SElinux

sudo vi /etc/sysconfig/selinux

将SELINUX设置为disabled,重新启动。

2.6 关闭swap分区

临时关闭

sudo swapoff -a

2.7 调整文件句柄数和进程数限制

修改配置文件

sudo vi /etc/security/limits.conf

添加如下内容

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

覆盖特定的配置文件

sudo vi /etc/security/limits.d/20-nproc.conf

添加如下内容

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

检查生效

ulimit -a

2.8 虚拟内存区域限制

临时修改

sudo sysctl -w vm.max_map_count=2000000

重启失效

永久修改

sudo vi /etc/sysctl.conf

添加

vm.max_map_count=2000000

执行如下命令生效 

sudo sysctl -p

检查是否生效

sysctl vm.max_map_count

2.9 临时禁用透明大页

  echo never > /sys/kernel/mm/transparent_hugepage/enabled

分发、查看进程脚本和安装JDK,均参考尚硅谷即可。


3、Doris

3.1 下载安装

访问官网:Apache Doris - Download | Easily deploy Doris anywhere - Apache Doris

 也可以点击Copy link复制下载链接,执行如下命令下载:

wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.6-bin-x64.tar.gz
tar -zxvf apache-doris-2.1.6-bin-x64.tar.gz -C /opt/module/
mv apache-doris-2.1.6-bin-x64/ apache-doris

 解压到了/opt/module目录下,改名为apache-doris,通过xsync脚本分发给hadoop103和hadoop104,并且都配置了环境变量。

vim /etc/profile.d/my_env.sh

里面有JDK的环境变量 

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk-1.8.0
export PATH=$PATH:$JAVA_HOME/bin
# DORIS_HOME
export DORIS_HOME=/opt/module/apache-doris
export PATH=$PATH:$DORIS_HOME/be/bin
export PATH=$PATH:$DORIS_HOME/fe/bin

3.2 部署FE(Frontend)节点

3.2.1 hadoop102(Master FE)

创建元数据目录

mkdir -p /opt/module/data/doris-meta

 把该目录分发给hadoop103和hadoop104

配置fe.conf文件

cd /opt/module/apache-doris/fe/conf
vim fe.conf

端口选择了默认的端口 ,添加如下即可

meta_dir = /opt/module/data/doris-meta
priority_networks = 192.168.10.0/24

启动

/opt/module/apache-doris/fe/bin/start_fe.sh --daemon

3.2.2 hadoop103和hadoop104(Follower FE)

将hadoop102的fe分发给hadoop103和hadoop104即可,首次启动,需要使用--helper参数指向Master FE。

/opt/module/apache-doris/fe/bin/start_fe.sh --helper 192.168.10.102:9010 --daemon

之后使用如下命令启动即可

/opt/module/apache-doris/fe/bin/start_fe.sh --daemon

3.2.3 在Master FE上添加Follower

我的MySQL是安装在本地的,打开命令提示符,无密登录

mysql -h hadoop102 -P 9030 -u root

或者通过navicat连接

执行如下语句

ALTER SYSTEM ADD FOLLOWER "192.168.10.103:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.10.104:9010";

3.2.4  访问FE的UI界面

http://192.168.10.102:8030


3.3 部署BE(Backend)节点

3.3.1 hadoop102、hadoop103 和 hadoop104 上的 BE 配置

目录创建

每台机器的 /opt/module/data/ 目录下创建了对应的 be_data102(103、104)子目录,BE节点使用这些目录来存储数据

配置be.conf文件

对于每台机器,需要编辑 be.conf 文件以指定storage_root_path

对于 hadoop102:

cd /opt/module/apache-doris/be/conf
vim be.conf
storage_root_path=/opt/module/data/be_data102

对于 hadoop103:

cd /opt/module/apache-doris/be/conf
vim be.conf
storage_root_path=/opt/module/data/be_data103

对于 hadoop104:

cd /opt/module/apache-doris/be/conf
vim be.conf
storage_root_path=/opt/module/data/be_data104

确保每台机器的 priority_networks 配置项保持不变

priority_networks = 192.168.10.0/24

3.3.2 配置权限

确保 Doris 运行的用户(通常是 doris 或者部署 Doris 的用户)有权限读写这些新目录。

chown -R doris:doris /opt/module/data/be_data102
chown -R doris:doris /opt/module/data/be_data103
chown -R doris:doris /opt/module/data/be_data104

3.3.3 每台启动BE

/opt/module/apache-doris/be/bin/start_be.sh --daemon

 验证配置

可以通过访问 BE 的 Web 界面 http://<BE_IP>:8040/varz 来查看当前配置项,确保 storage_root_path 已经正确设置为对应的 be_data 目录

3.3.4 在 Master FE 上添加 BE 节点

确保在 Master FE 上添加了所有 BE 节点

ALTER SYSTEM ADD BACKEND "192.168.10.102:9050";
ALTER SYSTEM ADD BACKEND "192.168.10.103:9050";
ALTER SYSTEM ADD BACKEND "192.168.10.104:9050";

3.3.5 访问BE的UI界面

http://192.168.10.102:8040


4、验证集群状态

SHOW FRONTENDS;
SHOW BACKENDS;

5、seatunnel导入本地MySQL数据到Doris中

5.1 下载按照seatunnel

进入seatunnel的官方网站:Apache SeaTunnel,我这里下载的是2.3.6版本。

下载后上传到虚拟机,并且解压到对应目录,改名为seatunnel-2.3.6。

5.2 下载对应的Connector 插件

进入seatunnel的config目录

cd /opt/module/seatunnel-2.3.6/config

修改plugin_config,这里只需要两个即可。 

 vim plugin_config
--connectors-v2--
connector-jdbc
connector-doris
--end--
~       

 保存退出后执行

sh bin/install-plugin.sh

进入seatunnel目录下的connectors/目录下即可看见刚才下载的jar包

5.3 MySQL驱动jar包

进入MySQL官网下载对应版本的驱动jar,上传到seatunnel的lib目录下

5.4 单表导入

如果在本地数据库中有一张表的数据需要导入到Doris中,那么需要提前在下游Doris中提前创建一张一样的表。(我在Doris中创建了一样的数据库news_data)

编写配置文件,这里放在config目录下,内容如下:

env {
  parallelism = 2
  job.mode = "BATCH"
}
source {
    Jdbc {
        url = "jdbc:mysql://192.168.10.1:3306/news_data"
        driver = "com.mysql.cj.jdbc.Driver"
        connection_check_timeout_sec = 100
        user = "debezium"
        password = "123456"
        table_path = ""
        query = "select * from user_information"
    }
}
sink {
   Doris {
          fenodes = "192.168.10.102:8030"
          username = "root"
          password = ""
          database = "news_data"
          table = "user_information"
          sink.enable-2pc = "true"
          sink.label-prefix = "test"
          doris.config = {
            format = "json"
            read_json_by_line="true"
          }
      }
}

本地的数据库的连接的用户要开启对应的权限,可以参考之前的seatunnel全量数据导入HDFS时候给debezium用户开启的权限过程,最好不要直接用root用户,我的Doris是还没有设置密码,所以没有填写密码。

来到bin目录下执行如下命令:

./seatunnel.sh --config /opt/module/seatunnel-2.3.6/config/mysql_doris.conf -m local

浏览器输入hadoop102:8030,登录进去即可看见对应的数据库、表及其数据

5.5 多表导入

一定要提前在下游创建对应的表

这里通过写脚本的形式来运行,脚本(mysql_to_doris)如下:

#!/bin/bash

# MySQL数据库信息
MYSQL_HOST="192.168.10.1"
MYSQL_PORT="3306"
MYSQL_USER="debezium"
MYSQL_PASS="123456"
MYSQL_DB="shop_data"

# Doris数据库信息
DORIS_HOST="192.168.10.102"
DORIS_PORT="8030"
DORIS_USER="root"
DORIS_PASS=""
DORIS_DB="shop_data"

# SeaTunnel配置文件目录
SEATUNNEL_CONF_DIR="/opt/module/seatunnel-2.3.6/config"

# 生成配置文件并执行SeaTunnel
tables=$(mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} -D${MYSQL_DB} -e "SHOW TABLES;" | awk '{ print $1 }' | grep -v 'Tables_in_')

for table in $tables; do
    # 生成配置文件名
    conf_file="${SEATUNNEL_CONF_DIR}/${table}_doris.conf"
    
    # 写入配置文件内容
    cat > ${conf_file} << EOF
env {
  parallelism = 2
  job.mode = "BATCH"
}
source {
    Jdbc {
        url = "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DB}"
        driver = "com.mysql.cj.jdbc.Driver"
        connection_check_timeout_sec = 100
        user = "${MYSQL_USER}"
        password = "${MYSQL_PASS}"
        table_path = ""
        query = "select * from ${table}"
    }
}
sink {
   Doris {
          fenodes = "${DORIS_HOST}:${DORIS_PORT}"
          username = "${DORIS_USER}"
          password = "${DORIS_PASS}"
          database = "${DORIS_DB}"
          table = "${table}"
          sink.enable-2pc = "true"
          sink.label-prefix = "test"
          doris.config = {
            format = "json"
            read_json_by_line="true"
          }
      }
}
EOF

    # 执行SeaTunnel任务
    /opt/module/seatunnel-2.3.6/bin/seatunnel.sh --config ${conf_file} -m local

    # 删除配置文件
    rm -f ${conf_file}
done

 给脚本赋予权限

chmod 777 mysql_to_doris

执行脚本

./mysql_to_doris

获取数据库表名并循环处理

tables=$(mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} -D${MYSQL_DB} -e "SHOW TABLES;" | awk '{ print $1 }' | grep -v 'Tables_in_')
for table in $tables; do

这一部分是获取MySQL数据库中所有表名的关键步骤:

  • mysql 命令用于连接到MySQL数据库并执行SQL命令。
    • -h${MYSQL_HOST} 指定数据库主机。
    • -P${MYSQL_PORT} 指定数据库端口。
    • -u${MYSQL_USER} 指定数据库用户。
    • -p${MYSQL_PASS} 指定数据库密码。
    • -D${MYSQL_DB} 指定数据库名。
    • -e "SHOW TABLES;" 执行SQL命令来显示所有表。
  • awk '{ print $1 }' 通过awk命令提取SHOW TABLES;命令输出的第一列,即表名。
  • grep -v 'Tables_in_' 用于过滤掉SHOW TABLES;命令输出中的第一行,它通常包含Tables_in_${MYSQL_DB}这样的文本,这不是表名。

通过管道组合这些命令,最终得到一个包含所有表名的字符串tables


http://www.kler.cn/a/375037.html

相关文章:

  • 【MySQL】十三,关于MySQL的全文索引
  • Linux文件目录 --- touch命令创建文件
  • GPUStack v0.4.1 单节点与多节点安装与部署指南 Docker PowerShell
  • GFPS扩展技术原理(七)-音频切换消息流
  • IIC驱动EEPROM
  • EasyExcel 模板+公式填充
  • 服务器被攻击黑洞后如何自救
  • Debian下载ISO镜像的方法
  • yum不能使用: cannot find a valid baseurl for repo: base/7/x86_64
  • ASP.NET创建网站(一):创建新项目login页面设计
  • Gradio DataFrame分页功能详解:从入门到实战
  • 你的网站需要防护吗?
  • linux使用jar包部署solr
  • Partition架构
  • CentOS9 Stream 设置禁用IPV6
  • CSP-J复赛集训200-300分(19): [2024 CSP-J 复赛] T3:小木棍
  • 2024 年河南省高等职业教育技能大赛实施方案概述
  • 开源协议类型及长安链开源协议介绍
  • Matlab自学笔记四十:日期时间型数据的关系运算:比较大小、比较时间先后、判断是否在两个时间之间
  • 大数据-199 数据挖掘 机器学习理论 - 决策树 模型 决策与条件 香农熵计算
  • [CSP篇] CSP2024 游记(下)
  • 智能码二维码zhinengma.cn如何赋能工业产品质量安全追溯
  • uniapp和vite项目配置多环境编译,增加测试环境变量配置--mode test
  • 鸿蒙Harmony-多边形绘制组件Polygon使用详解
  • Rust精简核心笔记:第三波,基础语法完结篇
  • 基于Matlab PCA人脸识别