企业级数据单表全量增量抽取数据模型(Kettle版)

2023-11-18

最近在使用Kettle进行ETL的工作,现在总结一下。需求是将MYSQL中的表数据增量备份到HIVE仓库中,第一次是全量。我只想给大伙来点实用的,避免大家踩坑。Kettle是一个基于图形化的ETL工具,也可以用于集成各种作业,比如Sqoop,MR,Hive这些,越来越多的企业在使用。

 

本文大纲:

       1、Kettle的安装与配置

       2、库表数据的准备

       3、Kettle增量抽取数据模型

       4、测试与验证

       5、部署到Linux上运行

       6、总结

 

1、Kettle的安装与配置

1.1 下载安装包,解压

       到Kettle官网下载:https://community.hitachivantara.com/docs/DOC-1009855,目前最新的是8.0版本。(pdi-ce-8.0.0.0-28.zip),下载后解压到任意目录。注意与自己的JDK搭配上,我的JDK是1.8。如果你的是1.7,则下载Kettle的7.0版本。

1.2 配置环境变量

       配置Kettle的工作目录,即KETTLE_HOME,指向自己解压后的目录。

1.3 修改Kettle的配置文件

       配置完环境变量后,进入Kettle的主目录,点击Spoon.bat,即可启动。同时你在主目录下会发现多了一个.kettle目录,里面有kettle.properties文件。

请将下面的内容修改为你自己的相应环境,然后拷贝到kettle.properties文件里。主要用于后面的增量数据抽取模型。

第一部分:数据仓库路径,你得在集群中安装好Hive。

第二部分:Hadoop集群的配置,你得安装一个Hadoop集群。

第三部分:我们的数据源,我们需要抽取哪个库的数据。

第四部分:我们抽取数据需要写一些Log,将Log存储到数据库中。

第五部分:kettle转换和作业的存放地址。

1.4 添加Hadoop的配置文件到Kettle大数据插件中

       将Hadoop集群中的hdfs-site.xml和core-site.xml文件拷贝到${KETTLE_HOME}\plugins\pentaho-big-data-plugin\hadoop-configurations\cdh512目录下。

1.5 将MYSQL的驱动包拷贝到Kettle lib目录下

       ${KETTLE_HOME}\lib。

2、库表数据的准备

2.1 数据源数据

创建一个待抽取数据的数据库和表。数据库请按照自己在Kettle配置文件所配置的进行创建,在执行下面的创表脚本。

添加一些测试数据。

2.2 Log日志表

       我们需要将抽取数据的Log记录到数据库中。数据库请按照自己在Kettle配置文件所配置的进行创建,在执行下面的创表脚本。

2.3 Hive

创建Hive表,先创建一个名为rds的数据库,在建表。该表的字段与数据源的表类似,在此添加了一个数据加载时间,是为了区分记录。

 

3、Kettle增量抽取数据模型

       下面的这些作业和转换请保持在kettle配置文件中指定的路径下。

3.1 设置作业变量

3.1.1获取上次抽取记录数

是为了判断是否是第一次抽取,若是第一次则全量抽取,否则增量抽取。

点击编辑,$是读取kettle配置文件中的变量值。

设置环境变量

3.1.2获取上次抽取时间

       是为了实现增量抽取,从上次抽取结束时间到当前时间为增量数据。

设置上次数据抽取时间到变量中。

3.1.3获取系统当前时间

       是为了增量抽取数据,取得当前的时间。

设置当前时间

3.2 抽取数据保存到Hive

3.2.1抽取mysql数据中的数据

       抽取MYSQL数据源中的数据,使用is_load判断是否是第一次抽取,否则增量抽取。按照数据表数据更新时间进行过滤。is_load,before_time,curr_time都是前面设置的变量。

点击编辑,配置数据源。

3.2.2 动态生成文件名

       这个文件名需要动态生成,因为不同的数据表保存到Hive的路径是不同的,Hive中表的数据是会根据表名创建一个目录,我们将数据保存到该目录下,就可以使用Hive SQL查询了,无需格外在进行一次load data导入。

注意:但这不是内部表,是外部表,只不过我们把数据放在而已。

3.2.3 获取数据仓库路径

       这个路径是我们在kettle配置文件中配置的。

3.2.4生成数据入库时间

       为每条数据增加一个字段,数据入库时间,即数据加载的时间。

3.2.5生成数据仓库最终保存路径

       将数据仓库路径加上文件名就是一个完整的HDFS路径。

3.2.6保存数据到Hive

       这里我们选择从字段中获取文件名,因为文件名是动态的,不能写死,否则以后你的工作量就线性增加了。

点击Edit。配置我们的Hadoop集群信息。

点击测试。显示下图,表示成功。

退回第一个弹出的窗口,点击内容。

点击字段。点击获取字段,点击最小宽度,将时间字段都设置为字符串,指定格式。不必要的字段可以删除。

3.3 保存本次数据抽取时间

3.3.1 生成唯一主键

3.3.2 获取当前时间

3.3.3 设置字段值

3.3.4 记录当次数据抽取时间

点击编辑。配置你的Log日志使用的数据库。

点击下方的数据字段。选择合适的字段。

3.4 建立一个JOB作业

添加一个转换,指向我们的“设置作业变量”转换所在的路径。其他两个类似,不在描述。

4、测试与验证

       上面的工作都准备完成后,进行测试和验证。

查看HDFS是否有生成相应的文件。

在Linux的命令行窗口输入hive  -e  "select * from rds.test" 查看数据结果。

查看log表

接下来我们测试一个增量抽取。

在数据源表中添加一条新的数据。

重新点击运行一个job,查看HDFS。

在Linux的命令行窗口输入hive  -e  "select * from rds.test" 查看数据结果。

查看Log表

5、部署到Linux上运行

       我们的ETL作业最终都是部署到Linux平台运行的,Kettle提供了kitchen.sh命令来让我们在后台运行JOB。在Linux平台上要安装Kettle,同时也要配置KETTLE_HOME,修改配置文件,改一下那些路径,知道我为什么把路径都配置起来了吧。

比如,可以写一个shell脚本,再让crontab来定时执行,也就是完整的企业级的ETL了。你也可以使用Azkaban或者Oozie来调度,看公司需求了。

6、总结

       我们按照以上步骤执行以后在将job提交到Linux集群上,经过任务调度系统周期调度,就实现了一个表的自动同步问题,在大数据初级阶段,就自动实现了与数据源头的对接,感谢您的阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

企业级数据单表全量增量抽取数据模型(Kettle版) 的相关文章

  • 使用 MYSQL 创建随机数

    我想知道是否有一种方法可以选择 100 到 500 之间随机生成的数字以及选择查询 Eg SELECT name address random number FROM users 我不必将此数字存储在数据库中 而只需使用它来显示目的 我尝试
  • Laravel 5:如何检索并显示属于特定类别的所有帖子

    我有3张桌子 user id username subreddits id name created at posts id title link user id subreddit id 问题是 我手动获取 subreddit 类别的 i
  • 如何使用 Sequel Pro 在导入过程中将字符串更改为日期?

    我正在尝试使用 Sequel Pro 将文件导入到 MySQL 表中 我知道我需要使用 STR TO DATE 但我无法找出正确的语法 我在每一行都收到一堆这样的错误 ERROR in row 1 You have an error in
  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • 备份MySQL数据库

    我有一个大约 1 7GB 的 MySQL 数据库 我通常使用 mysqldump 进行备份 这大约需要 2 分钟 但是 我想知道以下问题的答案 mysqldump 是否阻止对数据库的读取和 或写入操作 因为在实际场景中 我不想在备份数据库时
  • 如何防止大型 MySQL 导入的连接超时

    在开发过程中 我们的本地 WAMP 服务器如何从测试服务器获取最新数据 即生成数据库转储 然后使用 source 命令上传该转储以加载 sql 文件 最近 在导入的最后 我们收到了有关 old 变量的错误 这些变量在更改之前存储了原始设置
  • python - _mysql 无法打开包含文件:'config-win.h':安装 mysql-python 时没有这样的文件或目录

    我试图安装两个名为 mysql python 和 mysqlclient fork of mysql python 的 python 库 然后当我尝试使用 pip 安装它时出现此错误 Collecting mysql python Usin
  • 使用 Coldfusion 分页

    是否可以仅使用一个查询在 Coldfusion 中分页并显示页数 我的理解是 您显然可以使用一个查询进行分页 但您需要一个额外的查询来创建页面 这是为了计算结果总数 currentPage 1 resultsPerPage Offset i
  • LEFT JOIN 返回与 INNER JOIN 相同的结果

    我有一张桌子 磨砂膏 里面有 1600 个独特的物品 第二张桌子有100万以上 我运行 INNER JOIN 并获得 65 个匹配项 SELECT a BW Parent Number a Vendor Name b Parent Supp
  • 通过左连接实现精确分页

    我已经思考这个问题有一段时间了 我认为最好四处询问并听听其他人的想法 我正在构建一个在 Mysql 上存储位置的系统 每个位置都有一个类型 有些位置有多个地址 表格看起来像这样 location location id autoincrem
  • 为什么 MySQL 将 é 与 e 视为相同?

    我使用 Django Web 应用程序将 Unicode 字符串存储在 MySQL 数据库中 我可以很好地存储 Unicode 数据 但是在查询时 我发现 and e被视为好像它们是同一个角色 In 1 User objects filte
  • 将数据从 javascript 发送到 mysql 数据库

    我有这个小点击计数器 我想将每次点击都包含在 mysql 表中 有人可以帮忙吗 var count1 0 function countClicks1 count1 count1 1 document getElementById p1 in
  • 如何在 sqlSave() 命令中跳过主键?

    我正在尝试使用 RODBC 在 MySQL 数据库中插入 data frame 我正在使用的命令如下 sqlSave channel dbData tablename table name append TRUE safer TRUE fa
  • Doctrine 不会在 MySQL 中生成跨数据库外键约束

    我有两个表 db1 Contact 和 db2 Recipient 每个收件人都应该是联系人 因此我在 db1 Contact ContactID 字段上的两个表之间设置了外键 我在 Recipient php 中使用以下注释表示这一点 O
  • 如何自动更新数据库中的记录?

    我有一个工作表 在其中插入新工作 该表还包含职位发布日期 默认情况下 当发生新插入时 作业状态为打开状态 现在 当作业超过 30 天时 我想将作业状态从开放更改为关闭 我该怎么做 尝试创建一个每天运行的事件 如下所示 CREATE EVEN
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 找时间通过 PHP 执行 MySQL 查询

    我在互联网上看到过这个问题 here http www phpbuilder com board showthread php t 2100256 and here http answers yahoo com question index
  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • DBX 错误:驱动程序无法正确初始化

    我在跑步德尔福XE3 终极版 MySQL 数据库 这是我点击时收到的错误Test Connection 作为回应 我在 xampp 目录中找到了 libmysql 库 并将其复制到我的 System32 目录中 但这是行不通的 此消息指的是
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐

  • vue模板语法(上)

    目录 一 插值 什么是插值 建立一个html来编写插值 输出结果 二 指令 什么是指令 建立一个html来编写指令 输出结果 编辑 动态参数 输出结果 三 过滤器 什么是过滤器 建立一个html来编写过滤器 输出结果 4 计算属性 监听属性
  • STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口

    STM32F103C8T6驱动舵机SG90 配置定时器TIM2 TIM3 TIM4的多种重映射模式下的不同IO口 1 使用到的工具介绍 2 整个简单介绍 3 程序的介绍 1 使用到的工具介绍 keil5 烧写软件FlyMcu exe 硬件为
  • CS143-project2 局部特征匹配 Local Feature Matching

    本项目通过harris算法对图像进行兴趣点的检测和提取 然后计算兴趣点周围4 4区域的8个方向特征向量 最后对获取到的特征向量对进行匹配 本算法对旋转 缩放 亮度变化保持一定程度的稳定性 环境 操作系统 WIN7 实现平台 MATLAB20
  • Flask 项目部署(Docker + Flask + uwsgi + Nginx)

    文章目录 一 项目背景 二 项目部署 2 1 项目基础环境 2 2 获得 Python 环境的所需依赖 2 3 配置 gunicorn 2 4 编写 Dockerfile 2 5 编写 docker compose 选用 2 6 Docke
  • CS224W 第一讲 图论基本知识回顾

    网络的组成 一个网络由 对象 关系 系统 组成 网络的表示 有向图和无向图 节点的度 这里平均度数分别为 2E N 和 E N 同时 有向图有一个很重要的概念就是 所有的出度和入度是相同的 完全图 clique or Complete gr
  • 前端传递base64编码,java后端接收,并转为MultipartFile对象

    前端传递的base64 通过url Base64中的 和 字符变为形如 XX 的形式 所以后端接收的字符串是带 的 所以需要解码 String decode URLDecoder decode avatar 下面是工具类 base64转为m
  • 3DMax 卡死、白屏、渲染死机问题总结

    白屏 3dmax出现白屏解决方法 以下是ChatGPT给出的答案 内存不足 3DsMax需要大量的内存才能正常运行 如果你的计算机内存不足 3DsMax就会卡死 解决办法是升级你的计算机内存或者关闭一些不必要的程序来释放内存 显卡驱动过时
  • C++之tuple

    2023年6月4日 周日下午 今天下午简单学习了一下tuple 现在来简单介绍一下tuple 功能 生成一个含不同数据类型的元素列 创建 可以通过声明或make tuple来创建tuple include
  • 在Qt中,如何布局,让控件显示在自己想要的位置

    想到一个办法 可以使用QGridLayout 使用空的QLabel填充空白位置 空的QLabel是透明的 所以看起来就是被填充区域为空白 可以让自己想要显示的控件显示在右上方或者左下方或者任何想要显示的地方 绿色为填充的空QLabel 如图
  • 网课重学宣言:御风计划

    当前状态 我报了网课 2023年4月份报的花了1w3 现在是快7月份了 但是我没学多少 这一份课程的学习困难重重 如今我面临两个选择 一个是放弃这么课 跟着流程继续学习 能学一点是一点 然后把其他精力放在别的方面 另一个是重新延期学习 重新
  • Qt下监测内存泄漏

    在写Qt应用程序时 由于是采用C 语言 经常会碰到一个令人棘手的问题 那就是内存泄漏 虽然后面C 为了防止内存泄漏 发布了智能指针以用来避免内存泄漏 但是并不能完全避免 而且智能指针使用不当 同样会造成非常严重的问题 这里智能指针就不在赘述
  • 项目在was 7.0上部署问题解决方案

    年前 在做项目的时候 遇到客户要求应用服务器采用WebSphere服务器 之前从来没有接触过该类服务器 所以项目在架构部署上遇到了很多问题 现在给自己做个笔记 记录一下在websphere应用上遇到的问题 为以后做参考 同时 给有遇到此问题
  • 谈GPT-2(附大量网址)

    文章目录 前言 关于GPT 2 各个版本的GTP 2 中文版GTP 2 语料链接 15亿参数版GPT 2 OpenGPT 2 前言 GPT 2这个名字不知有多少人知道 但有很多人应该都知道埃隆 马斯克的OpenAI吧 OpenAI 由诸多硅
  • Python时间模块之calendar模块

    目录 简介 calendar month isleap calendar leapdays monthcalendar monthrange timegm 总结 简介 在项目开发中做功能经常会用到关于时间的操作 比如会员过期的定时任务 一些
  • 计算机视觉需要学什么?CV知识点

    最近有人问计算机视觉需要学什么 我自己本身是通过自学然后找到了计算机视觉相关的工作 这里我分享一下自己的当初掌握的知识点 希望能帮助到你 以下内容仅供参考 计算机视觉需要学什么 学习计算机视觉需要具备的知识储备有 1 图像处理的知识 图像处
  • 记录一次rabbitmq ConfirmCallback不生效的问题

    记录一次rabbitmq回调函数不生效的问题 application yml里是否存在 springboot版本的问题 改为2 1 7 RELEASE即可 以上都未生效的话 检查一下是否自己写了连接rabbitmq的bean 在里面加上下面
  • Unity 3D中的帧动画播放

    帧动画 Frame By Frame 的原理 链接 项目实例资源 关键是连续的关键帧分解动作 也就是在时间轴的每帧上逐帧绘制不同的内容 使其连续播放而成动画 虽然每一帧都不一样 处理的信息量大 但是 帧动画具有非常大的灵活性 几乎可以表现任
  • C/C++之内存四区

    程序运行时 将内存大致分为四个区域 代码区 存放函数体的二进制代码 由操作系统进行管理的 全局区 存放 全局变量和 静态变量以及 常量 栈区 由编译器自动分配释放 存放函数的参数值 局部变量等 堆区 由程序员分配和释放 若程序员不释放 程序
  • numpy——mgrid

    x1 x2 np mgrid x1min x1max num1j x2min x2max num2j x1返回的是x1min到x1max间均匀分成num1个数 进行横向扩展为方阵 x2返回的是x2min到x2max间均匀分成num2个数 进
  • 企业级数据单表全量增量抽取数据模型(Kettle版)

    最近在使用Kettle进行ETL的工作 现在总结一下 需求是将MYSQL中的表数据增量备份到HIVE仓库中 第一次是全量 我只想给大伙来点实用的 避免大家踩坑 Kettle是一个基于图形化的ETL工具 也可以用于集成各种作业 比如Sqoop