易君召
易君召
发布于 2026-06-23 / 1 阅读
0
0

Linux安装部署Apache Flink 2.2.1教程与常见问题排查

考虑基于ARM芯片的Debian 11上原生安装Apache Flink,不用docker镜像安装。查了一下ARM64(aarch64)架构的 Debian 11(Bullseye)完全可以正常安装和运行 Apache Flink 2.2.1,32 位 ARM 架构则不再支持。

一、核心兼容性说明

  1. Flink 从 1.13 版本开始官方原生适配 ARM64 架构,2.x 系列延续并完善了该支持。Flink 核心基于 JVM 字节码实现,本身跨平台;内置的 RocksDB 状态后端、Netty 网络栈等依赖原生库的组件,官方也已提供 ARM64 版本的预编译原生库,同一个官方二进制发行包可直接在 x86_64 和 ARM64 平台解压运行,无需单独下载 ARM 专属安装包。

    官方 Docker 镜像也同步提供 arm64v8 架构标签,进一步验证了架构兼容性。

Debian 11 ARM64 满足基础依赖

  1. Debian 11 对 ARM64 架构有完整的官方支持,软件源中原生提供 OpenJDK 11,也可通过 backports 源安装 OpenJDK 17,完全匹配 Flink 2.2.1 的运行要求:

  • Flink 2.x 官方推荐运行版本为 Java 17,兼容 Java 11

  • 已不再支持 Java 8,请勿使用低版本 JDK

二、简要安装步骤

1. 安装兼容的 JDK

# 更新源
apt update

# 方案1:安装Debian 11默认自带的OpenJDK 11(兼容可用)
apt install -y openjdk-11-jdk

# 方案2:安装推荐的OpenJDK 17(需启用backports源)
echo "deb http://deb.debian.org/debian bullseye-backports main" >> /etc/apt/sources.list
apt update
apt install -y openjdk-17-jdk

安装后执行 java -version 确认版本正常。

# 下载官方二进制包(Scala 2.12版本,通用)
wget https://archive.apache.org/dist/flink/flink-2.2.1/flink-2.2.1-bin-scala_2.12.tgz

# 解压到指定目录
tar -zxf flink-2.2.1-bin-scala_2.12.tgz -C /opt/
mv /opt/flink-2.2.1 /opt/flink

3. 配置环境变量并验证

# 配置环境变量
echo "export FLINK_HOME=/tzdata/flink-2.2.1" >> /etc/profile
echo "export PATH=\$PATH:\$FLINK_HOME/bin" >> /etc/profile
source /etc/profile

# 启动本地单机集群验证
/opt/flink/bin/start-cluster.sh

# 查看进程,出现JobManager和TaskManager即为成功
jps

启动后可通过 http://服务器IP:8081 访问 Flink Web UI。

三、常见错误处理

1. 启动时无法找到JAVA_HOME

sudo ./bin/start-cluster.sh
Please specify JAVA_HOME. Either in Flink config ./conf/config.yaml or as system-wide JAVA_HOME.

解决方案

编辑 /opt/flink/conf/config.yaml,直接写成一行,不要拆成YAML的嵌套格式 envjavahome 的三层嵌套结构,启动脚本无法识别这种嵌套格式,会继续提示找不到 JAVA_HOME。

yaml

env.java.home: "/tzdata/jdk-17.0.16"

按照如上第1个问题的处理方式解决后,发现又有新的报错

sudo ./bin/start-cluster.sh
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
Starting cluster.
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
[ERROR] The execution result is empty.
[ERROR] Could not get JVM parameters and dynamic configurations properly.
[ERROR] Raw output from BashJavaUtils:
/tzdata/flink-2.2.1/bin/bash-java-utils.sh:行114: java:未找到命令
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
[ERROR] The execution result is empty.
[ERROR] Could not get JVM parameters and dynamic configurations properly.
[ERROR] Raw output from BashJavaUtils:
/tzdata/flink-2.2.1/bin/bash-java-utils.sh:行114: java:未找到命令

报错原因

这个报错的根源是 Flink 的 Shell 启动脚本找不到 java 命令,后续的 “>17 语法错误” 是连锁反应 —— 脚本尝试获取 Java 版本号失败,拿到空值后做数值比较就触发了语法错误。

这里需要纠正一个之前的细节:config.yaml 里的 env.java.homeFlink Java 进程运行时读取的配置,但启动初期的 bash 脚本并不会解析 yaml 文件来找 java 命令,所以这个配置管不到启动脚本的 Java 定位逻辑。

解决方案

Flink 的 conf 目录下有专门的环境变量配置文件 flink-env.sh,启动脚本会主动加载这个文件里的环境变量,完全不受 sudo 环境重置影响。如果没有这个文件则创建即可

# 编辑文件
vi flink-env.sh

增加如下内容
export JAVA_HOME=/tzdata/jdk-17.0.16
export PATH=$JAVA_HOME/bin:$PATH

保存退出即可。

补充:config.yaml 里的 env.java.home 建议保留,两个地方都配置,分别覆盖启动脚本阶段和进程运行阶段。

重新启动验证

回到 Flink 根目录,重新执行启动命令:

cd /tzdata/flink-2.2.1
sudo ./bin/start-cluster.sh

启动成功后,执行 sudo jps 能看到以下两个进程即正常:

  • StandaloneSessionClusterEntrypoint(JobManager)

  • TaskManagerRunner(TaskManager)

启动后默认可通过 http://服务器IP:8081 访问 Flink Web UI。

Flink 2.x 对启动脚本做了重构,官方默认移除了自动加载 flink-env.sh 的逻辑,所以你创建的文件根本不会被脚本读取,环境变量自然不生效。脚本在执行到 Java 版本校验时,始终找不到 java 命令,拿到空值后触发了 > 17 的数值比较语法错误,属于连锁报错。

解决方案

直接在 Flink 核心脚本最开头注入 JDK 路径,保证脚本执行第一时间就能找到 Java。

vim /tzdata/flink-2.2.1/bin/config.sh

在文件最顶部第一行添加两行配置:

export JAVA_HOME=/tzdata/jdk-17.0.16
export PATH=$JAVA_HOME/bin:$PATH

保存退出后重新启动即可,该方法 100% 生效,仅影响当前 Flink 实例。


原文链接 https://www.yijunzhao.cn/archives/install-apache-flink-linux

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/


评论