1、ETL介绍
ETL(Extract, Transform, Load)工具是用于数据集成和处理的关键软件,它们能够从不同的数据源提取数据,进行必要的转换,然后将数据加载到目标数据仓库或其他存储系统中。
2、 Kettle
2.1 Kettle介绍
Kettle也叫PDI(Pentaho Data Integration),广泛用于数据提取、转换和加载(ETL)任务,它有以下特点:
- 友好的图形用户界面GUI
- 支持多种数据源之间的数据接入
- 丰富的数据转换组件
- 提供简单的作业调度功能
2.2 Kettle基本使用
版本:pdi-ce-8.2.0.0-11
场景:将Mysql表数据同步到Hdfs文件中,数据量为50W
- 先从左侧栏"输入"中拉出"表输入"节点,编辑选择Mysql数据库,如下图
- 选择"获取SQL查询语句",自动生成查询语句
- 点击预览可以查看实际数据
- 从左侧栏"Big Data"中拉出"Hadoop File Output"节点,编辑选择hdfs,如下图
- 将节点连接
- 选择Hadoop File Output节点的"字段"tab页,点击"获取字段",可获取到字段列表,点击"最小宽度",输出结果中会去掉每个字段多余的左右空格
- 点击"运行转换",就会开始进行数据的接入,可以看到50W条数据写入hdfs,过程花费了10秒,如下图
3、Sqoop
3.1 Sqoop介绍
Sqoop 是一个用于在 Hadoop 和关系型数据库之间高效地传输数据的工具。它的名称来源于 "SQL to Hadoop" 的缩写,旨在简化从传统数据库到大数据平台(如 Apache Hadoop)的数据转移过程
3.2 Sqoop基本使用
版本:Sqoop-1.4.7
场景:将Mysql表数据同步到Hdfs文件中,数据量为50W
在服务器上,执行命令
sqoop import \
--connect jdbc:mysql://192.168.11.1:3306/test \
--username root \
--password 123456 \
--table faker_user \
--where "1=1" \
--target-dir /sqoop/ori_mysql3 \
--delete-target-dir \
--fields-terminated-by "\t" \
--num-mappers 5
执行日志如下,由于数据量并不是非常大,无法体现分布式计算的优势,且用的是MapReduce计算框架,所以总耗时81秒
这里我设置的并行度是5,结果数据如下
4、DataX
4.1 DataX介绍
DataX 是一个由阿里开源的数据同步工具,也是阿里Dataworks数据集成的开源版本,主要用于在不同数据源之间高效地进行数据传输和转换,旨在解决大规模数据迁移和数据同步的需求
4.2 DataX基本使用
版本:Sqoop-1.4.7
场景:将Mysql表数据同步到Hdfs文件中,数据量为50W
编写json配置文件,如下:
{
"job": {
"setting": {
"speed": {
"channel": 5
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"splitPk": "id",
"column": ["id","name","age","gender","email","address","text","url","phone_number","country","city","job","ipv4","custom_data","registration_date"],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://192.168.11.1:3306/test"
],
"table": ["faker_user"]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://vm1:9000",
"fileType": "text",
"path": "/datax/",
"fileName": "mysql2hdfs.txt",
"writeMode": "append",
"column": [
{
"name": "id",
"type": "int"
},
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
},
{
"name": "gender",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "address",
"type": "string"
},
{
"name": "text",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "phone_number",
"type": "string"
},
{
"name": "country",
"type": "string"
},
{
"name": "city",
"type": "string"
},
{
"name": "job",
"type": "string"
},
{
"name": "ipv4",
"type": "string"
},
{
"name": "custom_data",
"type": "string"
},
{
"name": "registration_date",
"type": "string"
}
],
"fieldDelimiter": "\t"
}
}
}
]
}
}
执行命令 python bin/datax.py mysql2hdfs.json,结果如下,可以看到同步50W数据总耗时34s
hdfs结果数据如下(这里我们datax配置文件里虽然设置的并行度是5,但是如果单个表,datax默认会*5,所以最终并行度其实是25,即hdfs目录下最终会有25个文件)
5、三款数据同步工具的对比
特性 | Kettle (PDI) | Sqoop | DataX |
---|---|---|---|
类型 | ETL 工具 | 数据传输工具 | 数据同步工具 |
用户界面 | 图形化界面 | 命令行 | JSON 配置 |
数据源支持 | 多种数据源 | 主要支持关系型数据库 | 多种数据源 |
并行处理 | 支持 | 支持 | 支持 |
学习曲线 | 较高,需掌握图形化工具 | 较低,基于命令行 | 中等,需要了解 JSON 配置 |
最佳使用场景 | 复杂的 ETL 和数据整合 | Hadoop 与 RDBMS 间的批量迁移 | 异构数据源间的灵活同步 |
6、总结
选择 ETL 工具时需要考虑特定的业务需求、数据源类型以及数据处理的规模等因素。每个工具都有其独特的优势和适用场景,因此了解这些工具的特点可以帮助我们做出更明智的选择。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。