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

Apache Doris:监控与运维及系统调优

引言

在前几篇文章中,我们已经介绍了 Apache Doris 的基本概念、安装配置、性能优化、数据建模最佳实践、以及高级数据导入导出功能和外部系统集成。本文将进一步探讨 Doris 的监控与运维、高级查询优化技巧,以及如何进行系统调优。通过本文,读者将能够更好地管理和维护 Doris 系统,确保其稳定性和高性能。

监控与运维

1. 监控指标

Doris 提供了丰富的监控指标,可以帮助管理员监控系统的健康状况和性能。

常见监控指标
  • 集群状态:包括 FE 和 BE 节点的在线状态、负载情况等。
  • 查询性能:包括查询的响应时间、QPS(每秒查询次数)等。
  • 资源使用:包括 CPU、内存、磁盘使用率等。
  • 数据导入导出:包括导入导出任务的状态、进度等。
实践示例

使用 SHOW PROC 命令查看集群状态和监控指标:

-- 查看 FE 节点状态
SHOW PROC '/frontends';

-- 查看 BE 节点状态
SHOW PROC '/backends';

-- 查看查询性能
SHOW PROC '/queries';

-- 查看资源使用情况
SHOW PROC '/sys/resource';

2. 日志管理

合理的日志管理可以帮助管理员快速定位和解决问题。

日志配置

Doris 的日志配置文件位于 conf/log4j2.properties,可以根据需要调整日志级别和输出路径。

实践示例

# 设置日志级别
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 设置日志输出路径
appender.file.type = File
appender.file.name = file
appender.file.fileName = ${sys:log.dir}/doris.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 设置根日志级别
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.file.ref = file
rootLogger.level = INFO

3. 告警通知

及时的告警通知可以帮助管理员快速响应系统异常。

实践示例

使用 Prometheus 和 Alertmanager 设置告警通知:

  1. 安装 Prometheus 和 Alertmanager

    # 安装 Prometheus
    wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
    tar xvfz prometheus-2.30.3.linux-amd64.tar.gz
    cd prometheus-2.30.3.linux-amd64
    
    # 安装 Alertmanager
    wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
    tar xvfz alertmanager-0.23.0.linux-amd64.tar.gz
    cd alertmanager-0.23.0.linux-amd64
    
  2. 配置 Prometheus

    编辑 prometheus.yml 文件,添加 Doris 的监控目标:

    scrape_configs:
      - job_name: 'doris'
        static_configs:
          - targets: ['<fe_host>:9090']
    
  3. 配置 Alertmanager

    编辑 alertmanager.yml 文件,配置告警通知规则:

    global:
      smtp_smarthost: 'smtp.example.com:587'
      smtp_from: 'alertmanager@example.com'
      smtp_auth_username: 'alertmanager'
      smtp_auth_password: 'password'
    
    route:
      receiver: 'team-email'
    
    receivers:
      - name: 'team-email'
        email_configs:
          - to: 'team@example.com'
    
  4. 启动 Prometheus 和 Alertmanager

    ./prometheus --config.file=prometheus.yml
    ./alertmanager --config.file=alertmanager.yml
    

高级查询优化技巧

1. 查询计划优化

通过分析查询计划,可以发现潜在的性能瓶颈并进行优化。

实践示例

使用 EXPLAIN 命令查看查询计划:

EXPLAIN SELECT * FROM large_table WHERE k1 > 1000;

2. 索引覆盖

索引覆盖是指查询的所有列都在索引中,这样可以避免回表查询,提高查询性能。

实践示例

假设我们有一个用户表 users,经常需要查询用户的姓名和年龄。

CREATE TABLE users (
    user_id INT,
    name VARCHAR(255),
    age INT,
    email VARCHAR(255)
) ENGINE=OLAP DUPLICATE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("replication_num" = "1");

-- 创建索引覆盖的二级索引
ALTER TABLE users ADD INDEX idx_name_age (name, age);

3. 并行查询

Doris 支持并行查询,通过增加并行度可以显著提高查询性能。

实践示例

增加并行度:

SET parallel_exec_instance_num = 10;

4. 缓存机制

利用 Doris 的缓存机制可以减少磁盘 I/O,提高查询速度。

实践示例

开启查询缓存:

SET enable_query_cache = true;

5. 预聚合

预聚合可以显著提高查询性能,特别是在需要频繁进行聚合操作的场景中。

实践示例

假设我们需要频繁统计每天各个类别的销售数量,可以创建一个预聚合表 pre_aggregated_sales

CREATE TABLE pre_aggregated_sales (
    category_id INT,
    ts DATE,
    sales_count BIGINT SUM
) ENGINE=OLAP AGGREGATE KEY(category_id, ts)
DISTRIBUTED BY HASH(category_id) BUCKETS 10
PROPERTIES ("replication_num" = "1");

-- 插入预聚合数据
INSERT INTO pre_aggregated_sales
SELECT category_id, DATE(ts), COUNT(*) AS sales_count
FROM user_behavior
GROUP BY category_id, DATE(ts);

系统调优

1. 内存调优

合理的内存配置可以提高系统的整体性能。

实践示例

修改 BE 节点的内存配置:

# 编辑 be.conf
max_memory_limit = 32GB

2. CPU 调优

通过调整 CPU 调度策略,可以提高系统的并发处理能力。

实践示例

修改 BE 节点的 CPU 配置:

# 编辑 be.conf
cpu_scheduler = "fair"

3. 磁盘调优

合理的磁盘配置可以提高数据读写速度。

实践示例

修改 BE 节点的磁盘配置:

# 编辑 be.conf
storage_root_path = "/data1/doris,/data2/doris"

4. 网络调优

通过优化网络配置,可以提高数据传输效率。

实践示例

修改 FE 节点的网络配置:

# 编辑 fe.conf
http_port = 8030

5. 数据倾斜优化

通过合理的数据分布策略,可以避免数据倾斜,提高查询性能。

实践示例

调整 Bucket 数和分区策略:

CREATE TABLE user_behavior (
    user_id INT,
    item_id INT,
    category_id INT,
    behavior STRING,
    ts TIMESTAMP
) ENGINE=OLAP
PARTITION BY RANGE (ts)
(PARTITION p1 VALUES LESS THAN ('2024-01-01'),
 PARTITION p2 VALUES LESS THAN ('2024-02-01'))
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("replication_num" = "1");

结论

本文深入探讨了 Apache Doris 的监控与运维、高级查询优化技巧,以及如何进行系统调优。通过本文,读者将能够更好地管理和维护 Doris 系统,确保其稳定性和高性能。


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

相关文章:

  • 神经网络与Transformer详解
  • 力扣 最长公共前缀-14
  • 【C语言】实现二维数组按列排序
  • 基于SpringBoot+RabbitMQ完成应⽤通信
  • react之了解jsx
  • Unity图形学之Blend指令
  • 【RabbitMQ】07-业务幂等处理
  • Tomcat NIO 配置实操指南
  • JVM——类加载器、类加载器的分类
  • 【Ubuntu侧边菜单点击没反应】【Ubuntu 20.04】【浏览器、文件夹点击没反应】
  • LabVIEW开发相机与显微镜自动对焦功能
  • 消息中间件分类
  • 《Django 5 By Example》阅读笔记:p17-p53
  • 去中心化存储:Web3数据安全新标准
  • Wireshark中的length栏位
  • YOLO理解
  • 一个C++线程安全的栈数据结构的例子
  • 电子商务系统设计与Spring Boot框架
  • 对话 OpenCV 之父 Gary Bradski:灾难性遗忘和持续学习是尚未解决的两大挑战 | Open AGI Forum
  • cls(c基础)
  • Excel单元格中自适应填充多图
  • SpringCloud核心组件(三)
  • 6547网:青少年软件编程Python等级考试(六级)真题试卷
  • 一键抠图:免费安全的在线图片去除背景工具
  • uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑
  • 鸿蒙元服务 证书过期替换 ERROR - hap-sign-tool: error: Signature verify failed