kettle和datax数据同步/ETL工具
·
Kettle(现更名为 Pentaho Data Integration,PDI)和 DataX 都是开源的数据同步/ETL工具,核心用于「数据抽取(Extract)、转换(Transform)、加载(Load)」,但两者的定位、使用场景和操作方式差异较大。以下从「核心区别」「使用步骤」「选型建议」三个维度,帮你全面掌握两者的使用逻辑:
一、核心区别:先搞懂“该用谁”
| 对比维度 | Kettle (PDI) | DataX |
|---|---|---|
| 定位 | 完整ETL工具(侧重复杂数据转换+调度) | 轻量级数据同步工具(侧重高效数据传输) |
| 使用方式 | 图形化界面(Spoon)+ 脚本(XML/Java) | 配置式(JSON文件)+ 命令行执行 |
| 支持数据源 | 极丰富(关系库、文件、Hadoop、NoSQL等) | 丰富(主流关系库、文件、大数据存储) |
| 数据转换 | 强大(内置数百种转换组件:过滤、关联、聚合等) | 简单(仅支持字段映射、类型转换,复杂转换需自定义) |
| 性能 | 中大型数据量适配,支持并行/集群部署 | 高吞吐(阿里优化),大数据量同步更高效 |
| 易用性 | 上手快(图形化拖拽),学习成本低 | 需编写JSON配置,学习成本中等 |
| 调度能力 | 内置作业调度(定时、依赖触发) | 无内置调度,需依赖外部工具(Airflow、Crond) |
| 二次开发 | Java API扩展,支持自定义组件 | 插件化架构,支持自定义Reader/Writer |
| 适用场景 | 复杂ETL(如数据清洗、多表关联、指标计算) | 简单数据同步(如库到库、文件到库、大数据迁移) |
二、Kettle (PDI) 使用步骤(图形化操作,适合复杂ETL)
1. 环境准备
- 下载安装:官网(Pentaho官网)下载最新版,解压后直接运行
spoon.bat(Windows)/spoon.sh(Linux)(需提前配置JDK 8+); - 核心概念:
- 「转换(Transformation)」:单线程的ETL最小单元(如“读取MySQL数据→过滤空值→写入Hive”);
- 「作业(Job)」:多转换的串联调度(如“转换1执行成功后,执行转换2,失败则告警”)。
2. 实操示例:MySQL数据→清洗转换→写入Hive
步骤1:新建“转换”
打开Spoon→文件→新建→转换,命名为「MySQL_to_Hive」。
步骤2:配置数据源(读取MySQL)
- 拖拽左侧「输入」→「表输入」组件到画布;
- 双击组件→新建数据库连接→选择「MySQL」→填写URL(
jdbc:mysql://localhost:3306/xxx)、用户名、密码→测试连接成功; - 编写SQL查询数据(如
SELECT id, name, price, create_time FROM drug WHERE status=1)。
步骤3:数据转换(清洗/处理)
- 拖拽左侧「转换」组件(按需选择):
- 过滤空值:「过滤记录」→ 条件
price IS NOT NULL AND name != ''; - 字段类型转换:「转换字段」→ 把
price从字符串转为数值型; - 新增字段:「计算字段」→ 新增
etl_time = CURRENT_DATE()(ETL执行时间)。
- 过滤空值:「过滤记录」→ 条件
步骤4:配置目标数据源(写入Hive)
- 拖拽左侧「输出」→「Hive表输出」组件到画布;
- 新建Hive连接(需配置Hive JDBC URL、HDFS路径);
- 选择目标Hive表(如
ods.ods_drug),映射源字段(MySQL)和目标字段(Hive)。
步骤5:运行与调试
- 连接所有组件(用箭头拖拽关联执行顺序);
- 点击顶部「运行」按钮→选择运行方式(本地/集群)→查看执行日志(底部「执行结果」面板),排查报错(如字段映射错误、连接失败)。
步骤6:调度作业(可选)
- 新建「作业」→ 拖拽「转换」组件到画布,选择上述创建的「MySQL_to_Hive」转换;
- 拖拽「作业调度器」组件→设置定时(如每天凌晨2点执行);
- 保存作业并运行,实现自动化ETL。
三、DataX 使用步骤(配置式操作,适合高效同步)
1. 环境准备
- 下载安装:GitHub(DataX官网)下载压缩包,解压到服务器(需配置JDK 8+);
- 核心概念:
- 「Reader」:数据读取插件(如MySQLReader、FileReader);
- 「Writer」:数据写入插件(如HiveWriter、OracleWriter);
- 「JSON配置文件」:定义Reader、Writer、字段映射、同步策略。
2. 实操示例:MySQL数据→同步到Oracle
步骤1:编写JSON配置文件(核心)
在DataX安装目录的 job 文件夹下,新建 mysql_to_oracle.json,配置如下(关键参数说明见注释):
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader", // 读取插件:MySQLReader
"parameter": {
"username": "root", // MySQL用户名
"password": "123456", // MySQL密码
"column": [ // 要同步的字段(* 表示所有字段,推荐明确指定)
"id", "name", "price", "create_time"
],
"connection": [
{
"table": [
"drug" // 源表:MySQL的drug表
],
"jdbcUrl": [
"jdbc:mysql://localhost:3306/xxx?useSSL=false" // MySQL连接URL
]
}
],
"where": "status=1" // 过滤条件(可选,同步符合条件的数据)
}
},
"writer": {
"name": "oraclewriter", // 写入插件:OracleWriter
"parameter": {
"username": "system", // Oracle用户名
"password": "123456", // Oracle密码
"column": [ // 目标字段(与Reader字段顺序一致)
"id", "name", "price", "create_time"
],
"connection": [
{
"table": [
"DRUG" // 目标表:Oracle的DRUG表(Oracle表名默认大写)
],
"jdbcUrl": "jdbc:oracle:thin:@localhost:1521:orcl" // Oracle连接URL
}
],
"preSql": [
"TRUNCATE TABLE DRUG" // 同步前执行的SQL(可选,如清空表)
],
"batchSize": 1024 // 批量写入大小(优化性能)
}
}
}
],
"setting": {
"speed": {
"channel": 3 // 并发通道数(根据服务器性能调整,越大越快)
}
}
}
}
步骤2:执行同步任务
- 进入DataX安装目录,执行命令(Linux/Mac):
python bin/datax.py job/mysql_to_oracle.json - Windows环境:
python bin\datax.py job\mysql_to_oracle.json - 查看执行日志:日志会显示同步进度(读取行数、写入行数、耗时),若失败会提示错误原因(如字段类型不匹配、连接超时)。
步骤3:高级配置(可选)
- 字段映射:若源字段和目标字段名不一致,用
column数组顺序对应(如Reader的「name」对应Writer的「DRUG_NAME」); - 性能优化:调整
channel(并发数)、batchSize(批量大小),或开启分区同步(大数据量场景); - 自定义插件:若需支持特殊数据源(如自研数据库),可开发自定义Reader/Writer插件(参考DataX官网插件开发文档)。
步骤4:调度任务(可选)
DataX无内置调度,需结合外部工具:
- 简单调度:Linux用Crond(如每天凌晨3点执行),编辑
/etc/crontab:0 3 * * * root python /datax/bin/datax.py /datax/job/mysql_to_oracle.json >> /datax/log/mysql_oracle_sync.log 2>&1 - 复杂调度:用Airflow、Azkaban等工具,支持依赖调度、失败重试、告警通知。
四、选型建议:怎么选不踩坑?
| 场景描述 | 推荐工具 | 原因 |
|---|---|---|
| 需复杂数据转换(多表关联、聚合、清洗) | Kettle | 图形化拖拽,内置数百种转换组件,无需写代码 |
| 大数据量同步(千万级+数据) | DataX | 高吞吐、并行优化,性能优于Kettle |
| 新手入门、快速搭建ETL流程 | Kettle | 图形化界面,学习成本低,调试方便 |
| 服务器资源有限(轻量级部署) | DataX | 无GUI,仅需JDK,资源占用少 |
| 需内置调度(定时、依赖执行) | Kettle | 自带作业调度,无需额外工具 |
| 大数据生态集成(Hadoop、Hive、Spark) | 两者均可 | Kettle支持更全面,DataX针对大数据优化更好 |
| 二次开发(自定义数据源/转换逻辑) | DataX | 插件化架构更灵活,开发成本低 |
五、常见问题排查
1. Kettle 常见报错
- 连接数据库失败:检查JDBC驱动是否缺失(Kettle需手动放入
lib目录)、URL/用户名/密码是否正确; - 字段映射错误:确保源字段和目标字段的类型一致(如MySQL的INT对应Hive的INT);
- 中文乱码:在数据库连接URL后添加编码参数(如MySQL的
?characterEncoding=utf8)。
2. DataX 常见报错
- 配置文件语法错误:检查JSON格式(如逗号遗漏、引号不匹配),可通过JSON校验工具验证;
- 数据源连接超时:检查网络连通性(防火墙、端口开放)、数据库服务是否正常;
- 数据类型不兼容:如MySQL的DATETIME对应Oracle的DATE,需确保字段类型匹配,或通过转换函数处理(如
DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s'))。
总结
- Kettle 是「全能型ETL工具」,适合需要复杂转换和内置调度的场景,上手快、可视化强;
- DataX 是「高性能同步工具」,适合简单数据传输和大数据量场景,配置灵活、资源占用少。
根据你的业务需求(是否需要复杂转换、数据量大小、部署环境)选择即可,两者均是开源领域的成熟工具,稳定性和社区支持都有保障~
更多推荐




所有评论(0)