在数据集成和数据仓库建设中,ETL(Extract, Transform, Load)工具扮演着至关重要的角色。本文将对六种主流ETL工具进行比较,并深入探讨Kettle的实践应用。
一、六种主流ETL工具比较
1. DataPipeline
- 设计及架构:专为超大数据量、高度复杂的数据链路设计的灵活、可扩展的数据交换平台。
- 使用方式:全流程图形化界面,Cloud Native架构,所有操作在浏览器内完成,无需额外开发。
- 底层架构:分布式集群高可用架构,自动调节任务在节点间分配,适用于大数据场景。
2. Kettle
- 设计及架构:面向数据仓库建模的传统ETL工具。
- 使用方式:C/S客户端模式,开发和生产环境需要独立部署,任务编写、调试、修改都在本地。
- 底层架构:主从结构非高可用,扩展性差,不适用大数据场景。
3. Oracle Goldengate
- 设计及架构:主要用于数据备份、容灾。
- 使用方式:没有图形化界面,操作皆为命令行方式,可配置能力差。
- 底层架构:可做集群部署,依赖于外部环境,如Oracle RAC等。
4. Informatica
- 设计及架构:面向数据仓库建模的传统ETL工具。
- 使用方式:C/S客户端模式,学习成本较高,一般需要受过专业培训的工程师才能使用。
5. Talend
- 设计及架构:面向数据仓库建模的传统ETL工具。
- 使用方式:C/S客户端模式,开发和生产环境需要独立部署。
6. DataX
- 设计及架构:面向数据仓库建模的传统ETL工具。
- 使用方式:DataX是以脚本的方式执行任务的,需要完全吃透源码才可以调用。
二、Kettle实践指njie
1. MySQL到MySQL数据迁移
任务描述:将一个表中的数据t_user
导入到另一个表中t_user2
。
操作步骤:
选择“表输入”步骤,连接MySQL数据库,选择t_user
表。
选择“表输出”步骤,连接MySQL数据库,选择t_user2
表。
确保字段映射正确,执行转换。
2. 根据条件导出到不同的Excel
任务描述:根据字段值导出到不同的Excel文件。
操作步骤:
使用“选择”步骤,根据字段值进行条件筛选。
第一个Excel输出 选择 带有 defalut的字样的,第二个Excel中选择带有 new 字样的选项。
使用“写入Excel文件”步骤,将筛选后的数据写入不同的Excel文件。
3. 执行SQL脚本
任务描述:使用Kettle执行SQL脚本,如truncate table t_user2
。
操作步骤:
使用“SQL执行”步骤,输入SQL脚本并执行。
sql语句:
truncate table t_user2
4. Hive数据导出到MySQL
任务描述:将Hive的数据导出到MySQL。
操作步骤:
使用“表输入”步骤,连接Hive数据库。
报错:
配置如下:
如何找到hive-jdbc的jar包?
使用“表输出”步骤,连接MySQL数据库。
当预览hive中的数据失败时:
在hive中的字段名字要和数据库的字段名字一样,不能在建数据库的时候,修改列的名字,否则不照样,会失败,建表语句中varchar类型后面,记得添加长度。
5. MySQL数据导入Hive
任务描述:将MySQL的数据导入Hive。
操作步骤:
使用“表输入”步骤,连接MySQL数据库。按上文操作
使用“表输出”步骤,连接Hive数据库。按上文操作
输入是 表输入,使用 mysql ,输出是表输出,使用 hive
如果直接做,报错!
2024/09/11 17:19:29 - 表输出.0 - Caused by: org.pentaho.di.core.exception.KettleDatabaseException:
2024/09/11 17:19:29 - 表输出.0 - Error setting value #9 [Date] on prepared statement
2024/09/11 17:19:29 - 表输出.0 - Method not supported
2024/09/11 17:19:29 - 表输出.0 -
2024/09/11 17:19:29 - 表输出.0 - at org.pentaho.di.core.row.value.ValueMetaBase.setPreparedStatementValue(ValueMetaBase.java:5477)
2024/09/11 17:19:29 - 表输出.0 - at org.pentaho.di.core.database.Database.setValue(Database.java:1080)
2024/09/11 17:19:29 - 表输出.0 - at org.pentaho.di.core.database.Database.setValues(Database.java:1096)
2024/09/11 17:19:29 - 表输出.0 - ... 4 more
2024/09/11 17:19:29 - 表输出.0 - Caused by: java.sql.SQLFeatureNotSupportedException: Method not supported
2024/09/11 17:19:29 - 表输出.0 - at org.apache.hive.jdbc.HivePreparedStatement.setDate(HivePreparedStatement.java:460)
2024/09/11 17:19:29 - 表输出.0 - at org.pentaho.di.core.row.value.ValueMetaBase.setPreparedStatementValue(ValueMetaBase.java:5412)
2024/09/11 17:19:29 - 表输出.0 - ... 6 more
通过查看错误,发现是 Date 类型的错误,所以,修改表输入中的 SQL 语句:
SELECT
id
, name
, age
, gender
, province
, city
, region
, phone
, date_format(birthday,'%Y-%m-%d') birthday
, hobby
, date_format(register_date,'%Y-%m-%d %h:%i:%s') register_date
FROM kettle_demo.t_user
问题解决!!
有时候,运行成功,有时候只能导入 2 条数据,然后报错,可以在 hive 的 conf 下的 .hiverc 下,添加如下:
set hive.stats.column.autogather=false;
然后不需要重启 hiveserver2 以及 kettle,直接运行即可。
如果还不行,直接修改 hive-site.xml
把里面的true改为false 重启hive和kettle 。
6. 将MySQL数据导入HDFS
任务描述:将MySQL的数据导入HDFS。
操作步骤:
使用“表输入”步骤,连接MySQL数据库。按上文操作
使用“Hadoop文件输出”步骤,配置HDFS路径和权限。
重启 kettle,进入之后:
查看报告:
假如你使用了 hdfs 自带的文件夹,比如/home,会报没有权限的错误
报错内容:
2024/09/12 09:48:08 - Hadoop file output.0 - Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode="/home":root:supergroup:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:504)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:336)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:242)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1939)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1923)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1882)
解决办法:修改 hdfs 中的文件夹的权限:
hdfs dfs -chmod -R 777 /home
假如你使用的是一个全新的路径,是不会报权限错误的。
7. Job任务
任务描述:使用Kettle的Job功能进行任务编排。
操作步骤:
在新建中,选择【作业】即可进入作业编辑界面
根据需求添加相应的步骤和转换。
Start 如果不想定时执行,什么都可以不用设置;
完成 : 什么都不用设置
复杂的job 图表展示:有点类似于我们之前的任务编排(编排的是转换)。
如果出现如下问题:
在job 这个任务保存的时候,不要保存在中文路径下。保存在非中文路径下。其他ETL工具:
三、总结
ETL工具的选择应根据项目需求、数据量、易用性、稳定性等因素综合考虑。Kettle作为一款开源的ETL工具,具有强大的数据处理能力和灵活的配置选项,适合各种规模的数据集成任务。通过本文的实践指南,希望能帮助大家更好地理解和使用Kettle。
参考链接
- 六种主流ETL工具的比较
- 闫哥大数据--73-kettle的介绍和安装_哔哩哔哩_bilibili