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

06-01 1682阅读

        在数据集成和数据仓库建设中,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实践指南

              1. MySQL到MySQL数据迁移

              任务描述:将一个表中的数据t_user导入到另一个表中t_user2。

              操作步骤:

              选择“表输入”步骤,连接MySQL数据库,选择t_user表。

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

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

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

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

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

              选择“表输出”步骤,连接MySQL数据库,选择t_user2表。

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

              确保字段映射正确,执行转换。

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

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

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

              2. 根据条件导出到不同的Excel

              任务描述:根据字段值导出到不同的Excel文件。

              操作步骤:

              使用“选择”步骤,根据字段值进行条件筛选。

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

              第一个Excel输出 选择 带有 defalut的字样的,第二个Excel中选择带有 new 字样的选项。

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

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

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

              使用“写入Excel文件”步骤,将筛选后的数据写入不同的Excel文件。 

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

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

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

              3. 执行SQL脚本

              任务描述:使用Kettle执行SQL脚本,如truncate table t_user2。

              操作步骤:

              使用“SQL执行”步骤,输入SQL脚本并执行。

              sql语句:
              truncate table t_user2

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

              4. Hive数据导出到MySQL

              任务描述:将Hive的数据导出到MySQL。

              操作步骤:

              使用“表输入”步骤,连接Hive数据库。

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

              报错:

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

              配置如下:

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

              如何找到hive-jdbc的jar包?

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

               使用“表输出”步骤,连接MySQL数据库。

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

              当预览hive中的数据失败时:

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

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

              在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
              

              问题解决!!

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

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

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

              有时候,运行成功,有时候只能导入 2 条数据,然后报错,可以在 hive 的 conf 下的 .hiverc 下,添加如下:

              set hive.stats.column.autogather=false;

              然后不需要重启 hiveserver2 以及 kettle,直接运行即可。

              如果还不行,直接修改 hive-site.xml

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

              把里面的true改为false 重启hive和kettle 。

              6. 将MySQL数据导入HDFS

              任务描述:将MySQL的数据导入HDFS。

              操作步骤:

              使用“表输入”步骤,连接MySQL数据库。按上文操作

              使用“Hadoop文件输出”步骤,配置HDFS路径和权限。

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

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

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

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

               重启 kettle,进入之后:

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

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

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

               查看报告:

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

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

              假如你使用了 hdfs 自带的文件夹,比如/home,会报没有权限的错误

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

              报错内容: 

              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

              假如你使用的是一个全新的路径,是不会报权限错误的。

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

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

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

              7. Job任务

              任务描述:使用Kettle的Job功能进行任务编排。

              操作步骤:

              在新建中,选择【作业】即可进入作业编辑界面

              根据需求添加相应的步骤和转换。

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

              Start 如果不想定时执行,什么都可以不用设置;

              完成 : 什么都不用设置

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

              复杂的job 图表展示:有点类似于我们之前的任务编排(编排的是转换)。

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

              如果出现如下问题:

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

              在job 这个任务保存的时候,不要保存在中文路径下。保存在非中文路径下。其他ETL工具:

              三、总结

                      ETL工具的选择应根据项目需求、数据量、易用性、稳定性等因素综合考虑。Kettle作为一款开源的ETL工具,具有强大的数据处理能力和灵活的配置选项,适合各种规模的数据集成任务。通过本文的实践指南,希望能帮助大家更好地理解和使用Kettle。

              参考链接

              • 六种主流ETL工具的比较
              • 闫哥大数据--73-kettle的介绍和安装_哔哩哔哩_bilibili
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码