kettle经验篇:万字长文带小白朋友探索pentaho资源库

        kettle是一款免费开源的ETL工具,在2006年被Pentaho公司收购,所以也被叫做Pentaho Data Integration。虽然这款工具在细节上还存在一些bug,但随着这些年版本的不断更新,越来越能适应商业化的ETL项目。

        kettle具体的数据清洗与同步工作是由转换(transformation)完成的,在转换的开发界面可以实现数据的提取、清洗、同步,转换最终以ktr文件的形式保存下来。

        ETL的项目当然不可能只是做一次数据同步,尤其是在数据仓库项目上,是需要大量的、定时的数据同步任务。所以在kettle中使用作业(job)来管理、调度转换,在作业中可以设置转换的同步频率、执行方式等;也可以在作业中再嵌套作业,具体使用方式要看实际项目场景。

        转换与作业是kettle工具主要的开发成果,也是最重要的资源,那么这些资源存放在哪里呢?答案是资源库。通过资源库来存放、管理转换与作业。kettle的资源库有3种:数据库资源库、本地资源库、Pentaho Repository。3种资源库的简要介绍如下:

资源库类型        描述适用性
Database Repository(数据库资源库)kettle的资源文件存储到数据库中适合团队协同开发管理
File Repository(文件资源库)也叫本地资源库,kettle的资源文件存储到本地适合个人本地练习
Pentaho Repository需要部署kettle的服务端,kettle的资源文件存储在服务端。具备内容管理、版本管理、依赖完整性检查等用途。适合团队协同开发管理

        这篇主要会去介绍 Pentaho Repository这种适合团队协同开发的资源库,这也是我所负责的项目一直在使用的资源库类型。21年之前Pentaho Repository的风评确实很差劲,因为资源库卡顿的让人想摔鼠标;但随着9.x版本的客户端与服务端发布问世,Pentaho Repository已经可以胜任项目要求了。


目录

一、Pentaho Repository资源库下载

二、Pentaho Repository资源库部署

1、部署前环境

2、部署过程

三、Pentaho Repository资源库登录

四、Pentaho Repository资源库管理

1、资源库用户管理

2、资源库导入导出

3、资源库迁移技巧

4、资源库作业规范

5、资源库版本管理

6、资源库回收站管理

五、Pentaho Repository资源库备份


一、Pentaho Repository资源库下载

        关于kettle的下载,要分清楚两个大版本:社区版、企业版。社区版是免费的,企业版是收费的。但是社区版不代表就不能使用,它是可以满足大部分的ETL项目的,具体的对比大家可以往下看,官网提供的一张社区版和企业版对比图。

        SourceForge是一个开源软件项目托管平台,kettle的客户端和服务端都能在这里直接下载。但2022年左右就不再直接提供软件包下载了;无论是客户端还是服务端,都需要去官网下载。但SourceForge还是提供了官网的社区版和企业版下载地址。

Pentaho from Hitachi Vantara download | SourceForge.nethttps://sourceforge.net/projects/pentaho/

下载地址

         但是在2024年年底,kettle官网似乎是关闭了所有的社区版软件下载途径。无论是按照SourceForge提供的官网下载地址,还是从官网上自己探索社区版下载途径都无功而返。

SourceForge提供的社区版下载页面Not Found(2024年底)
官网社区版kettle下载探索(2024年底)

         具体为什么会出现这种情况,官网上也没有看到通知和新闻,只当是它在维护吧。我在这里先给大家提供一个百度网盘下载链接,pentaho server版本是9.4,client版本是9.3。等到后续官网恢复了社区版下载,这篇文章我会把这一段再更新掉。

通过网盘分享的文件:pentaho-community
链接: https://pan.baidu.com/s/1Ryc7j1JXehBVDYfLBiMP3Q

提取码: zqd1 

 

二、Pentaho Repository资源库部署

        Pentaho Repository是由tomcat发布,在Windows和Linux操作系统上都可以部署。但是经过测试发现部署在Windows上bug会更多,因为Windows server服务器有个比较头疼的点,每一年左右就要重启一次,否则就会出许多莫名其妙的bug(亲测在win2008、win2012、win2016、win2019上都有这种问题)。所以还是推荐在Linux系统上部署。

1、部署前环境

下面是部署前的环境说明,也是这几年尝试过的一些经验总结。

虚拟化平台

        现在大部分项目都在使用虚拟化平台,比如老牌的虚拟化软件VMware、新兴的云计算平台华为云等。但是不建议大家将Pentaho Repository部署在华为云的服务器上,并不是诋毁华为云,它在其他方面可能做的很优秀;只是真的在测试过程中发现Pentaho Repository在华为云服务器上的性能很差;这个大家可以看我的另一篇文章:kettle经验篇:Pentaho Repository 类型资源库卡顿问题-CSDN博客https://blog.csdn.net/m0_58872140/article/details/144790947?spm=1001.2014.3001.5501

Linux操作系统

        目前已经在RHEL7、RHEL8、centos7、centos8、Anolis OS 8.9系统上部署使用过,均比较稳定,其他操作系统版本未测试,所以不好评价。

Pentaho Repository 版本

        目前项目使用的版本有Pentaho Server 9.2、Pentaho Server 9.3、Pentaho Server 9.4,也都比较稳定,截至2025年1月,Pentaho Server版本已经出到了10.2,但是Pentaho Server 9.4之后的版本都还没试用过,但按照kettle的发展水平来说,应该也不会差。

服务器

       在项目上,Pentaho Repository资源库所需要的存储资源并不高,一般的项目有个300G就足够了。CPU在8核以上,内存在16G以上。

       如果是自己练习自己玩,存储有个50G都可以;CPU双核、内存8G就能跑得很流畅。

2、部署过程

下面开始给大家描述下部署过程。

序号步骤
1服务器配置检查
2上传pentaho server软件包
3检查环境变量
4开放防火墙端口
5启动资源库
6验证资源库

1、服务器配置检查

(1)CPU

        项目上部署,服务器CPU至少要8核;自己练习2核就够。

(2)内存

        项目上部署,服务器内存至少16G;自己练习有个8G就足够。

(3)存储

        建议是有个专门的挂载点去存放Pentaho Repository资源库内容,且使用LVM逻辑卷管理。一般项目上在划分服务器的时候,如果不提前说清楚,存储基本上都划到根目录下,而且是标准分区,扩容很麻烦。如果是在自己练习的时候,也建议按照这种规范来。当然,直接放到根目录也是可以的,这里只是在讲一种规范。

        例如下图是我自己搭的一个测试服务器,是新建了一个/pentaho的挂载点,Pentaho Repository的软件包以及资源内容都存在在这里。

/pentaho挂载点

顺便把新增挂载点存储的方法分享给小白朋友

#1、为服务器新增一块磁盘

#2、创建pv
pvcreate /dev/sdb #sdb是新增的磁盘盘符

#3、创建vg
vgcreate pentahovg

#4、创建lv
lvcreate -n pentaholv --extents 100%FREE pentahovg

#5、格式化
mkfs.xfs /dev/pentahovg/pentaholv

#6、创建挂载点目录
mkdir /pentaho

#7、将挂载信息写入/etc/fstab
echo "/dev/pentahovg/pentaholv /pentaho                 xfs     defaults        0 0" >> /etc/fstab

#8、立即挂载
mount /pentaho

2、上传pentaho server软件包

上传到提前准备好的/pentaho目录下,并解压。

上传解压

3、检查环境变量

(1)检查Java环境,看是否安装了JDK1.8

检查JDK安装情况
JDK已安装成功

        我在这里使用了yum安装。但很多项目上可能是纯内网环境,也没有挂载镜像,也没有局域yum源。这种情况其实也不要紧,大家使用rpm离线安装即可,只是一个jdk而已,很简单。jdk的提网盘链接放在下面了。

链接: https://pan.baidu.com/s/1ZxaFb65PqNWYwgyM-wKbZw

提取码: zqd1 

拿到jdk包上传到服务器,执行如下命令 

rpm -ivh jdk-8-linux-x64.rpm

(2)将pentaho server的重要目录设置到环境变量

        这个步骤其实不做也不影像,只是我习惯了去做。一个是因为方便,一个是因为怕忘记目录在哪里。这里有3个重要目录:启动目录,资源库目录、资源库版本目录。

#将启动目录写入环境变量
echo "PENTAHO_HOME=/pentaho/pentaho-server" >> ~/.bash_profile

#将资源库文件目录写入环境变量

echo "PENTAHO_DATA=$PENTAHO_HOME/pentaho-solutions/system/jackrabbit/repository/workspaces/default" >> ~/.bash_profile

#将资源库版本文件目录写入环境变量
echo "PENTAHO_DATA_VERSION=$PENTAHO_HOME/pentaho-solutions/system/jackrabbit/repository/version" >> ~/.bash_profile

#加载环境变量
source ~/.bash_profile
pentaho重要目录写入环境变量

4、开放防火墙端口

        如果项目允许关闭防火墙,就直接关掉防火墙最方便。如果不能关闭防火墙,就需要开放pentaho server的端口。pentaho server的默认端口是8080

firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --permanent --list-ports

5、启动资源库 

        启动资源库很简单,进入到pentaho server的启动目录,执行启动脚本。执行脚本后不会立即启动成功,需要等待1分钟左右。

启动资源库

6、验证资源库 

验证资源库是否部署成功,可以用以下方法。

使用curl命令

curl 服务器ip:8080

当出现以下输出时,说明已经部署成功了。 

curl命令验证

还可以直接在浏览器上输入pentaho Repository地址——服务器IP:8080/pentaho

出现如下界面,说明也部署成功了。这里的用户名可以使用默认admin用户密码:admin/password

pentaho控制台

三、Pentaho Repository资源库登录

        在客户端总共有3种资源库可以选择配置登录,这3种资源库在文章开头已经和大家分享过了:本地资源库、数据库资源库、pentaho repository资源库。下面和大家描述下pentaho repository资源库的配置登录过程。

1、点击客户端右上角的connect

        可以在图中看到 “Repository Manager”,点击即可进行资源库管理界面。而图中绿色框中的内容是当前客户端已经配置连接过的资源库。

pentaho repository配置登录-选择资源库管理

2、新增资源库

                 当前界面是资源库管理界面,按照图中操作即可对现有的资源库连接进行删除和修改;亦可进行新增资源库。

pentaho repository配置登录-管理资源库增删改

 3、选择Get Started

pentaho repository配置登录-选择Get Started

 4、配置pentaho repository资源库

配置参数说明

Display Name

【必填】资源库名称,起名字的时候见文知义即可

URL

【必填】把localhost换成部署服务器IP

Description

【可选】这里主要是对资源库的描述,填写与否都可以

Launch connection on startup

【可选】这里勾选与否都不影像资源库使用
pentaho repository配置登录-配置资源库

 5、配置完成 

        以上的参数配置完成后,点击右下角的Finish即可 。此时已经配置完成,会出现如下界面。

6、登录资源库

        配置完成后,点击右上角connect;选择刚刚创建的资源库名称,即可弹出用户登录界面,此时输入用户密码即可登录。至于用户密码如何设置,大家可以往下看。

四、Pentaho Repository资源库管理

        在ETL项目上对于资源库的管理是非常重要的一项工作,巧用资源库管理可以极大的提高工作效率,这里会选择几个比较常用的点和大家分享。

序号资源库管理内容
1资源库用户管理
2资源库导入导出
3资源库迁移技巧
4资源库作业规范
5资源库版本管理
6资源库回收站管理

1、资源库用户管理

        Pentaho Repository是一个适合团队协同开发的资源库。虽然一个用户可以多人同时登录,但是在ETL项目管理的时候,往往是需要知晓转换、作业各个版本的修改人是谁,方便溯源。所以必须要创建多个用户。下面简述Pentaho Repository创建用户步骤。

(1)登录Pentaho Server服务的web界面

        web界面的地址在上面已经提到过,地址是【服务器IP:8080/pentaho】。刚部署完还没有创建用户的时候,可以使用admin进行登录,admin的默认密码是password。

(2)点击 “主页”,选择 “管理”

        下面这张图就是pentaho的web主页面,进入后点击左上角的主页,选择下划出的 “管理”点击。

用户管理—选择“管理”

 (3)增删改用户与角色权限

        在第(2)步选择“管理”后,会进入到如下界面。在此界面可以进行用户的增删改、角色的增删改。这里的用户角色,如果比较严格的话就按照实际需要分配角色或者重新创建角色;如果项目上没有那么严格就直接全给了。

用户管理—增删改用户

2、资源库导入导出

        在项目上,资源库的导入与导出是很频繁的。因为ETL项目多了以后,有很多ETL模型是可以复用的;从其他项目拿来ETL模型后,直接导入修修改改就能用,这会大大提高工作效率。下面简述资源库导入导出步骤。

  • 资源库导出

(1)客户端界面依次选择【工具】—>【资源库】—>【导出资源库】

资源库导出—选择导出资源库

 (2)选择导出资源库文件存放路径、设置导出资源库文件名称

        设置完后,点击保存!

资源库导出—资源库文件名称、存放路径

 (3)不设置规则

资源库导出—不设置规则

(4) 开始执行导出

资源库导出—开始执行导出

 (5)导出完成

资源库导出—导出完成
  • 资源库导入

(1)客户端界面依次选择【工具】—>【资源库】—>【导入资源库】

资源库导入—选择导入资源库

(2)选择要导入的资源库文件

资源库导入—选择资源库文件

(3)不应用规则

资源库导入—不应用规则

(4)选择导入的资源放置的目录

        可以按照需要提前新建一个目录,用于放置导入的资源!

资源库导入—选择目录

(5)嵌入

资源库导入—嵌入

资源库导入—开始导入

(6)完成导入

        完成上述步骤后,等到资源库导入完成即可。

3、资源库迁移技巧

        上面和大家分享了资源库的导入导出,步骤其实很简单。但其实在导入的时候有个特别头疼的问题,就是在做资源库导入的时候,会出现一个情况:导入的资源会在导入时选择的目录下重新按照【/home/.....】这样的路径格式去存储。

        这个情况会造成两个问题:一个是没有按照自己预想的规划存放ktr和kjb文件;一个是会使得资源中的作业中的绝对路径失效,因为路径已经变化了。

        那如何处理这个情况呢?

        方法就是将ktr和kjb文件移动至提前规划的目录。怎么移动呢?kettle客户端不支持批量移动。成百上千个转换和作业,一个个靠手移动真的得累死人。在这个场景下,pentaho server的web界面,就发挥了作用!下面给大家做下分享演示。

(1)将测试目录子2的ktr文件批量移动到目标dir

        点击pentaho server的web界面中的浏览文件,即可进入如下界面。找到需要移动的文件目录,并确认目标目录是哪个。

批量移动ktr/kjb

(2)ktr/kjb文件全选

         在kettle的客户端中,是没有全选这个操作的。但是在web界面可以,简单的说就是web界面的文件管理功能,就类似于在操作系统上的文件操作。

        打开需要移动的文件目录后,先选中第一个文件;再摁住键盘上的 shift 键;最后选中最后一个文件;此刻已经全选文件。然后点击文件右侧的复制(或者剪切都可以)

批量移动ktr/kjb

(3)粘贴至目标dir

        进入目标dir目录下,点击粘贴,即可将复制或者剪切的资源文件批量移动到目标dir下。

粘贴至目标dir

4、资源库作业规范

        通过上面的分享,我们已经可以进行对资源库进行迁移,并批量处理ktr与kjb资源文件的技巧。但是距离真正使用导入的资源库,还有一个关卡——作业中的ktr绝对路径或者kjb绝对路径。

        建议的规范操作是ktr绝对路径或者kjb绝对路径设置为全局变量,这样即使说想要将ktr、kjb文件更换一个新的目录,也不必再担心因为目录变更而导致作业无法正常执行了。

如下图

作业绝对路径设置为全局变量
转换绝对路径设置为全局变量

那么全局变量在哪里设置呢?大家可以看下图。

编辑kettle.properties文件
设置ktr、jib全局变量

5、资源库版本管理

        pentaho repository提供了版本管理。因为有时ETL开发人员可能因为手快于脑保存错了ETL模型,此时想要恢复到之前的版本,也是支持的。

        并且版本管理可以查看到历史版本的修改者是哪个用户,可以进行溯源管理,也是防止ETL开发人员随意甩锅哦~

6、资源库回收站管理

        工程师也是人嘛,人总有失误的时候。有时候我们可能会失误删除某些重要资源,重新开发就不划算了。所以可以利用pentaho repository资源库的回收站功能,对误删资源进行恢复。当然您也可以选择彻底删除该资源。

资源库回收站

五、Pentaho Repository资源库备份

        虽然pentaho repository资源库具有回收站功能,但是如果我们的资源库因为其他原因发生了损坏或者丢失,是很难恢复的。所以我们可以通过备份脚本对资源库进行全量备份,以下是资源库备份shell脚本的一个样例,供大家参考。

#!/bin/bash
#定义备份文件目录,即kettle-资源库安装所有目录
default_db_path="/home/pentaho/pentaho-server"

#备份文件,先找到文件,找到后,然后备份文件(压缩包形式备份):
#需要备份的文件有 2 个:default目录下面的db.mv.db 和 version目录下面的db.mv.db.
#有些项目现场的文件不是db.mv.db,有可能是db.h2.db文件。
#第一步:定义日期,用于下面备份文件用;
DATE=$(date +%Y%m%dT%H%M%S)
#备份第一个文件(default目录中db文件):
cd $default_db_path/pentaho-solutions/system/jackrabbit/repository/workspaces/default &&
latest_db=$(ls -t db.*.db | head -n 1) 
#压缩备份文件,减少空间
if [ -z "$latest_db" ]; then #-z 表示后面参数是否为空
    echo "在${default_db_path}/pentaho-solutions/system/jackrabbit/repository/workspaces/default目录下没有找到 ${latest_db} 文件!"
else 
   echo "在${default_db_path}/pentaho-solutions/system/jackrabbit/repository/workspaces/default目录下已找到 $latest_db 文件"
   tar -czvf ${latest_db}_$DATE.tar.gz db.*.db &
   echo "成功备份:${latest_db}!文件"
fi

#删除备份文件,只保留最新的10个文件。处理思路:
#1、先统计压缩包gz文件有多少个;
#2、超过10个以上的,删除前面几个,然后每删除一个,变量累加1.
#3、不超过10个文件,不进入到删除界面。
#定义保留文件数
ReservedNum=7
#第一步:*.tar.gz为文件类型,不写查找所有文件
FileNum=$(ls -l  *.tar.gz |grep ^- |wc -l)
#第二步:ls -rt [r 表示倒序,即最旧的数据放在最上面,t 表示按时间]
while(( FileNum > ReservedNum))
do
	echo "备份文件个数:$FileNum"
    OldFile=$(ls -rt *.tar.gz| head -1)
    echo  "删除文件:" $OldFile
    rm -f $OldFile
    let "FileNum--"
done

#备份第2个文件(version目录下的db文件)
cd $default_db_path/pentaho-solutions/system/jackrabbit/repository/version &&
latest_db=$(ls -t db.*.db | head -n 1) 
#压缩备份文件,减少空间
if [ -z "$latest_db" ]; then #-z 表示后面参数是否为空
    echo "在${default_db_path}/pentaho-solutions/system/jackrabbit/repository/version目录下没有找到 ${latest_db} 文件!"
else 
   echo "在${default_db_path}/pentaho-solutions/system/jackrabbit/repository/version目录下已找到 $latest_db 文件"
   tar -czvf ${latest_db}_$DATE.tar.gz db.*.db &
   echo "成功备份:${latest_db}!文件"
fi

#删除备份文件,只保留最新的10个文件。处理思路:
#1、先统计压缩包gz文件有多少个;
#2、超过10个以上的,删除前面几个,然后每删除一个,变量累加1.
#3、不超过10个文件,不进入到删除界面。
#定义保留文件数
ReservedNum=7
#第一步:*.tar.gz为文件类型,不写查找所有文件
FileNum=$(ls -l  *.tar.gz |grep ^- |wc -l)
#第二步:ls -rt [r 表示倒序,即最旧的数据放在最上面,t 表示按时间]
while(( FileNum > ReservedNum))
do
	echo "备份文件个数:$FileNum"
    OldFile=$(ls -rt *.tar.gz| head -1)
    echo  "删除文件:" $OldFile
    rm -f $OldFile
    let "FileNum--"
done
exit 0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜豆豆耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值