Seal^_^头像
Apache Doris 数据导入实践:四大导入方式与性能调优指南封面图

Apache Doris 数据导入实践:四大导入方式与性能调优指南

Apache Doris 数据导入实践:四大导入方式与性能调优指南

Apache Doris 是一款高性能的实时分析型数据库,支持多种数据导入方式。本文将详细介绍 Doris 的三种主要数据导入方式:Broker Load、Spark Load 和 Insert Into,并深入探讨导入性能调优的关键技巧。

1. Doris 数据导入方式概述

Apache Doris 提供了多种数据导入方式,以满足不同场景下的数据加载需求。了解各种导入方式的特点和适用场景,是选择合适导入策略的第一步。

导入方式特点适用场景优点缺点
Broker Load基于 Broker 进程的分布式导入,异步执行大批量数据导入,TB 级数据高并发、高吞吐、可暂停恢复需要部署 Broker 服务,导入延迟较高
Spark Load基于 Spark 计算引擎的导入,支持复杂转换需要数据预处理或复杂转换场景支持复杂数据转换,可扩展性强配置复杂,依赖 Spark 环境
Insert Into标准 SQL 插入,同步执行小批量实时数据插入实时性好,使用简单不适合大批量数据,性能较低

流程图展示了 Doris 数据导入的基本流程:

数据准备

选择导入方式

Broker Load

Spark Load

Insert Into

上传文件到存储系统

创建导入任务

Broker 处理数据

导入结果返回

Spark 读取数据

Spark 数据处理

导入到 Doris

执行 SQL 插入

实时导入结果

导入完成

2. Broker Load 实践与优化

Broker Load 是 Doris 提供的一种高效的大批量数据导入方式,基于 Broker 进程实现数据的并行加载。

2.1 基本语法与使用

Broker Load 使用以下基本语法:

LOAD LABEL database.table_label
(
    DATA INFILE("hdfs://path/to/data/*") 
    INTO TABLE table_name
    [PARTITION(p1)]
    [COLUMNS(col1, col2, col3)]
    [SET(col4 = col1 * 10)]
)
PROPERTIES
(
    "broker.name" = "broker_name",
    "broker.hadoop.default.fs" = "hdfs://namenode:8020",
    "timeout_second" = "3600"
);

2.2 关键参数优化

Broker Load 的性能受多个参数影响,主要包括:

  • 并发度:通过 parallel_fragment_exec_instance_num 参数控制,通常设置为 CPU 核心数的 2-3 倍
  • 内存限制:通过 exec_mem_limit 参数设置,建议为总内存的 20%-30%
  • 超时时间:根据数据量大小合理设置,避免任务因超时失败

2.3 常见问题与解决方案

  • 导入失败:检查 Broker 服务是否正常,文件路径是否存在且可访问
  • 导入速度慢:提高并发度,优化数据格式(如使用列式存储 Parquet)
  • 内存不足:适当调小 exec_mem_limit 或增加 BE 节点

3. Spark Load 实践与优化

Spark Load 利用 Spark 分布式计算能力,适合处理需要复杂数据转换的大规模数据导入场景。

3.1 基本语法与配置

Spark Load 的基本语法如下:

LOAD LABEL database.table_label
(
    SPARK 
    "spark.sql"
    ( 
        "spark.executor.memory"="4g",
        "spark.executor.cores"="2",
        "spark.executor.instances"="10"
    )
    SCRIPT 
    "spark_load.py" 
    -- "hdfs://path/to/data/*" 
    "hdfs://output/path"
)
INTO TABLE table_name
[PARTITION(p1)]
[COLUMNS(col1, col2, col3)]
[SET(col4 = expr)];

3.2 Spark 优化要点

优化 Spark Load 性能的关键点:

  • 资源配置:根据数据量调整 executor 数量和内存,通常 executor 数量设置为集群核心数的 1-2 倍
  • 数据倾斜处理:对关键字段进行预分发,避免数据倾斜
  • 序列化优化:使用 Kryo 序列化替代默认 Java 序列化

3.3 典型 Spark 导入脚本示例

# spark_load.py
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
spark = SparkSession.builder.appName("SparkLoadExample").getOrCreate()
# 读取数据
df = spark.read.parquet("hdfs://input/path/*")
# 数据转换
df_transformed = df.withColumn("new_col", col("old_col") * 2)
# 写入 Doris
df_transformed.write.format("doris").option("doris.table.identifier", "database.table_name").option("doris.fenodes", "fe_host:9030").save()
spark.stop()

4. Insert Into 与综合性能调优

4.1 Insert Into 使用方法

Insert Into 是最直接的 SQL 数据插入方式,适合小批量实时数据插入:

-- 单行插入
INSERT INTO table_name VALUES (1, "name", 100);
-- 批量插入
INSERT INTO table_name VALUES 
(1, "name1", 100),
(2, "name2", 200),
(3, "name3", 300);
-- 从查询结果插入
INSERT INTO table_name SELECT * FROM source_table WHERE condition;

4.2 综合性能调优策略

针对不同导入场景的综合优化策略:

场景推荐导入方式关键优化点
TB 级批量数据Broker Load高并发度、列式存储、合理分区
复杂数据转换Spark Load资源优化、倾斜处理、并行度调整
实时小批量数据Insert Into批量提交、索引优化
混合场景组合使用组合使用合理任务调度、错峰导入

4.3 通用性能优化技巧

  1. 表结构优化:合理设计列顺序,高频查询前置列
  2. 分区策略:根据查询模式选择合适的分区键
  3. 数据编码:对基数低的列使用字典编码
  4. 批处理大小:Insert Into 时合理控制批次大小(1000-5000 行/批)
  5. 资源监控:实时监控导入资源使用情况,及时调整参数

最小示例与注意事项

Broker Load 最小示例

-- 1. 在 HDFS 上准备好数据文件
-- 2. 创建目标表
CREATE TABLE sales_data (
    date DATE,
    product_id INT,
    amount DECIMAL(10,2)
) DISTRIBUTED BY HASH(product_id) BUCKETS 10;
-- 3. 执行 Broker Load
LOAD LABEL example.sales_label
(
    DATA INFILE("hdfs://data/sales/*") 
    INTO TABLE sales_data
    COLUMNS TERMINATED BY ","
)
PROPERTIES
(
    "broker.name" = "broker_hdfs",
    "broker.hadoop.default.fs" = "hdfs://namenode:8020",
    "timeout_second" = "3000"
);
-- 4. 查看导入状态
SHOW LOAD WHERE LABEL = "sales_label";

注意事项

  1. Broker Load 注意事项:
  • 确保 Broker 服务正常运行
  • 大文件提前分割为小文件(建议 100M-1G)
  • 避免导入期间修改表结构
  1. Spark Load 注意事项:
  • 确保 Spark 和 Doris 版本兼容
  • 导入前进行小规模测试验证
  • 合理设置 Spark 内存和并行度
  1. Insert Into 注意事项:
  • 避免单行提交,使用批量插入
  • 高峰期限制提交频率
  • 及时处理导入失败的情况

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_41840843/article/details/166791813

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--