使用 VMware 搭建 Ubuntu 环境并部署 Doris 及随机 DDL 小程序

该文章已生成可运行项目,

1.根据安装向导完成完成


问题一:要是在安装向导中发现显示不全,button被隐藏解决方法

使用Ctrl+Alt+T出现命令行,在命令行中输入以下指令

解释:1.使用xrandr查看支持分辨率

           2.根据自己需求选择分辨率(注意:1680x1050,是乘号哦)

2.安装完成之后重新启动

3.使用docker配置doris

(1)更新已安装软件包

sudo apt upgrade(第一次更新,时间会比较长~)

(2)安装docker

sudo apt install docker.io -y
sudo systemctl start docker   # 打开docker
sudo systemctl enable docker  # 设置开机自启动

(3)下载doris镜像文件

sudo docker pull registry.cn-hangzhou.aliyuncs.com/freeoneplus/doris:2.1.4-all

还可以通过Docker Hub、Apache官方网站获取镜像文件。推荐使用阿里云下载,网速较快~

(4)查看容器状态

sudo docker ps | grep doris-2.1.4

(5)进入容器内部

sudo docker exec -it doris-2.1.4 /bin/bash 

(6)连接doris fe客户端

root@41524e2800b5:/opt/apache-doris# mysql -h 127.0.0.1 -P 9030 -u root

注意:此时连接的mysql是Doris FE提供的兼容MYSQL协议服务,因此需要明确主机和端口(FE默认端口为9030)。且需要在容器内进行

(7)验证服务状态 SHOW BACKENDS;

若 Alive 列显示 true,说明 BE 节点正常运行。

(8)创建需要的数据库和表

(9)安装pip

sudo apt install python3-pip

(10)执行代码

import pymysql
import random
import string
import time

# --------------------- 1. Doris 连接配置---------------------
DORIS_CONFIG = {
    "host": "127.0.0.1",
    "port": 9030,
    "user": "root",
    "password": "",
    "database": "test_ddl",
    "charset": "utf8"
}

# --------------------- 2. 生成随机列名/类型 ---------------------
def generate_random_column_name():
    return "col_" + "".join(random.choices(string.ascii_lowercase, k=5))

def generate_random_column_type():
    common_types = ["INT", "BIGINT", "VARCHAR(50)", "DATE", "DECIMAL(10,2)"]
    return random.choice(common_types)

# --------------------- 3. 生成随机DDL ---------------------
def generate_random_ddl(table_name):
    action = random.choice(["ADD", "DROP"])
    target_column = generate_random_column_name()
    if action == "ADD":
        column_type = generate_random_column_type()
        ddl = f"ALTER TABLE {table_name} ADD COLUMN {target_column} {column_type} COMMENT 'random_generated';"
    else:
        ddl = f"ALTER TABLE {table_name} DROP COLUMN {target_column};"
    return ddl, action, target_column

# --------------------- 4. 核心:等待表结构变更完成 ---------------------
def wait_for_schema_change(cursor, table_name, action, target_column):
    print(f"等待 {action} COLUMN {target_column} 完成...")
    while True:
        cursor.execute(f"DESCRIBE {table_name};")
        current_columns = [row[0] for row in cursor.fetchall()]
        if action == "ADD" and target_column in current_columns:
            print(f"增列完成:{target_column} 已添加")
            return True
        if action == "DROP" and target_column not in current_columns:
            print(f"删列完成:{target_column} 已移除(或不存在)")
            return True
        print(f"等待中,当前表列:{current_columns}")
        time.sleep(2)

# --------------------- 5. 主逻辑:串行执行随机DDL ---------------------
def run_random_ddl_serially(table_name, total_operations=3):
    try:
        conn = pymysql.connect(**DORIS_CONFIG)
        cursor = conn.cursor()
        print(f"成功连接Doris数据库:{DORIS_CONFIG['database']}")
    except Exception as e:
        print(f"连接失败:{str(e)}")
        return

    try:
        for i in range(total_operations):
            print(f"\n===== 第 {i+1}/{total_operations} 次DDL =====")
            ddl, action, target_column = generate_random_ddl(table_name)
            print(f"生成DDL:{ddl}")

            try:
                cursor.execute(ddl)
                conn.commit()
                print(f"DDL提交成功")
            except Exception as e:
                if "Unknown column" in str(e) and action == "DROP":
                    print(f"删列失败:{target_column} 不存在,跳过等待")
                    continue
                conn.rollback()
                print(f"DDL执行失败:{str(e)},跳过")
                continue

            wait_for_schema_change(cursor, table_name, action, target_column)
        print(f"\n===== 所有 {total_operations} 次DDL执行完成 ======")
    finally:
        cursor.close()
        conn.close()
        print(f"断开Doris连接")

# --------------------- 程序入口(启动小程序) ---------------------
if __name__ == "__main__":
    TARGET_TABLE = "test_ddl_table"  # 你创建的测试表
    TOTAL_OPERATIONS = 3  # 执行3次DDL(可修改次数)
    run_random_ddl_serially(TARGET_TABLE, TOTAL_OPERATIONS)

使用DESCRIBE test_ddl_table查看表结构

新增列:col_htatn

4. 流程梳理

本文从 “环境搭建→服务部署→程序开发” 形成完整闭环,关键节点包括:

  1. Ubuntu 安装:解决显示不全问题,确保基础环境可用;
  2. Doris 部署:基于 Docker 快速启动,补充 “创建容器”“建库建表” 等关键缺失步骤,避免新手卡壳;
  3. 小程序开发:通过 Python 实现 “随机 DDL 生成 + 串行执行”,适配 Doris 2.1.4 异步任务特性,解决系统表不存在的兼容性问题。 

      在安装Ubuntu过程中,遇到了最大的问题,当时内存设置太小了,导致在配置doris时需要安装许多文件,出现了内存不够的情况,改了内存,但还是出现了问题,在网上搜了好多方法,都没解决,最后只好重装系统,后续还需再研究下~

      第一次接触doris,经历了好多挫折,好在最后一遍重装系统一切顺利~

5.在Doris中常用的Linux指令

1.文件与目录操作

  • 查看 Doris 配置文件

    # 查看fe.conf配置
    cat /path/to/doris/fe/conf/fe.conf
    
    # 查看be.conf配置
    vi /path/to/doris/be/conf/be.conf
    
  • 查看数据目录占用空间

    # 查看Doris存储目录大小
    du -sh /path/to/doris/storage
    
    # 查看各目录详细占用
    du -h --max-depth=1 /path/to/doris/
    
  • 创建与授权目录

    # 创建Doris数据目录
    mkdir -p /data/doris/{fe,be,broker}
    
    # 授权给doris用户
    chown -R doris:doris /data/doris
    

2. 进程管理

-e:显示所有进程(包括系统中的所有用户的进程)

-f:以全格式(full format)显示进程信息,输出内容更详细,包括:

  • 查看 Doris 进程状态

    # 查看FE进程
    ps -ef | grep fe.jar
    
    # 查看BE进程
    ps -ef | grep be/lib
    
    # 查看所有相关进程
    jps | grep -E "FeServer|BeServer"
    
  • UID(进程所属用户 ID)
  • PID(进程 ID)
  • PPID(父进程 ID)
  • C(CPU 使用率)
  • STIME(进程启动时间)
  • TTY(进程关联的终端)
  • TIME(进程占用的 CPU 时间)
  • CMD(启动进程的命令及参数)
  • 启动 / 停止服务

jps:列出当前系统中所有正在运行的 Java 进程(JVM 进程)

# 启动FE
sh /path/to/doris/fe/bin/start_fe.sh --daemon

# 停止BE
sh /path/to/doris/be/bin/stop_be.sh

# 强制终止进程
kill -9 <进程ID>

3. 日志查看

  • 实时查看日志

    # 实时查看FE日志
    tail -f /path/to/doris/fe/log/fe.log
    
    # 实时查看BE日志
    tail -f /path/to/doris/be/log/be.INFO
    

tail:默认输出最后十行

-f:持续监听文件的变化,并实时输出新增的内容

  • 搜索日志关键字

    # 查找FE日志中的错误信息
    grep -i "error" /path/to/doris/fe/log/fe.log
    
    # 查找特定时间的日志
    grep "2023-10-01 10:00" /path/to/doris/be/log/be.INFO
    

-i:忽略大小写

4. 网络与端口

ss 是替代netstat的新更快工具,速度

         -t:TCP,-u:UDP,-l:监听中,-n:数字显示 IP / 端口

  • 检查端口占用

    # 检查FE的http端口(默认8030)
    netstat -tunl | grep 8030
    
    # 检查BE的thrift端口(默认9060)
    ss -tunl | grep 9060
    
  • 测试节点间连通性

    # 测试到FE节点的网络连通性
    ping fe_hostname
    
    # 测试端口连通性
    telnet be_hostname 9060
    

5. 系统监控

  • 查看系统资源使用

    # 查看CPU和内存使用
    top
    
    # 查看内存详细使用
    free -h
    
    # 查看磁盘I/O
    iostat
    
  • 查看网络流量

    # 实时监控网络带宽
    iftop
    
    # 查看网络连接统计
    netstat -an | grep ESTABLISHED | wc -l
    

6. 集群管理

  • 同步配置文件到其他节点

    # 复制FE配置到其他节点
    scp /path/to/doris/fe/conf/fe.conf user@other_fe_host:/path/to/doris/fe/conf/
    
  • 查看节点磁盘挂载

    # 查看Doris数据盘挂载情况
    df -h | grep /data/doris
    

    df:查看磁盘分区使用情况 

  • 定时任务

    # 1.编辑定时任务(如日志清理)
    crontab -e
    
    # 2.查看当前用户的定时任务列表
    crontab -l
    
    # 3.删除当前用户的所有定时任务
    crontab -r
    
    # 4.添加日志清理任务(每周日凌晨3点执行)
    0 3 * * 0 find /path/to/doris/fe/log -name "fe.log.*" -mtime +7 -delete

定时任务命令 = 时间规则 + 运行命令

时间规则:  分 时 日 月 周

  • 0:分钟为 0(整点执行)
  • 3:小时为 3(凌晨 3 点)
  • *:日为任意(不限制日期)
  • *:月为任意(不限制月份)
  • 0:周为 0(表示周日,Linux 中 0 和 7 都代表周日)

运行命令:

  • find /path/to/doris/fe/log:在 doris/fe/log 目录下查找文件。
  • -name "fe.log.*":只匹配文件名以 fe.log. 开头的文件(通常是 Doris FE 的滚动日志,如 fe.log.20231001)。
  • -mtime +7:只匹配 修改时间超过 7 天 的文件(+7 表示 7 天前及更早)。
  • -delete:删除符合上述条件的文件。

命令作用:删除 7 天前的 Doris FE 历史日志文件,避免日志占用过多磁盘空间。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值