在M1 Mac 上安装部署PDI(kettle)

Kettle并没有原生支持M1,所以本文大致思路是使用Rosetta转译运行,无需借助任何虚拟机。在此特别感谢董老师的帮助~

安装步骤

  1. 配置Rosetta Terminal(强制在Intel模式下运行shell)

    参考 https://cutecoder.org/software/run-command-line-apple-silicon/

​ 打开Terminal终端的 偏好设置 → 描述文件

​ 从左侧选择一个你喜欢的shell → 下方省略号 → 复制描述文件

​ 点击新的描述文件 给它起一个好听的名字 就像“Rosetta Shell”

​ 右侧点击 窗口 再给它起一个好听的标题 就像“Terminal (Intel)”

​ 点击 shell 运行命令处写入以下 并取消勾选 在shell中运行

env /usr/bin/arch -x86_64 ``/bin/zsh --login

​ (可选) 将该shell设置为默认

  1. 安装Homebrew

    在arm64架构中 我们需要做两种Homebrew的安装

    /usr/local/homebrew —— 服务于传统intel安装路径

    /opt/homebrew —— 服务于已原生支持Apple Silicon的包

    打开刚配置好的Rosetta Shell

    输入以下几行命令:

    1
    2
    3
    4
    5
    cd /usr/local
    sudo mkdir homebrew
    sudo chgrp everyone homebrew
    sudo chmod g+rwx homebrew
    curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

    在 ~/.zshrc 中加入如下行,来自动选择运行何种homebrew的安装模式:

    1
    2
    3
    4
    5
    6
    if [ "$(sysctl -n sysctl.proc_translated)" = "1" ]; then
    local brew_path="/usr/local/homebrew/bin"
    else
    local brew_path="/opt/homebrew/bin"
    fi
    export PATH="${brew_path}:${PATH}"

    退出后执行:source ~/.zshrc

  2. 配置 java环境(JDK)

    这里需要对应Kettle和JDK 版本的对应关系 非常严格。具体可以自己搜索。

    ==我这里使用的kettle9.1 + jdk8==

    你可能原来有其他版本的jdk,jdk的多版本管理参考:https://blog.csdn.net/qq_39992641/article/details/117048076

    安装openjdk的jdk8(或者直接去https://www.azul.com/core-post-download/?endpoint=zulu&uuid=e9bc2ead-23a6-45b2-98ec-4019a5ff6642,下载dmg文件,这样是最简单的,一定要用JDK1.8.0_202(百度网盘链接:https://pan.baidu.com/s/1wwnoeYwrinQbialUcUYlYA 提取码: wyey)):

    1
    2
    3
    4
    5
    brew tap AdoptOpenJDK/openjdk

    brew install --cask adoptopenjdk8
    # 或者:
    brew install openjdk@8

    多版本控制:

    vim ~/.bashrc

    1
    2
    3
    4
    5
    6
    7
    8
    export JAVA_8_HOME="/usr/local/homebrew/opt/openjdk@8/bin"
    alias java8='export JAVA_HOME=$JAVA_8_HOME'

    export JAVA_17_HOME="/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home"
    alias java17='export JAVA_HOME=$JAVA_17_HOME'

    # 默认使用java17
    export JAVA_HOME=$JAVA_17_HOME

    退出后:source ~/.bashrc

    之后想要切换为JDK8只需要输入命令:java8即可转化。==使用Kettle一定要在JDK8环境下==

  3. 下载Kettle

    官网好像有问题,下载不了了

    这里找了一个百度网盘链接:https://pan.baidu.com/s/1ltrZjQDRR2hSrnQO3Qfl_Q

    提取码:uk6c

  4. 启动Kettle

    进入/data-integration目录

    输入:sh spoon.sh即可

    如果出现界面不闪退基本成功,如果打开失败请看后续内容。

问题

第一种

我输入sh spoon.sh之后打开可以看到界面了,但是会闪退,部分报错为:

1
2
3
4
5
java.lang.NullPointerException
at org.eclipse.swt.widgets.Control.internal_new_GC(Unknown Source)
at org.eclipse.swt.graphics.GC.<init>(Unknown Source)
at org.eclipse.swt.graphics.GC.<init>(Unknown Source)
...

解决办法:

下载最新的eclipse.swt包,替换kettle中的原文件即可 下载地址

替换路径:data-integration → libswt → osx64

把该位置原本的swt.jar文件删掉,下载的新文件改名为swt.jar即可。

第二种

出现类似报错:

1
spoon Unrecognized VM option 'MaxPermSize=256m'

可以打开spoon.bat文件,找到VM option配置,直接删掉'MaxPermSize=256m'