Kettle 写 Doris 上亿大表经常 OOM?Doris Bulk Loader详细指导(含安装包)
Kettle 写 Doris 上亿大表经常 OOM?用 Doris Bulk Loader 把表输出换掉
下载地址
提取码:p8uu
下载内容:
doris-bulk-loader-plugins-9.3.0.0-428.zip:Doris 批量加载插件包,支持Pentaho社区或商业版8.2及以上doris-bulk-loader.lic:Doris 批量加载插件授权文件pdi-ce-9.3.0.0-428.zip:Kettle/PDI 客户端pentaho-server-ce-9.3.0.0-428.zip:Pentaho Serverjdbc/:相关 JDBC 驱动
如果你还在用 Kettle/PDI 的“表输出”组件往 Apache Doris 写大表,大概率遇到过这些问题:
- 几百万行还能跑,上千万行开始变慢,上亿大表经常跑不完。
- JDBC 批量写入时间长,任务一直占着 pentaho-server 资源。
- JVM 内存被打满,严重时 pentaho-server 直接 down 掉。
- CPU 长时间拉高,其他转换和作业也被拖慢。
- 为了扛峰值不断加机器、加内存、加授权,成本越来越高。
我们在实际项目里把 Doris 写入方式从“表输出”换成 Doris Bulk Loader 后,最明显的变化不是界面多了一个插件,而是整个链路轻了:
- 上亿大表抽取时间显著降低,只有原先的1/5。
- pentaho-server 不再因为大批量表输出频繁 OOM。
- CPU 和内存占用大幅下降。
- 服务器配置后续降了接近一半。
- 硬件成本和按资源/机器/核心计费的软件授权费用都降下来了。
本文就按真实落地场景讲:为什么 Kettle 表输出写 Doris 容易出问题,Doris Bulk Loader 怎么解决,以及怎么部署、配置和排查。
1. 真实场景:不是慢一点,是会把服务打挂
某企业的数据平台用 Kettle 做离线同步,Doris 做分析库。
典型数据任务包括:
| 数据类型 | 数据量 | 同步要求 |
|---|---|---|
| 订单明细 | 单表上亿行 | 支持全量校准和月度重跑 |
| 门店销售流水 | 每天千万级 | 每天固定窗口完成 |
| 会员行为 | 字段多、文本复杂 | 要处理引号、换行、分隔符 |
| 库存快照 | 定时追加或覆盖 | 调度稳定,失败可重跑 |
原来的方案很简单:Kettle 抽数,清洗后用“表输出”写 Doris。
小表没问题,但数据量上来以后问题集中爆发:
- 表输出走 JDBC,写入链路太重。
- 大批次写入持续占用 JVM 内存。
- pentaho-server 运行一段时间后内存回收压力很大。
- 高峰期多个任务并发,CPU 和内存一起打满。
- 一旦 OOM,整个 pentaho-server down,影响的不只是当前任务。
这个问题的关键不是“批量提交数再调大一点”,而是写入方式不适合。
2. 为什么表输出不适合上亿大表写 Doris
Kettle 的表输出更适合传统关系库的小批量写入。
它的问题在 Doris 大表场景里会被放大:
- JDBC 网络往返多,吞吐上限明显。
- Kettle 侧要长期维护写入缓冲和连接状态。
- 大字段、文本字段、日期格式转换都会增加 JVM 压力。
- 失败时经常只看到 JDBC 异常,定位到具体脏数据成本高。
- 上亿行写入持续时间长,服务端资源一直被占着。
Doris 本身更擅长批量导入,而不是被当成普通 MySQL 一行行写。
所以思路要变:
不要让 Kettle 用 JDBC 慢慢 insert,而是让 Kettle 生成 Doris 能高效加载的数据文件,再由 Doris 批量导入。
3. 方案对比
常见方案有三种:
| 方案 | 优点 | 问题 | 适合场景 |
|---|---|---|---|
| Kettle 表输出 | 配置简单 | 大表慢,容易 OOM,资源占用高 | 小表、低频同步 |
| Kettle 输出 CSV + 手写脚本 LOAD DATA | 性能较好 | 流程割裂,脚本多,失败重跑麻烦 | 临时任务、少量链路 |
| Doris Bulk Loader 插件 | 保留 Kettle 流程,自动生成文件并执行导入 | 需要部署插件和规范路径 | 大表、批量、稳定调度 |
Doris Bulk Loader 的价值在于:它不是让你放弃 Kettle,而是把 Kettle 最后一步的“表输出”换成更适合 Doris 的批量加载。
4. Doris Bulk Loader 怎么工作
插件的工作方式可以理解成四步:
- 从上游 Kettle 流接收数据。
- 按字段映射和格式配置生成 CSV 批次文件。
- 自动执行 Doris
LOAD DATA LOCAL INFILE。 - 导入成功后按配置清理 CSV 文件。
也就是说,用户仍然在 Kettle 里拖拽组件、配置字段、调度作业。
变化只发生在写入端:
- 原来:Kettle 表输出 -> JDBC -> Doris。
- 现在:Kettle 行流 -> CSV 批次文件 -> Doris LOAD DATA。
这会把大量写入压力从 pentaho-server JVM 侧释放出去,交给 Doris 更擅长的批量加载链路处理。
5. 环境准备
建议先确认这些条件:
| 项目 | 建议 |
|---|---|
| Kettle/PDI | 与插件版本匹配,例如 9.3.x |
| Doris | 已开启 MySQL 协议访问 |
| 网络 | Kettle 服务器能访问 Doris FE |
| 账号 | 具备目标库表写入权限 |
| 临时目录 | Kettle 运行用户有写权限 |
| 磁盘 | CSV 临时目录要预留批次文件空间 |
如果是在 pentaho-server 上跑,重点确认:运行服务的系统用户是否有 CSV 目录写权限。
很多本地 Spoon 能跑、服务器调度失败的问题,最后都是权限或路径不一致。
6. 插件部署
部署方式通常是:
-
将 Doris Bulk Loader 插件包解压。
-
放到
data-integration/plugins和pentaho-server/pentaho-solutions/system/kettle/plugins目录下。 -
将doris-bulk-loader.lic放到解压后的doris-bulk-loader文件夹下
-
重启 Spoon 或 pentaho-server。
-
在 Kettle 转换的“批量加载”分类里找到 Doris 批量加载步骤。
部署后建议先做两个验证:
1. Spoon 能正常启动。
2. 新建转换时能看到 Doris 批量加载组件。
安装路径参考:

7. 推荐配置
在 Doris 批量加载步骤里,重点配置这些项:
| 配置项 | 推荐值/说明 |
|---|---|
| 数据库连接 | Doris 的 MySQL 协议连接 |
| 目标模式 | Doris database |
| 目标表 | Doris table |
| CSV 文件/路径 | 推荐填写固定可写目录 |
| 保留 CSV | 默认不勾选;排查问题时临时勾选 |
| 字段分隔符 | 默认 TAB,文本里逗号多时不要轻易改逗号 |
| 封闭符 | 文本复杂时可用双引号 |
| 转义符 | 有换行、引号、分隔符时建议配置 |
| 本地数据 | 一般保持开启,对应 LOCAL |
| 批量提交数 | 默认 100000,按 Doris 和磁盘压力调优 |
CSV 路径建议按表名拆开,例如:
/data/kettle/doris_load/order_detail
/data/kettle/doris_load/member_behavior
/data/kettle/doris_load/inventory_snapshot
插件会按批次生成类似文件:
/data/kettle/doris_load/order_detail_0.csv
/data/kettle/doris_load/order_detail_1.csv
导入成功后,如果没有勾选“保留 CSV”,临时文件会自动删除。
8. 一个典型转换模板
以上亿订单明细入 Doris 为例:
表输入(MySQL/Oracle)
-> 字段选择
-> 数据清洗
-> Doris 批量加载
9. 效果怎么评估
建议从四个指标看收益:
| 指标 | 表输出 | Doris Bulk Loader |
|---|---|---|
| 抽取耗时 | 上亿大表耗时长 | 明显缩短 |
| JVM 内存 | 高,容易 OOM | 明显下降 |
| CPU 占用 | 长时间高位 | 压力降低 |
| 运维成本 | 需要堆机器和内存 | 可降配,成本下降 |
我们实际落地后的核心收益是:
- 大表抽取时间降低。
- pentaho-server 稳定性提升。
- CPU 和内存使用下降。
- 服务器资源降配接近一半。
- 硬件成本和软件授权费用减少。
这里建议每个团队上线前做一次自己的基准测试:
1. 同一张大表。
2. 同一批数据。
3. 分别用表输出和 Doris Bulk Loader 跑。
4. 记录耗时、CPU、内存、失败率。
10. 常见问题排查
1. 提示 CSV 父目录不存在或不可写
检查 CSV 路径的父目录是否存在。注意 pentaho-server 的运行用户具有读写权限。
2. 字段不存在
检查字段映射。目标表字段和上游流字段都要存在,大小写、别名、中文字段名都要确认。
3. 特殊字符导致导入失败
临时勾选“保留 CSV”,保留失败批次文件。重点检查文本里的换行、双引号、分隔符。
11. 适合谁用
这个方案特别适合:
- 已经大量使用 Kettle/PDI 的团队。
- Doris 已经作为数仓或分析库使用。
- 表输出写 Doris 慢、OOM、服务不稳定。
- 有上千万、上亿行批量同步任务。
- 不想重写整条 ETL 链路。
- 希望降低 pentaho-server 资源配置成本。
它不一定替代所有实时同步工具。
但在离线批量、准实时批次、历史全量校准、老 Kettle 流程迁移 Doris 这些场景里,用 Doris Bulk Loader 替换表输出,通常是投入小、收益直接的一步。
12. 商业授权
- 下载链接里的lic可以在windows上免费使用
- linux需要商业授权获取更多的技术支持。
- 免费试用和商用有任何问题都可以联系邮箱:support@datafor.com.cn
结论
Kettle 写 Doris 的瓶颈,很多时候不是 Kettle 抽不动,也不是 Doris 写不动,而是中间用了不适合大表的 JDBC 表输出。
上亿大表场景下,继续堆内存、堆 CPU、堆服务器,只是在给错误的写入方式买单。
把表输出换成 Doris Bulk Loader 后,链路仍然留在 Kettle 里,但写入方式变成 Doris 更擅长的批量加载。实际收益包括:抽取时间降低、pentaho-server 更稳定、CPU/内存占用下降、服务器降配、硬件和软件授权费用下降。
如果你的 Kettle 任务也经常因为写 Doris 大表 OOM,可以优先从这个点改,肯定错不了。
关键词:Kettle、Pentaho Data Integration、PDI、Apache Doris、Doris Bulk Loader、表输出、JDBC、LOAD DATA、数据同步、批量加载、pentaho-server OOM
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐




所有评论(0)