当前位置: 首页 > 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

相关文章:

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

在数据集成和数据仓库建设中,ETL(Extract, Transform, Load)工具扮演着至关重要的角色。本文将对六种主流ETL工具进行比较,并深入探讨Kettle的实践应用。 一、六种主流ETL工具比较 1. DataPipeline 设计及架构:专为…...

一天一道算法题day07

找出字符中第一个匹配的下标 题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&#…...

电机学习-有感BLDC开环控制(六步换相)

文章目录 1. 简介2. 六步换向控制3. 机械角度和电角度4.转子位置获取5.霍尔传感器读取测试6.速度开环控制6.1 PWM设置6.2死区时间 1. 简介 BLDC的反电动势一般是梯形的反电动势,所以采用方波控制。如图2-1所示,是一个简化的内转子无刷直流电机。我们通过…...

《深度学习》PyTorch框架 优化器、激活函数讲解

目录 一、深度学习核心框架的选择 1、TensorFlow 1)概念 2)优缺点 2、PyTorch 1)概念 2)优缺点 3、Keras 1)概念 2)优缺点 4、Caffe 1)概念 2)优缺点 二、pytorch安装 1、安装 2、…...

Linux:进程(四)

目录 一、进程优先级 二、Linux调度与切换 1.背景 2.进程切换 一、进程优先级 背景:在计算机中,软硬件资源是有限的,而进程想要访问某一种资源,就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…...

CTC loss 博客转载

论文地址: https://www.cs.toronto.edu/~graves/icml_2006.pdf 为了对应这个图,我们假设一种符合的模型情况: 英文OCR,37个类别(26个小写字母10个汉字空格),最大输出长度8个字符 模型预测结果…...

TryHackMe 第3天 | Pre Security (中)

该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识,本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…...

c语言中“qsort函数”和“结构体成员访问变量”

qsort函数: qsort是c语言中的库函数,这个函数是对数据进行排序(对任意) 冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...

【MySQL】在MySQL中STR_TO_DATE()

1.在MySQL中STR_TO_DATE() 在MySQL中,STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下: STR_TO_DATE(date…...

PCIE集成验证(五)MSI/MSI-X中断

PCI 总线最早采用的中断机制是 INTx,这是基于边带信号的。后续的 PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了 MSI(Message Signaled Interrupt)/MSI-X(消息信号中断)的中断机制。…...

leetcode 380.O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…...

基于MicroPython的ESP8266控制PS2摇杆模块的设计方案

以下是一个基于MicroPython的ESP8266控制PS2摇杆模块的设计方案: 一、硬件准备: 1. 一块ESP8266开发板,如NodeMCU 2. 一个带有X、Y轴模拟输出和Z轴(按钮)数字输出的PS2摇杆模块 3. 杜邦线若干 4. 3.3V直流电源 二、硬件连接&#xff1a…...

Spring Boot 3项目使用Swagger3教程

Spring Boot 3项目使用Swagger3教程 Swagger&#xff1a;自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…...

linux-系统备份与恢复-系统恢复

Linux 系统备份与恢复&#xff1a;系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分&#xff0c;它指的是在系统崩溃、硬件故障、误操作或安全问题后&#xff0c;恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断&#xff0c;并确保系…...

【Rust语言】std::collections::HashMap用法

HashMap用法文档 文章目录 创建键的要求 增删改查增: insert删: remove/remove_entry改单点修改 get_mut整体修改 values_mut/iter_mut 查集增改于一身的entry 遍历只读遍历into_values() 与 into_keys()容量、实际长度、判空导出清除重定容量 use std::collections::HashMap;创…...

使用SoapUI、Postman工具调用Webservice方法

SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称&#xff0c;输入wsdl地址&#xff1a; 在左侧列表找到方法名&#xff0c;双击“Request 1”, 在请求数据中&#xff0c;添加对应的参数&#xff0c;然…...

js 与 C++引用和指针的关系

js 与 C引用和指针的关系 js 中既有引用的影子, 也有指针的影子。 1、引用用法 这里相当于C 中的引用, b是a的引用, 修改b ,a也改变。 var a { 1: 1 }var b a;a null;b[2] 2;console.error(b); // { 1: 1, 2: 2 }2、指针用法 这里 a,b应该按照指针理解。 var a undef…...

python --PyAibote自动化

官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息...

Ubuntu系统开发环境搭建

一&#xff0c;Android源码编译环境搭建 1 安装Java Development Kit (JDK) sudo apt-get update sudo apt-get install openjdk-8-jdk 2,确认JDK安装成功 java -version 3,安装编译所需的依赖项 sudo apt-get install git-core gnupg flex bison gperf build-essential zip cu…...

lvs-dr模式实验详解

华子目录 lvs-dr&#xff08;企业当中最常用&#xff09;dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...