Kettle
kettle 安装部署
本站点使用 MrDoc 构建
-
+
首页
kettle 安装部署
# 安装 ## 下载 kettle源码地址:[https://github.com/pentaho/pentaho-kettle/](https://github.com/pentaho/pentaho-kettle/) kettle下载地址(旧):https://sourceforge.net/projects/pentaho/files/ kettle下载地址(新):https://privatefilesbucket-community-edition.s3.us-west-2.amazonaws.com/ 拼接 key ## 修改配置 ### windows设置 ```bash # Spoon.bat 配置-Dfile.encoding=UTF-8 适当调整内存 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-Dfile.encoding=UTF-8" # set-pentaho-env.bat 配置PENTAHO_JAVA_HOME set KETTLE_HOME=E:\kettle\pdi-ce-9.3.0.0-428\data-integration set PENTAHO_JAVA_HOME=E:\kettle\pdi-ce-9.3.0.0-428\jdk-11.0.15.1 ``` ### Linux设置 ```bash # spoon.sh 配置-Dfile.encoding=UTF-8 适当调整内存 if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -Dfile.encoding=UTF-8" fi # set-pentaho-env.sh 配置PENTAHO_JAVA_HOME export KETTLE_HOME=/kettle export PENTAHO_JAVA_HOME=/java ``` ### 全局属性设置 kettle启动后,会在KETTLE_HOME下面生成一个.kettle目录,目录下有如下文件 kettle.properties 全局环境参数配置文件 ```bash # This file was generated by Pentaho Data Integration version 9.3.0.0-428. # # Here are a few examples of variables to set: # # PRODUCTION_SERVER = hercules # TEST_SERVER = zeus # DEVELOPMENT_SERVER = thor # # Note: lines like these with a # in front of it are comments # ``` repositories.xml 资源库描述文件,在$KETTLE_HOME/.kettle目录下或$USERHOME/.kettle目录下 ```xml <?xml version="1.0" encoding="UTF-8"?> <repositories> <connection> <name>pg_kettle</name> <server>127.0.0.1</server> <type>POSTGRESQL</type> <access>Native</access> <database>kettle</database> <port>5432</port> <username>kettle</username> <password>Encrypted 2be1111186aa7f2e4cb79a575ca861111</password> <servername/> <data_tablespace/> <index_tablespace/> <attributes> <attribute><code>EXTRA_OPTION_POSTGRESQL.characterEncoding</code><attribute>UTF-8</attribute></attribute> <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute> <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute> <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute> <attribute><code>PORT_NUMBER</code><attribute>5432</attribute></attribute> <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>Y</attribute></attribute> <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute> <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute> <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute> <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute> </attributes> </connection> <repository> <id>KettleDatabaseRepository</id> <name>repo</name> <description>Database repository</description> <is_default>true</is_default> <connection>pg_kettle</connection> </repository> </repositories> ``` shared.xml 共享对象描述文件 ```xml <?xml version="1.0" encoding="UTF-8"?> <sharedobjects> <connection> <name>test</name> <server>127.0.0.1</server> <type>ORACLE</type> <access>Native</access> <database>test</database> <port>1521</port> <username>test</username> <password>Encrypted 2be98af22222a7f2e4cb79a575ca861111</password> <servername/> <data_tablespace/> <index_tablespace/> <attributes> <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute> <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute> <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute> <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute> <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>Y</attribute></attribute> <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute> <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute> <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute> <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute> </attributes> </connection> </sharedobjects> ``` ### 创建pg数据库 ```bash ./initdb -D E:\kettle\pdi-ce-9.3.0.0-428\pgsql\data -E UTF-8 --locale=C -U postgres -W --data-checksums 密码:postgres # postgresql.conf listen_addresses = '*' port = 5432 ./pg_ctl start -D E:\kettle\pdi-ce-9.3.0.0-428\pgsql\data -l E:\kettle\pdi-ce-9.3.0.0-428\pgsql\data\postgresql.log ./psql -h 127.0.0.1 -p 5432 -d postgres -U postgres ``` ## pan和kitchen命令 * pan与kitchen通用参数 | Switch | Purpose | | ------------- | ------------------------------------------------------------ | | rep | 企业或数据库存储库名称 | | user | 用户名 | | pass | 密码 | | dir | 存储库目录 | | file | 如果调用的是本地 KTR 文件,则为文件名,如果不在本地目录中,则包括路径 | | level | 日志级别(基本、详细、调试、行级别、错误、无)(Basic, Detailed, Debug, Rowlevel, Error, Nothing) | | logfile | 将日志输出写入的本地文件名 | | listdir | 列出指定存储库中的目录 | | listrep | 列出可用的存储库 | | exprep | 将所有存储库对象导出到一个 XML 文件 | | norep | 防止 Pan(Kitchen)登录到存储库。如果您已经设置了 KETTLE_REPOSITORY、KETTLE_USER 和 KETTLE_PASSWORD 环境变量,那么这个选项将使您能够阻止 Pan( Kitchen)登录到指定的存储库,假设您要执行本地 KTR 文件 | | version | 显示版本、修订和构建日期 | | param | 以name=value 格式设置命名参数 。例如: -param:FOO=bar | | listparam | 列出有关指定转换中定义的命名参数的信息 | | maxloglines | PDI 内部保留的最大日志行数。设置为 0 以保留所有行(默认) | | maxlogtimeout | 由 PDI 内部保留的日志行的最长期限(以分钟为单位)。设置为 0 以无限期地保留所有行(默认) | ## pan命令 * pan独有参数 | Switch | Purpose | | --------- | ---------------------------------- | | trans | 要启动的转换的名称 | | listtrans | 列出指定存储库目录中的转换 | | safemode | 在安全模式下运行,可以进行额外检查 | * pan示例——运行本地文件 ``` #windows Pan.bat /file:D:\project\pan-mysql-mysql.ktr #linxu ./pan.sh -file=./pan-mysql-mysql.ktr ./pan.sh /file:./pan-mysql-mysql.ktr ``` * pan示例——使用远程数据库资源库 ``` #windows Pan.bat /rep:kettle-mysql /user:admin /pass:admin /trans:pan_mysql_mysql #日志打印: Pan.bat /rep:kettle-mysql /user:admin /pass:admin /trans:pan_mysql_mysql /level:Basic>pan_mysql_mysql.log #默认日志保存在运行命令路径 ``` * pan运行状态码 | Status Code | Definition | | ------------ | ------------------------------------------------ | | 0 | 转换运行没有问题 | | 1 | 处理过程中发生错误 | | 2 | 加载/运行转换期间发生意外错误 | | 3 | 无法准备和初始化此转换 | | 7 | 无法从 XML 或存储库加载转换 | | 8 | 加载步骤或插件时出错(主要是加载插件之一时出错) | | 9 | 命令行使用打印 | ## kitchen命令 kitchen独有参数 | Switch | Purpose | | ------- | ------------------------------------------ | | job | 要启动的作业的名称(与存储库中显示的一样) | | listjob | 列出指定存储库目录中的作业 | * kitchen示例——运行本地文件 ```bash #windows set KETELE_HOME=D:\kettle\pdi-ce-7.1.0.0-12\data-integration set JOBFILE=D:\xxx.kjb set LOGFILE=D:\logs\xxx_%date:~0,4%%date:~5,2%%date:~8,2%.log %KETELE_HOME%\kitchen.bat /file:%JOBFILE% /level:Basic /logfile:%LOGFILE% #linux ./kitchen.sh -file=./pan_mysql_mysql.kjb ./kitchen.sh /file:./pan_mysql_mysql.kjb #相对路径:${Internal.Entry.Current.Directory},该参数要求ktr文件和job文件必须放到同一目录下 ``` * kitchen示例——使用远程数据库资源库 ``` #windows Kitchen.bat /rep:kettle-mysql /user:admin /pass:admin /job:job_Kitchen ``` * kitchen运行状态码 | Status Code | Definition | | ------------ | ------------------------------------------------ | | 0 | 工作顺利进行 | | 1 | 处理过程中发生错误 | | 2 | 加载或运行作业期间发生意外错误 | | 7 | 无法从 XML 或存储库加载作业 | | 8 | 加载步骤或插件时出错(主要是加载插件之一时出错) | | 9 | 命令行使用打印 | ## 脚本 ```bash #!/usr/bin/bash # Linux 数据库资源库调用 V_DATETIME=$(date +'%F %T.%N') # 如:2021-02-28 10:09:59.942033548 V_DATE=${V_DATETIME:0:10} # 如:2021-02-28 KETTLE_HOME=/app/data-integration KETTLE_REP=repo KETTLE_USER=admin KETTLE_PASS=admin KETTLE_DIR=/job KETTLE_JOB=demo-uuid4 KETTLE_TRANS=demo-uuid4 KETTLE_LOG_LEVEL=Basic KETTLE_LOG_DIR=/app/data-integration/logs/${V_DATE} KETTLE_LOG_FILE=${KETTLE_LOG_DIR}/${KETTLE_JOB}-${V_DATETIME}.log # KETTLE_LOG_FILE=${KETTLE_LOG_DIR}/${KETTLE_TRANS}-${V_DATETIME}.log mkdir -p ${KETTLE_LOG_DIR} echo "" >> ${KETTLE_LOG_FILE} echo "**********************************************************************************" >> ${KETTLE_LOG_FILE} echo "**** @Date : ${V_DATETIME}" >> ${KETTLE_LOG_FILE} echo "**** @Job : ${KETTLE_DIR}/${KETTLE_JOB}" >> ${KETTLE_LOG_FILE} # echo "**** @Trans: ${KETTLE_DIR}/${KETTLE_Trans}" >> ${KETTLE_LOG_FILE} echo "**********************************************************************************" >> ${KETTLE_LOG_FILE} echo "" >> ${KETTLE_LOG_FILE} # 调用job ${KETTLE_HOME}/kitchen.sh -rep=${KETTLE_REP} -user=${KETTLE_USER} -pass=${KETTLE_PASS} \ -dir=${KETTLE_DIR} -job=${KETTLE_JOB} -level=${KETTLE_LOG_LEVEL} -logfile=${KETTLE_LOG_FILE} # 调用trans #${KETTLE_HOME}/pan.sh -rep=${KETTLE_REP} -user=${KETTLE_USER} -pass=${KETTLE_PASS} \ #-dir=${KETTLE_DIR} -trans=${KETTLE_TRANS} -level=${KETTLE_LOG_LEVEL} -logfile=${KETTLE_LOG_FILE} # 判断是否出错 ERROR_NUM=$(grep -E -i "error|fail" ${KETTLE_LOG_FILE} | wc -l) if [ ${ERROR_NUM} -gt 0 ];then echo "执行出错,请检查 ${KETTLE_LOG_FILE}" exit 1 fi ``` ## carte服务工具 配置文件在`$KETTLE_HOME/pwd`目录下 * 配置文件 ```xml <!-- carte-config-master-8080.xml --> <slave_config> <slaveserver> <name>master1</name> <hostname>localhost</hostname> <port>8080</port> <master>Y</master> </slaveserver> </slave_config> <!-- carte-config-8081.xml --> <slave_config> <masters> <slaveserver> <name>master1</name> <hostname>0.0.0.0</hostname> <port>8080</port> <username>cluster</username> <password>cluster</password> <master>Y</master> </slaveserver> </masters> <report_to_masters>Y</report_to_masters> <slaveserver> <name>slave1-8081</name> <hostname>0.0.0.0</hostname> <port>8081</port> <username>cluster</username> <password>cluster</password> <master>N</master> </slaveserver> </slave_config> ``` * 用户配置 ``` Encr.bat -carte cluster 2023-02-27 15:23:11.198:INFO::main: Logging initialized @486ms to org.eclipse.jetty.util.log.StdErrLog OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q kettle.pwd配置文件 cluster: OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q ``` * carte服务启动 ``` #windows Carte.bat pwd/carte-config-master-8080.xml #linux carte.sh pwd/carte-config-master-8080.xml ``` * 调用执行job ```bash # 执行job curl "http://cluster:cluster@example.com:8080/kettle/executeJob/?rep=repo&user=admin&pass=admin&job=/job/demo-uuid4&level=basic&logfile=/app/data-integration/logs/demo-uuid4.log" # 执行转换 curl "http://cluster:cluster@example.com:8080/kettle/executeTrans/?rep=repo&user=admin&pass=admin&trans=/trans/demo-uuid4&level=basic" ``` ## 参考 https://blog.csdn.net/bx1215/article/details/119654134 https://zhuanlan.zhihu.com/p/401928324?utm_id=0
vleity
2026年3月13日 16:48
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码