参考:Kettle系列(一)下载安装与基础配置_kettle下载-CSDN博客
1. 下载Kettle
直接下载Kettle9.4 https://privatefilesbucket-community-edition.s3.us-west-2.amazonaws.com/9.4.0.0-343/ce/client-tools/pdi-ce-9.4.0.0-343.zip
打开Kettle官网 https://sourceforge.net/projects/pentaho/files/ ,Kettle的下载地址不在网站上,而是在一个pdf文档中,如下图:
下载这个pdf后,打开这个PDF文件:
点击连接后,会进入网页 Pentaho Developer Edition Download | Pentaho
官网下载 Pentaho Developer Edition Download | Pentahohttps://pentaho.com/pentaho-developer-edition/
弹出使用条款,勾选后点击按钮
展示各个版本的Kettle
这个页面显示的最新版的Kettle,如果要Kettle 9.4版的,点这个连接下载https://privatefilesbucket-community-edition.s3.us-west-2.amazonaws.com/9.4.0.0-343/ce/client-tools/pdi-ce-9.4.0.0-343.zip
下载后解压即可。
解压后的目录结构如下:
对目录结构的一些重点目录作一下说明:
2.1 下载安装并配置java开发环境JDK
JDK有很多版本,不同版本的配置方式有差异。这里讲JDK8 和JDK22。
JDK官网下载地址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8
java se8= jdk8+jre8
jdk是开发java程序用的,jre是运行java程序用的。下载了Java SE Development Kit则需要配置jdk和jre。
2.1 下载并安装Java SE Development Kit 8u431后的配置
(1)配置JDK环境变量
kettle是用java开发的,所以需要先配置jdk的环境变量。java的环境变量配置jdk8就可以了,需要自行配置,注意一点环境变量的名称为:JAVA_HOME
再次点击新建,添加CLASSPATH变量名,输入.;%JAVA_HOME%\lib(第一位是点号加分号,原因是因为查询时可能会存在找不到文件情况,加了之后防止查询不到文件),输入后点击确定保存。
在系统变量中查找到Path变量名,找到之后点击编辑。点击新建,添加路径%JAVA_HOME%\bin,输入后点击确定保存。
验证安装是否成功
(1)输入 java -version后按回车键,查看安装的JDK版本,出现下面的页面为正常,如不正常可以检查是否配置过程有误,(java后有空格)
(2)输入java,按回车出现下图页面
(3)输入javac,按回车出现下图页面
至此,恭喜你的JDK的安装就完成!
kettle的环境变量,这个不配也没有关系,不影响使用,不过这里建议配置一下,配置的路径data-integration路径即可(即可以看到Spoon.bat文件的路径),环境变量名称为KETTLE_HOME
2.2 下载并安装JDK Development Kit 22.0.1后的配置(如果已经安装了JDK8,就不用安装这个了,这里仅做演示)
安装好后,当前系统已经为我们配置好环境变量,我们可以根据以下方法进行验证,如果没有配置好,可以按照【4.2 配置JAVA_HOME环境变量】及【4.3 】配置环境变量,现在我们来验证一下jdk是否已配置.
在命令提示符中输入 java -version,如果显示jdk版本号,如下图,说明环境变量已设置。
如果没有成功安装,则按照下面步骤配置环境变量。
修改系统变量path,新增变量值:%JAVA_HOME%\bin
3. kettle安装与配置【windows环境下】
kettle 是免安装的,只需要解压kettle pdi压缩包至本地即可。由于kettle是基于java语言的,所以要安装jdk。
启动kettle:
必要的修改:
先看一下lib文件夹,这个是用来放置jar的地方,因为kettle是用的java开发的,所以一些jar的依赖都会放到这里面,后面我们有需要用到jar的地方也是放到这里,先找到“Spoon.bat”这个文件,我们需要改一下里面的一些内容。
找到if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m"这句话,在它后面加上"-Dfile.encoding=UTF-8",不然后面链接数据库资源库的时候,如果连接的信息一旦有中文字符,会导致下次进来连接按钮丢失。
用Nodepad++或EditorPlus 打开,修改后保存即可。
4. 下载MySQL驱动并存放到data-integration\lib下
驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)https://downloads.mysql.com/archives/c-j/
根据自己的需求选择版本下载即可。下载完成后,解压并将目录下的jar文件拷贝出来。
复制到kettle安装目录的data-integration\lib下即可。
然后针对该转换配置MySQL连接:
进入主对象树下的DB连接,新建数据库连接,点击测试如果显示正确连接则说明连接成功,点击确定保存。
5. Kettle部署到Linux和Windows
ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环,也是工作量较大的一块。
Kettle是ETL中其中一个开源工具,基于纯Java开发,Kettle 是 PDI 以前的名称,PDI 的全称是Pentaho Data Integeration。
kettle有两种脚本:transformation(转换)和 Job(作业)
transformation:完成针对数据的基础转换
job:完成整个工作流的控制
Kettle有三个主要组件:Spoon、Kitchen、Pan
Spoon:图形化工具,用于快速设计和维护复杂的ETL工作流。windows选择Spoon.bat;Linux选择spoon.sh
Kitchen:用来执行job(作业)
Pan:用来执行transformation(转换)
6. Windows Server 2019 服务器上定时执行kettle作业任务
此时我们在kettle上已经完成了作业流程,并确保作业流程的执行没有问题。下面我们就要将数据抽取作业部署到服务器任务计划程序库中定时执行(以下是在windows环境下的执行方式)。
第一步:通过bat批处理文件执行数据抽取作业(即kjb文件)
建立一个bat文件,里面写入:
@echo off
set d=%date:~0,4%%date:~5,2%%date:~8,2%
set name=日志名称_%d%.log
D:
cd D:/ETL/data-integration
kitchen.bat /norep -file=D:/ETL/kettledata/作业/作业名称.kjb /logfile=D:/ETL/kettledata/日志/%name%exit
其中 : set d=%date:~0,4%%date:~5,2%%date:~8,2% 在cmd中获取当前系统时间,格式为20180627
set name=ydys_病案首页_%d%.log 拼接文件名称
cd D:/ETL/data-integration 跳转到你电脑上kettle的安装路径下
kitchen.bat /norep -file=D:/ETL/kettledata/作业/作业名称.kjb 调用kitchen.bat并执行指定的数据抽取作业
/logfile=D:/ETL/kettledata/日志/%name% 输出日志的路径及文件名称,最后退出
第二步:由于在执行bat批处理文件时服务器会弹出一个cmd.exe窗口,黑乎乎的不好看,本人也有强迫症,所以将bat批处理文件转换为vbs文件再执行时,就可以解决cmd.exe窗口的弹出问题。
创建一个vbs文件,里面输入:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c D:\上一步bat文件及路径.BAT" ,vbhide
然后将该vbs文件部署到服务器任务计划程序库中执行就好了。
日积月累的日志太多,如何删除一月之前的日志,若日志的文件名不含时间,则不能使用该方法。
按照上面第一步输出的日志入下图所示:
我们如何删除呢,同样的创建一个bat文件,里面输入:
@echo off
set y=%date:~0,4%
set m=%date:~5,2%
set d=%date:~8,2%
set /a m-=1
if %m% LSS 11 set m=0%m%
if %m%==00 set m=12&set /a y-=1
set datestr=%y%%m%%d%
setlocal EnableDelayedExpansion
for %%i in (D:\ETL\kettledata\日志\*.log) do (
set var1=%%i
set var2=!var1:~-12,8!
if !var2! lss %datestr% (del D:\ETL\kettledata\日志\*!var2!.log)
)
endlocal
exit 0
其中,D:\ETL\kettledata\日志\ 是在服务器上日志的存放路径
set /a m-=1 将获取到的系统月数减1,即删除一月之前的数据
这样我们就可以将距系统时间一月之前的日志进行删除。