pentaho(keetle)数据同步实践

1 pentaho简介

pentaho可读作“彭塔湖”,在keetlepentaho公司收购后改名而来。

pentaho是一款开源ETL工具,纯java编写的C/S模式的工具,可绿色免安装,开箱即用。支持Windows、macOS、Linux平台。

pentaho有2个核心设计,即转换作业

转换是一个包含输入、逻辑处理、输出的完整过程,即ETL。

作业是一个提供定时执行转换的机制,即定时服务调度。

pentaho官网下载链接:Pentaho Community Edition Download | Hitachi Vantara

pentaho由主要四部分组成

  • Spoon.bat/Spoon.sh :勺子,是一个图形化界面,可图形化操作转换和作业
  • Pan.bat/Pan.sh : 煎锅,可用命令行方式调用转换
  • Kitchen.bat/Kitchen.sh : 厨房,可用命令行方式调用作业
  • Carte.bat/Carte.sh : 菜单,是一个轻量级web容器,可建立专用、远程的ETL Server

2 pentaho安装

由于是纯java编写,依赖jdk环境。所以需要先配置jdk环境,这里省略。

从官网下载pentaho安装包后,直接解压。

重点目录以及执行文件说明

  • lib目录 : 这是依赖库目录,例如各个数据库的jdbc驱动,都放在此目录下
  • logs目录 :这是转换和作业运行的默认日志输出目录
  • simple-jndi目录 :这是各个数据库的JNDI连接信息的全局配置
  • Spoon.bat/Spoon.sh :勺子,是一个图形化界面,可图形化操作转换和作业
  • Pan.bat/Pan.sh : 煎锅,可用命令行方式调用转换
  • Kitchen.bat/Kitchen.sh : 厨房,可用命令行方式调用作业
  • Carte.bat/Carte.sh : 菜单,是一个轻量级web容器,可建立专用、远程的ETL Server

3 数据同步案例

这里使用sqlserverpostgresql同步。在Windows平台上操作。

3.1 执行Spoon.bat文件,启动图形化界面

可以看到左侧只有作业转换

3.2 创建一个转换,右键,新建

左侧是一些转换插件。

3.3 创建一个数据源输入,展开输入,选择表输入

切换到主对象树,选择DB连接,连接数据源。

由于我这里是sqlserver同步到postgresql,所以需要创建sqlserver和postgresql的DB连接

创建连接前,需要先下载sqlserver的 jdbc驱动mssql-jdbc-12.2.0.jre8.jar 和 postgresql的jdbc驱动postgresql-42.6.0.jar,我这里直接选的最新版。

sqlserver的连接

​ sqlserver的连接,如果选择JNDI则无法连接,目前猜测可能是驱动版本问题

postgresql的连接

点击测试,如果连接成功,则会弹框提示

3.4 编辑表输入

先选择数据库连接

点击获取SQL查询语句,获取数据表

选择一个数据表后,会提示是否选择全部字段,选择是

点击确定,一个表输入就做好了。

3.5 创建一个数据源输出

如果是全表覆盖同步,则选择表输出,因为这里是需要根据主键判断是否重复,重复则更新,否则就插入,因此这里选择 插入/更新

展开输出节点,选择 插入/更新,并将其拖入到右侧图形界面中,然后将表输入连线到当前节点,按住shift+鼠标左键

这里如果不先连线的话,在配置映射字段时,就无法获取源表字段,需要自行输入

双击进行编辑

点击确定后,一个转换就完成了

点击左上角的运行按钮,即可执行同步了。


Q1:这是一个单表转换,那如果需要一次同步多个表呢?

A1:那就继续按此步骤进行配置,多表转换配置完成后如下

Q2:那表数量很多,这么配置很费时间,有什么更好的办法么?

A2:有。可以编写脚本,正在学习中……


Q3: 前面的转换已经配置完成了,但是只能手动点击运行,能否定时自动运行?

A3:可以。继续看第4节。


4 定时服务

选择文件–>新建–>作业,即可创建一个作业。

在作业窗口,选择核心对象,展开通用,选择Start、转换、成功,分别拖入图形界面中,并按顺序连线

双击转换就,进行编辑,选择转换文件

无论转换、还是作业,都是以xml文件形式保存在本地

此时一个作业即配置完成,但是注意,还没达到定时运行的目的,继续配置

双击Start,对作业进行配置

配置完后点击确定,然后点击图形界面的运行按钮,定时服务即启动了

在日志输出窗口,可看到服务运行日志

至此,pentaho的定时数据同步已完成。


Q4: 定时服务开启后,这个程序窗口被关了或者说程序退出了,服务还运行吗?

A4:不会。由于是C/S模式,客户端服务端一体,进程退出即服务停止


Q5:那有类似后台服务的方式,悄悄运行呢,不被这个界面退出所终止服务?

A5:有。请看第5节。


5 以后台方式运行作业

在介绍中提到,有个Kitchen.bat/Kitchen.sh(厨房)的执行文件,它的作用就是用命令方式调用作业。由于是在Windows平台,所以选择Kitchen.bat执行文件。

打开控制台窗口,进入pentaho安装目录,即Kitchen.bat所在目录,执行如下命令

kitchen /file:{job file path} /level:Basic>>{log file path}

说明:

/file 参数指定 job文件

/level 参数指定日志级别,并写入指定的文件

指定日志文件后,控制台界面就不会输出日志,否则日志会在控制台输出,像下面这样


Q6:总开着一个控制台黑框,也不太好,窗口被关了,服务不也停止了吗?有什么更好的方式吗?

A6:是的。有。可以隐藏掉黑窗口,那么继续往下看。


5.1 隐藏控制台窗口

在Kitchen.bat同级目录下创建一个txt文本文件,输入如下内容

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
kitchen /file:"替换为job文件路径" /level:Basic>>"替换为日志文件路径"

然后以ANSI编码方式另存为.bat文件。用ANSI编码,是防止文件路径有中文出现乱码。

至此,一个完成的pentaho定时数据同步作业服务就完成了。

pentaho(keetle)数据同步实践的更多相关文章

  1. SSIS数据同步实践

    SSIS数据同步实践   背景 在已初步验证不同实例下同构表数据同步方案之后,为了实现数据持续同步,需使用SSIS把之前的生成脚本和执行脚本的两个步骤组合在一起部署成包之后,通过JOB定时去执行: 测 ...

  2. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原

    一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...

  3. 基于MySQL Binlog的Elasticsearch数据同步实践

    一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...

  4. 美团DB数据同步到数据仓库的架构与实践

    背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据( ...

  5. DB 数据同步到数据仓库的架构与实践

    背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据( ...

  6. 大数据实践-数据同步篇tungsten-relicator(mysql->mongo)

    // mongo)";digg_bgcolor = "#FFFFFF";digg_skin = "normal"; // ]]> // [导读] ...

  7. ElasticStack系列之十一 & 同步 mysql 数据的实践与思考

    问题 1. jdbc-input-plugin 只能实现数据库的追加,对于 elasticsearch 增量写入,但经常 jdbc 源一端的数据库可能会做数据库删除或者更新操作.这样一来数据库与搜索引 ...

  8. MongoDB DBA 实践5-----复制集集群的数据同步和故障转移

    (1)复制集集群的数据同步 1>主节点数据库test,在其中goods集合中加入一个文档. 2>在副节点中查看 注意:SECONDARY是不允许读写的,要使用rs.slaveOk()获得读 ...

  9. 阿里Canal框架(数据同步中间件)初步实践

    最近在工作中需要处理一些大数据量同步的场景,正好运用到了canal这款数据库中间件,因此特意花了点时间来进行该中间件的的学习和总结. 背景介绍 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存 ...

  10. YonBuilder低代码开发实践:4行代码实现跨实体列表数据同步

    提到增.删.改.查等数据维护,后端开发者们再熟悉不过了.传统的数据维护通过操作数据库的方式实现,步骤比较繁琐,需要通过Java代码实现数据库链接,然后编写SQL语句.编写实体,将想要的数据存到相应的数 ...

随机推荐

  1. python列表函数的基本使用

    一.列表简介 序列是Python最常见的操作,是最经常使用的一种数据操作.列表是当前序列中使用最多的. 序列中的每一个值对应的位置,称之为索引.通常情景下,第一个索引是位置为0,第二个索引位置为1.. ...

  2. vue中点击其他任意位置关闭弹框

    mounted() { //点击任意位置关闭区域弹窗 document.addEventListener('click', (e) => { //获取弹窗对象 const userCon = d ...

  3. 2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。

    2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码. 答案2023-03-30: 这个程序的主要功能是将 MP2 音频文件解码为 PCM 格式,并输出到 ...

  4. 2022-12-02:有a块草莓蛋糕,有b块芝士蛋糕,两人轮流拿蛋糕, 每次不管是谁只能选择在草莓蛋糕和芝士蛋糕中拿一种, 拿的数量在1~m之间随意, 谁先拿完最后的蛋糕谁赢。 返回先手赢还是后手赢。

    2022-12-02:有a块草莓蛋糕,有b块芝士蛋糕,两人轮流拿蛋糕, 每次不管是谁只能选择在草莓蛋糕和芝士蛋糕中拿一种, 拿的数量在1~m之间随意, 谁先拿完最后的蛋糕谁赢. 返回先手赢还是后手赢. ...

  5. 2020-10-17:谈一谈DDD面向领域编程。

    福哥答案2020-10-17:#福大大架构师每日一题# [答案来自此链接](https://www.jianshu.com/p/fb319d7674ff) 一个通用领域驱动设计的架构性解决方案包含4 ...

  6. Git开发、发布、缺陷分离模型概述(支持master/develop/feature/release/hotfix类型分支)

    Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发.Git最初是由Linux开发者Linus Torvalds创建的,它具有高效.灵活.稳定等优 ...

  7. Django4全栈进阶之路20 项目实战(在线报修):项目需求分析

    为了实现一个在线报修系统,您可以按照以下步骤进行: 创建Django项目和应用 使用Django的命令行工具创建一个Django项目,并在该项目中创建一个名为"RepairApp" ...

  8. json函数

    Python与JSON(load.loads.dump.dumps)   1.Python中加载JSON 使用loads(string):作用将string类型转为dict字典或dict链表 # 加载 ...

  9. 在 Linux 和 Windows 下源码安装 Perl

    Perl 是一种功能丰富的计算机程序语言,运行在超过 100 种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发.在生物信息分析领域,Perl 主要是做数据预处理.文本处理 ...

  10. 你是怎么学习 Java 技术的?

    一.Java 语言 Java 语言不只是一门语言. Java 学习不是一蹴而就就可以达成的,它是一个循序渐进,由浅入深,由表及里的过程.尤其需要注意的是不能有浅尝辄耻,不求甚解的态度.每个地方只抓一点 ...