kettle适配Kunpeng920的arm64环境

1,238 阅读2分钟

前言

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 

正常打包完成可以看到镜像已经有了

image-20241120150752567.png

进入容器后测试kitchen.shpan.sh均正常

image-20241120145537053.png

执行测试脚本也OK

image-20241120150722773.png

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'

解决办法:

  1. 缺失组件, 安装对应版本的即可
  2. 修改spoon.sh 中的判断条件,改为安装版本

image-20241113000029129.png

或者也可以改成跳过验证, 当然需要安装了webkitgkt

image-20241113131056158.png

启动报错,插件加载失败

错误信息: Unexpected error registering jar plugin file xxxxx

image-20241112234019910.png

解决方法

一般为加载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的相关配置,不使用即可。

没有细看源码,应该是桌面端环境用来查看执行情况的监听,直接注释即可。