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

devtools/2024/11/17 22:48:48/

引言

在前几篇文章中,我们已经介绍了 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.ppmy.cn/devtools/134811.html

相关文章

大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作

目录 大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作 示例说明 1. 前向传播与梯度计算 2. All-Reduce操作(包含Reduce和Broadcast-like阶段) 3. LayerNorm的应用 示例中的顺序 结论 大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作 在…

fastapi 调用ollama之下的sqlcoder模式进行对话操作数据库

from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel import ollama import mysql.connector from mysql.connector.cursor import MySQLCursor import jsonapp FastAPI()# 数据库连接配置 DB_CONFIG {"database": "web&quo…

AI技术对软件开发带来的发展

AI 重塑软件开发&#xff1a;流程、优势、挑战与展望 一、流程与模式介绍【传统软件开发 VS AI 参与的软件开发】 传统软件开发流程与模式 需求分析阶段&#xff1a;开发团队与客户进行深入沟通&#xff0c;通过面谈、问卷调查、文档分析等方式收集需求信息。例如&#xff0c;开…

深入理解 source 和 sh、bash 的区别

1 引言 在日常使用 Linux 的过程中&#xff0c;脚本的执行是不可避免的需求之一&#xff0c;而 source、sh、bash 等命令则是执行脚本的常用方式。尽管这些命令都能运行脚本&#xff0c;但它们之间的执行方式和效果却有着显著的区别。这些区别可能会影响到脚本的环境变量、工作…

YOLOv8改进,YOLOv8通过RFAConv卷积创新空间注意力和标准卷积,包括RFCAConv, RFCBAMConv,二次创新C2f结构,助力涨点

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…

速盾:cdn 支持 php 吗?

在网络开发中&#xff0c;PHP 是一种广泛使用的服务器端脚本语言&#xff0c;用于创建动态网页和 web 应用程序。CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;在内容分发方面具有强大的功能&#xff0c;那么它是否支持 PHP 呢&#xff1f; C…

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分。这里用到的是 GitHub 中part2. 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的不同内部矩阵。…

No Module named pytorchvideo.losses问题解决

问题描述 最近在跑X3D的源码时发现&#xff0c;在conda powershell prompt中安装了pytorchvideo&#xff0c;但是仍然报错&#xff1a;No Module named pytorchvideo.losses 解决方案&#xff1a; 直接去https://gitcode.com/gh_mirrors/py/pytorchvideo/overview?utm_sour…