前言
Kettle,也称为Pentaho Data Integration (PDI),是一款开源的数据集成工具。由于资料丰富,操作简便。它依然是主流的ETL(Extract, Transform, Load)解决方案之一。
kettle新版本下载极其繁琐,而且PDI官网没有社区版本的下载地址,sourceforge的下载连接也已经全部清空了....
编译环境
本机环境:
Macbook Pro M2 , macOS 15.0.1,Docker 24+
服务器环境:
Kunpeng 920,UOS Server V20, Docker 21+
准备工作
官网下载地址,需要注意的是官网下载的是企业版
Download - Try Pentaho Enterprise for Free | Pentaho
社区版下载地址
无...官网现在没有社区版的下载连接,有知道哪里下载的可以告知下
所以使用目前项目上使用的pdi-ce-9.2.0.0-290版本,并创建独立项目
mkdir kettle-aarch64 && cd kettle-aarch64
将kettle的压缩包解压到工程目录内,然后再项目的根目录创建Dockerfile
tar -xvf pdi-ce-9.2.0.0-290.tar ./data-integration
touch Dockerfile
构建镜像
Docker基础镜像为openjdk:8u201-jre-alpine3.9,建议使用alpine版本。可以需要自行调整
# [可选]镜像build阶段参数,可以自定义构建参数
ARG VERSION=1.0
# [必须]基础镜像,建议优先选用alpine-linux版本,体积较小,方便发布
FROM openjdk:8u201-jre-alpine3.9
# [必须]镜像维护人员, 填写开发/维护人员邮箱
LABEL author="shadow.li0327@gmail.com" \
version=$VERSION \
description="KETTLE国产化ARM64适配"
# [必须]切换时区,时钟一致
ENV TZ=Asia/Shanghai
# [可选]软件仓库加速
RUN sed -i 's!http://dl-cdn.alpinelinux.org/!https://mirrors.ustc.edu.cn/!g' /etc/apk/repositories
# debian/centos
#RUN apt update && apt install -y libwebkitgtk-6.0-4 vim
# alpine
# [可选]安装/配置/增加镜像内依赖/软件,比如增加字体支持,注意环境区分
RUN apk update && apk add webkit2gtk busybox-extras curl
# [必须]添加程序包
COPY ./data-integration /opt/data-integration
# [必须]添加修改的spoon.sh
COPY spoon.sh /opt/data-integration/spoon.sh
# [可选]添加测试脚本目录
#COPY ./job /opt/data-integration/jobs
# [必须]数据卷映射,日志/配置必须暴露给宿主机
VOLUME /opt/data-integration/logs
VOLUME /opt/data-integration/jobs
# [可选]工作目录,为了方便操作容器内对象或者指明软件路径
WORKDIR /opt/data-integration
Docker打包脚本
#!/usr/bin/env bash
# STEP1-准备阶段
## [可选]通过命令读取应用名称
APP_NAME=kettle
## [可选]通过命令读取应用版本
VERSION=pdi-ce-9.2.0.0-290-aarch64
## [必须]拼接完整应用名称,可以手动修改或者读取配置拼接
APP_FULL_NAME=${APP_NAME}:${VERSION}
## [可选]私服目标服务器
REGISTRY={IP:PORT}
echo "开始构建应用${APP_FULL_NAME}..."
# STEP2-开始打包
echo "开始构建镜像${APP_FULL_NAME}..."
## [必须]停止并删除本地容器
docker rm "$(docker ps -a -f name=${APP_NAME} -q)"
## [必须]删除本地对应版本镜像
docker rmi "$(docker image ls -f reference=${APP_FULL_NAME} -q)" -f
## [必须]构建镜像,需要注意参数platform,可以指定x86架构或者arm架构
docker build -t "${APP_FULL_NAME}" . --platform=linux/arm64
## [可选]导出docker镜像压缩包
#docker save -o "${APP_NAME}.tar" "${APP_FULL_NAME}"
## [可选]镜像私服Tag标记
#docker tag ${APP_FULL_NAME} ${REGISTRY}/${APP_FULL_NAME}
## [可选]推送私服仓库
#ocker push ${REGISTRY}/${APP_FULL_NAME}
# STEP3-本地测试
## [可选]启动容器验证
#docker run -p 8080:8080 --name="${APP_NAME}" "${APP_FULL_NAME}"
## [可选]停止并删除本地容器
#docker rm "$(docker ps -a -f name=${APP_NAME} -q)"
## [可选]删除本地镜像,节省磁盘空间
#docker rmi "$(docker image ls -f reference=${APP_FULL_NAME} -q)" -f
开始打包
sh build.sh && docker container ls
正常打包完成可以看到镜像已经有了
进入容器后测试kitchen.sh和pan.sh均正常
执行测试脚本也OK
FAQ
libwebkitgtk-1.0-0 xxxx
错误信息:
WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable
Consider installing the package with apt-get or yum.
e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
解决办法:
- 缺失组件, 安装对应版本的即可
- 修改
spoon.sh中的判断条件,改为安装版本
或者也可以改成跳过验证, 当然需要安装了webkitgkt
启动报错,插件加载失败
错误信息: Unexpected error registering jar plugin file xxxxx
解决方法
一般为加载xxxx-ui包导致,删除对应的xxx-ui包即可,服务器不需要ui环境。
启动正常,执行任务慢,提示超时
错误信息: The Kettle Karaf Lifecycle Listener failed to execute properly after waiting for 100 seconds.
解决办法: 注释 kettle目录下的 /classes/kettle-lifecycle-listeners.xml 与 /classes/kettle-registry-extensions.xml 配置文件中PDI-OSGI-Bridge的相关配置,不使用即可。
没有细看源码,应该是桌面端环境用来查看执行情况的监听,直接注释即可。