当前位置: 首页 > news >正文

六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移

        在数据集成和数据仓库建设中,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 语句:

SELECTid
, 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-xat 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
http://www.lryc.cn/news/443303.html

相关文章:

  • 一天一道算法题day07
  • 电机学习-有感BLDC开环控制(六步换相)
  • 《深度学习》PyTorch框架 优化器、激活函数讲解
  • Linux:进程(四)
  • CTC loss 博客转载
  • TryHackMe 第3天 | Pre Security (中)
  • c语言中“qsort函数”和“结构体成员访问变量”
  • 【MySQL】在MySQL中STR_TO_DATE()
  • PCIE集成验证(五)MSI/MSI-X中断
  • leetcode 380.O(1) 时间插入、删除和获取随机元素
  • 基于MicroPython的ESP8266控制PS2摇杆模块的设计方案
  • Spring Boot 3项目使用Swagger3教程
  • linux-系统备份与恢复-系统恢复
  • 【Rust语言】std::collections::HashMap用法
  • 使用SoapUI、Postman工具调用Webservice方法
  • js 与 C++引用和指针的关系
  • python --PyAibote自动化
  • Ubuntu系统开发环境搭建
  • lvs-dr模式实验详解
  • 【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具
  • 跨站请求伪造(CSRF)漏洞详解
  • Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示
  • 【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
  • 在Unity UI中实现UILineRenderer组件绘制线条
  • C语言中union的用法
  • C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)
  • 鸿蒙 WebView 设置 Header
  • 电力施工作业安全行为检测图像数据集
  • 大数据实验2.Hadoop 集群搭建(单机/伪分布式/分布式)
  • 【CSS in Depth 2 精译_036】5.6 Grid 网格布局中与对齐相关的属性 + 5.7本章小结