跳到主要内容

Flink集成实践

部署前置常量区(所有章节统一引用,不要硬编码)

类别常量
版本矩阵Flinkflink-1.20.5-bin-scala_2.12
Paimon2.0.0(paimon-flink-1.20、paimon-flink-action、paimon-hive-connector-3.1)
Flink MySQL CDCflink-sql-connector-mysql-cdc-3.1.1(groupId=org.apache.flink,fat jar 带 sql- 前缀)
MySQL JDBCmysql-connector-j-8.0.33
StreamParkapache-streampark_2.12-2.2.0
主机 & 端口集群节点master1master2node1node2
Ambari Server / MySQLmaster1(MySQL root/123456,端口 3306)
Hive Metastorethrift://master1:9083
ZooKeeper Quorummaster1:2181,master2:2181,node1:2181
Flink Web UIhttp://master1:8082
StreamPark(独立)http://master1:10001(Ambari 自带 10000)
本地目录规则Flink 实际解压目录/home/bigdata/module/flink-1.20.5(拷 Jar/改 conf/rsync 统一走这里,不依赖软链)
Flink 软链($FLINK_HOME)/home/bigdata/module/flink-1.20flink-1.20.5(仅环境变量和命令行引用)
Flink 干净配置目录(终态)$FLINK_HOME/../flink-1.20.5/conf.clean(扁平 config.yaml,每次启动重建,避免旧缓存)
临时目录(1777 sticky bit,JaasModule 写 jaas-*.conf 必用)/tmp/flink-bigdata/tmp(io.tmp.dirs / java.io.tmpdir)
/tmp/flink-bigdata/upload(web.upload.dir)
/tmp/flink-bigdata/web-tmp(web.tmpdir)
运维脚本目录/home/bigdata/shell(所有自定义脚本统一放这里)
HDFS 路径Flink Checkpoint / Savepoint / HAhdfs:///user/flink/checkpointshdfs:///user/flink/savepointshdfs:///user/flink/ha
Paimon Warehouse(复用 HMS)hdfs:///user/hive/warehouse/paimon
硬编码规范Flink CLI -D 参数连写无空格 -Dkey=value,JCommander 会丢带空格的 -D key=value
/etc/profile.d/*.sh必须 sudo tee << 'EOF' > /dev/nullsudo cat > 的重定向不继承 sudo)
HDFS /user 下 mkdir/chown必须 sudo -u hdfs hdfs dfs .../user 属主 hdfs:hdfs,普通用户不能写)
HADOOP_CLASSPATH瘦化:只 $(hadoop classpath):/etc/hive/conf,严禁 hive-client/lib/*(HDP Hive 2.3 带 Jackson 2.6 会冲掉 Flink 1.20 要的 Jackson 2.15+)
Flink config.yaml 格式全扁平 key-valuea.b.c: v),严禁 nested map 写法(a:\n b:\n c: v),否则命令行 -D 扁平 key 会触发 ClassCastException

目录索引

0. 先说结论(照抄顺序,别跳步)
1. 下载所有包(Flink 1.20.5 / Paimon 2.0 / CDC 3.1.1 / JDBC / StreamPark)
2. 解压 + 软链 + 拷 Jar + 同步到 4 节点
3. 配置(3.0 建 tmp 目录 → 3.1 HDP conf 软链 → 3.2 三套扁平 config.yaml → 3.3 setenv.sh 瘦 classpath → 3.4 HDFS 授权 → 3.5 rsync)
4. 环境变量(/etc/profile.d/flink120.sh,瘦 HADOOP_CLASSPATH,PATH 去 HDP 老 flink)
5. 启动 Flink on YARN Session
5.0 终极 0→1 命令链(推荐,一键串完所有前置检查)
5.1 三套启动命令 C / A / B(与 3.2 配置严格对齐)
5.2 Flink Web UI 检查
5.3 Flink SQL Client 登录
6. Paimon Quick Start(6 步:SET → Catalog → 建表 → datagen 写流 → 批读 → 退出)
7. StreamPark 2.2.x(7.0 独立安装 → 7.1 登录 → 7.2 Flink Home → 7.3 Cluster → 7.4 资源 → 7.5 新建 SQL 作业)
8. 常见坑速查(12 条,按实际踩坑顺序:现象 / 根因 / 修法)

0. 先说结论(照这个顺序一步步复制粘贴,别跳步)

第 1 步:master1 上下载 Flink 1.20 + Paimon 2.0 相关包        → 本文档 1.x
第 2 步:解压 + 软链 + 同步到 master2/node1/node2 → 本文档 2.x
第 3 步:Flink 配置(加载 HDP Hadoop/Hive 配置、SQL Gateway 端口)→ 本文档 3.x
第 4 步:配置环境变量 / etc/profile(所有节点) → 本文档 4.x
第 5 步:启动 Flink on YARN Session,测试 sql-client → 本文档 5.x(推荐直接跑 5.0 终极 0→1 链)
第 6 步:创建 Paimon Catalog,跑 Quick-Start Hello World → 本文档 6.x
第 7 步:StreamPark 里配置 Flink Home + 提交 Flink SQL 作业 → 本文档 7.x

⚠️ 全程不要覆盖 HDP 3.3.2 自带的 /usr/hdp/current/flink,HDP 自己的 Flink 1.15 还留给 Ambari 管理的 Flink Service 用,我们自己的 Flink 1.20 就装在 /home/bigdata/module/flink-1.20 下,互不干扰。


1. 下载所有需要的包(master1 上执行,下载到 /home/bigdata/software

所有下载链接都是 Apache 官方,可直接复制 wget。如果集群没外网,先在你电脑上下载好再用 WinSCP/rz 上传到同一个目录,照样往下走。

1.1 先建下载目录

mkdir -p /home/bigdata/software
cd /home/bigdata/software

⚠️ 注意:Flink 1.20.0 已从清华 TUNA 下架(报 403 Forbidden)。统一用 1.20.5

# ① 首选:华为云镜像(国内速度快)
wget -c https://mirrors.huaweicloud.com/apache/flink/flink-1.20.5/flink-1.20.5-bin-scala_2.12.tgz -O flink-1.20.5-bin-scala_2.12.tgz

# ② 兜底 1:阿里云镜像(华为云挂了就跑这条)
# wget -c https://mirrors.aliyun.com/apache/flink/flink-1.20.5/flink-1.20.5-bin-scala_2.12.tgz -O flink-1.20.5-bin-scala_2.12.tgz

# ③ 兜底 2:Apache 官方归档(国外源,慢但必能下到)
# wget -c https://archive.apache.org/dist/flink/flink-1.20.5/flink-1.20.5-bin-scala_2.12.tgz -O flink-1.20.5-bin-scala_2.12.tgz

1.3 下载 Paimon 2.0(stable)的 4 个 Jar

⚠️ 下面两个 Jar 名容易写错,照抄:

  • Hive 3.1 Bundle:artifactId 是 paimon-hive-connector-3.1(少写 connector- 会 404)
  • Flink CDC MySQL:Flink CDC 3.0+ 已捐给 Apache,groupId=org.apache.flink,SQL Client 必须带 sql- 前缀的 fat jar(瘦 jar 会 ClassNotFound)
# ① Flink 1.20 用的 Paimon Bundled Jar
wget -c https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-1.20/2.0.0/paimon-flink-1.20-2.0.0.jar -O paimon-flink-1.20-2.0.0.jar

# ② Flink Action Jar(compact / create_tag / remove_orphan_files 系统过程)
wget -c https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-action/2.0.0/paimon-flink-action-2.0.0.jar -O paimon-flink-action-2.0.0.jar

# ③ Hive 3.1 Connector Jar(复用 HDP HMS,artifactId=paimon-hive-connector-3.1)
wget -c https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-hive-connector-3.1/2.0.0/paimon-hive-connector-3.1-2.0.0.jar -O paimon-hive-connector-3.1-2.0.0.jar

# ④ Flink CDC MySQL Connector(fat jar,groupId=org.apache.flink)
wget -c https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-mysql-cdc/3.1.1/flink-sql-connector-mysql-cdc-3.1.1.jar -O flink-sql-connector-mysql-cdc-3.1.1.jar

1.4 下载 MySQL JDBC Driver(Hive / CDC / Paimon HMS 统一复用)

wget -c https://repo.maven.apache.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar -O mysql-connector-j-8.0.33.jar

1.5 校验 6 个文件是否都下齐(大小 0 的重下)

ls -lh /home/bigdata/software | grep -E 'flink-1.20|paimon|mysql-connector|flink-connector-mysql'

期望看到 6 个文件:

  • flink-1.20.5-bin-scala_2.12.tgz(~350MB)
  • paimon-flink-1.20-2.0.0.jar
  • paimon-flink-action-2.0.0.jar
  • paimon-hive-connector-3.1-2.0.0.jar
  • flink-sql-connector-mysql-cdc-3.1.1.jar
  • mysql-connector-j-8.0.33.jar

⚠️ 软链 flink-1.20 -> flink-1.20.5 断了会导致 Flink 读到默认 conf(报 64MB/128MB 错),必须按下面 ls 校验输出。

mkdir -p /home/bigdata/module
cd /home/bigdata/software
tar -zxf flink-1.20.5-bin-scala_2.12.tgz -C /home/bigdata/module/

# 强制 overwrite 软链
ln -sfn /home/bigdata/module/flink-1.20.5 /home/bigdata/module/flink-1.20

# ====== 必须跟下面期望完全一致 ======
ls -ld /home/bigdata/module/flink-1.20*
# 期望:
# lrwxrwxrwx. 1 bigdata hadoop 38 ... flink-1.20 -> /home/bigdata/module/flink-1.20.5
# drwxr-xr-x. 9 bigdata hadoop 149 ... flink-1.20.5

# 软链穿透检查
ls /home/bigdata/module/flink-1.20/conf/config.yaml
# 期望:能打印出文件路径,不是 No such file or directory(Flink 1.20 自带 config.yaml,不是 flink-conf.yaml)

直接用实际解压目录 flink-1.20.5,不依赖软链是否创建成功。

cd /home/bigdata/software
cp paimon-flink-1.20-2.0.0.jar /home/bigdata/module/flink-1.20.5/lib/
cp paimon-flink-action-2.0.0.jar /home/bigdata/module/flink-1.20.5/lib/
cp paimon-hive-connector-3.1-2.0.0.jar /home/bigdata/module/flink-1.20.5/lib/
cp flink-sql-connector-mysql-cdc-3.1.1.jar /home/bigdata/module/flink-1.20.5/lib/
cp mysql-connector-j-8.0.33.jar /home/bigdata/module/flink-1.20.5/lib/

# 确认 5 个都在
ls -lh /home/bigdata/module/flink-1.20.5/lib | grep -E 'paimon|mysql|cdc'

前提:4 台 bigdata 用户 SSH 免密已配好。

for host in master2 node1 node2; do
echo "===== sync to $host ====="
ssh $host "mkdir -p /home/bigdata/module"
rsync -avz --delete /home/bigdata/module/flink-1.20.5/ $host:/home/bigdata/module/flink-1.20.5/
ssh $host "ln -sfn /home/bigdata/module/flink-1.20.5 /home/bigdata/module/flink-1.20"
done

# 4 台 Jar 数量校验
for host in master1 master2 node1 node2; do
echo "===== $host ====="
ssh $host "ls /home/bigdata/module/flink-1.20.5/lib | grep -E 'paimon|mysql|cdc' | wc -l"
done

4 台都显示 5 就 OK。


所有文件操作统一走实际解压目录 /home/bigdata/module/flink-1.20.5/;软链仅给 $FLINK_HOME 和命令行调用。 临时目录必须全放 /tmp/flink-bigdata/*(1777 sticky bit),严禁放在 /home/bigdata/*(YARN Container 内部映射用户写家目录会 AccessDenied)。

3.0 先建 4 台机器的临时目录(/tmp 下 sticky 1777,JaasModule 必用)

⚠️ 残余目录属主可能不是 bigdata,导致后续 chown 不允许的操作,所以先 sudo rm -rf 清干净,再 sudo -u bigdata 重新建。

for host in master1 master2 node1 node2; do
echo "===== $host ===== build /tmp/flink-bigdata (1777 sticky)"
ssh $host "
sudo rm -rf /tmp/flink-bigdata
sudo -u bigdata mkdir -p /tmp/flink-bigdata/tmp /tmp/flink-bigdata/upload /tmp/flink-bigdata/web-tmp
sudo chmod -R 1777 /tmp/flink-bigdata
ls -ld /tmp/flink-bigdata /tmp/flink-bigdata/tmp /tmp/flink-bigdata/upload /tmp/flink-bigdata/web-tmp
"
done

3.1 加载 HDP 自带 Hadoop/Hive 配置软链(master1 上做,后面 rsync 带过去)

cd /home/bigdata/module/flink-1.20.5/conf
ln -sfn /etc/hadoop/conf/core-site.xml core-site.xml
ln -sfn /etc/hadoop/conf/hdfs-site.xml hdfs-site.xml
ln -sfn /etc/hadoop/conf/yarn-site.xml yarn-site.xml
ln -sfn /etc/hadoop/conf/mapred-site.xml mapred-site.xml
ln -sfn /etc/hive/conf/hive-site.xml hive-site.xml

ls -lh /home/bigdata/module/flink-1.20.5/conf/*.xml

应该能看到 5 个软链。

3.2 写三套 config.yaml(扁平 key-value,终态 conf.clean 从这里挑一套)

⚠️ 三套配置三选一,别混着用,按 YARN Scheduler Avail 值选:

  • 配置 C(现在就用这个):每台 Avail Mem ≈ 3GB 且 Avail vCores = 1(4 台都是 1 vCore 可用,极限压最小)
  • 配置 A(升级 2~3 vCores 后切):每台 Avail Mem ≈ 3GB 且 Avail vCores ≥ 2
  • 配置 B(扩容 ≥8G 4 核后切):每台 Avail Mem ≥ 8GB / Avail vCores ≥ 4

⚠️ 格式硬约束:config.yaml 必须全扁平 key-valuejobmanager.memory.process.size: 512 mb,冒号后空格 + 数字 + 空格 + 单位),严禁 nested map;否则命令行 -Dflat.key=v 会触发 YamlParserUtils.convertAndDumpYamlFromFlatMap ClassCastException


配置 C — 极限丐版(单节点 3GB / 仅 1 vCore 可用,跑通优先)

cat > /home/bigdata/software/config_C.yaml << 'EOF'
# ============================================================
# HiDataPlus HDP 3.3.2 + Paimon 2.0 — 极限丐版(扁平 key-value)
# 适用:每台 NM ~3GB / Avail vCores = 1
# ============================================================
jobmanager.rpc.address: master1
jobmanager.rpc.port: 6123
jobmanager.memory.process.size: 512 mb
jobmanager.memory.jvm-overhead.min: 32 mb
jobmanager.memory.off-heap.size: 0 mb
taskmanager.memory.process.size: 1024 mb
taskmanager.memory.jvm-overhead.min: 64 mb
taskmanager.memory.framework.off-heap.size: 64 mb
taskmanager.memory.network.min: 64 mb
taskmanager.numberOfTaskSlots: 1
parallelism.default: 2
rest.port: 8082
rest.address: master1
io.tmp.dirs: /tmp/flink-bigdata/tmp
env.hadoop.conf.dir: /etc/hadoop/conf
env.yarn.conf.dir: /etc/hadoop/conf
env.hive.conf.dir: /etc/hive/conf
state.backend: filesystem
state.checkpoints.dir: hdfs:///user/flink/checkpoints
state.savepoints.dir: hdfs:///user/flink/savepoints
state.checkpoints.num-retained: 3
yarn.application-attempts: 5
yarn.application-master.port: 0
web.submit.enable: true
web.upload.dir: /tmp/flink-bigdata/upload
web.tmpdir: /tmp/flink-bigdata/web-tmp
classloader.check-leaked-classloader: false
env.java.opts.all: -Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8
execution.checkpointing.interval: 10 min
execution.checkpointing.mode: EXACTLY_ONCE
execution.checkpointing.timeout: 20 min
execution.checkpointing.tolerable-failed-checkpoints: 10
taskmanager.memory.managed.fraction: 0.2
taskmanager.memory.network.fraction: 0.08
taskmanager.memory.jvm-overhead.fraction: 0.1
pipeline.operator-chaining: true
pipeline.name: paimon-hdp332-minimal
EOF

配置 A — 小资源版(单节点 3GB / 2~3 vCores 可用)

cat > /home/bigdata/software/config_A.yaml << 'EOF'
# ============================================================
# HiDataPlus HDP 3.3.2 + Paimon 2.0 — 小资源版(扁平 key-value)
# 适用:每台 NM ~3GB / Avail vCores = 2~3
# ============================================================
jobmanager.rpc.address: master1
jobmanager.rpc.port: 6123
jobmanager.memory.process.size: 1024 mb
jobmanager.memory.jvm-overhead.min: 64 mb
taskmanager.memory.process.size: 2048 mb
taskmanager.memory.jvm-overhead.min: 128 mb
taskmanager.memory.framework.off-heap.size: 128 mb
taskmanager.memory.network.min: 128 mb
taskmanager.numberOfTaskSlots: 2
parallelism.default: 4
rest.port: 8082
rest.address: master1
io.tmp.dirs: /tmp/flink-bigdata/tmp
env.hadoop.conf.dir: /etc/hadoop/conf
env.yarn.conf.dir: /etc/hadoop/conf
env.hive.conf.dir: /etc/hive/conf
state.backend: filesystem
state.checkpoints.dir: hdfs:///user/flink/checkpoints
state.savepoints.dir: hdfs:///user/flink/savepoints
state.checkpoints.num-retained: 5
high-availability.type: zookeeper
high-availability.zookeeper.quorum: master1:2181,master2:2181,node1:2181
high-availability.storageDir: hdfs:///user/flink/ha/
high-availability.zookeeper.path.root: /flink-1.20
yarn.application-attempts: 10
yarn.application-master.port: 0
web.submit.enable: true
web.upload.dir: /tmp/flink-bigdata/upload
web.tmpdir: /tmp/flink-bigdata/web-tmp
classloader.check-leaked-classloader: false
env.java.opts.all: -Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8
execution.checkpointing.interval: 5 min
execution.checkpointing.mode: EXACTLY_ONCE
execution.checkpointing.timeout: 15 min
execution.checkpointing.tolerable-failed-checkpoints: 5
taskmanager.memory.managed.fraction: 0.3
pipeline.operator-chaining: true
pipeline.name: paimon-hdp332-small
EOF

配置 B — 生产版(单节点 ≥8GB / ≥4 vCores,以后扩容切)

cat > /home/bigdata/software/config_B.yaml << 'EOF'
# ============================================================
# HiDataPlus HDP 3.3.2 + Paimon 2.0 — 生产版(扁平 key-value)
# 适用:每台 NM ≥8GB / Avail vCores ≥ 4
# ============================================================
jobmanager.rpc.address: master1
jobmanager.rpc.port: 6123
jobmanager.memory.process.size: 2048 mb
taskmanager.memory.process.size: 4096 mb
taskmanager.numberOfTaskSlots: 4
parallelism.default: 4
rest.port: 8082
rest.address: master1
io.tmp.dirs: /tmp/flink-bigdata/tmp
env.hadoop.conf.dir: /etc/hadoop/conf
env.yarn.conf.dir: /etc/hadoop/conf
env.hive.conf.dir: /etc/hive/conf
state.backend: filesystem
state.checkpoints.dir: hdfs:///user/flink/checkpoints
state.savepoints.dir: hdfs:///user/flink/savepoints
state.checkpoints.num-retained: 10
high-availability.type: zookeeper
high-availability.zookeeper.quorum: master1:2181,master2:2181,node1:2181
high-availability.storageDir: hdfs:///user/flink/ha/
high-availability.zookeeper.path.root: /flink-1.20
yarn.application-attempts: 10
yarn.application-master.port: 0
web.submit.enable: true
web.upload.dir: /tmp/flink-bigdata/upload
web.tmpdir: /tmp/flink-bigdata/web-tmp
classloader.check-leaked-classloader: false
env.java.opts.all: -Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8
execution.checkpointing.interval: 3 min
execution.checkpointing.mode: EXACTLY_ONCE
execution.checkpointing.timeout: 10 min
execution.checkpointing.tolerable-failed-checkpoints: 3
pipeline.operator-chaining: true
pipeline.name: paimon-hdp332-default
EOF

说明:HDP 自带 ZooKeeper 端口 2181,三台 master1/master2/node1。

3.3 写 YARN 提交用的 setenv.sh(瘦 HADOOP_CLASSPATH,禁塞 hive-client/lib/*)

cat > /home/bigdata/module/flink-1.20.5/bin/setenv.sh << 'EOF'
#!/bin/bash
# HiDataPlus HDP 3.3.2 专用:瘦 HADOOP_CLASSPATH,只 hadoop classpath + /etc/hive/conf
# 严禁 find /usr/hdp/current/hive-client/lib -name '*.jar' — 会把 HDP Hive 2.3 的 Jackson 2.6 带进来冲掉 Flink 1.20 要的 Jackson 2.15+

export HADOOP_HOME=/usr/hdp/current/hadoop-client
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export HIVE_HOME=/usr/hdp/current/hive-client
export HIVE_CONF_DIR=/etc/hive/conf

export HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$HIVE_CONF_DIR

export FLINK_ENV_JAVA_OPTS="-Dhdp.version.current=${HDP_VERSION:-3.3.2.0-013} -Dfile.encoding=UTF-8"

export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-1.8.0}
export JVM_ARGS="-Xms256m -Xmx512m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75"
EOF
chmod +x /home/bigdata/module/flink-1.20.5/bin/setenv.sh

3.4 写好 HDFS 上的目录 + 授权(必须 sudo -u hdfs,/user 属主 hdfs:hdfs)

sudo -u hdfs hdfs dfs -mkdir -p /user/flink/checkpoints
sudo -u hdfs hdfs dfs -mkdir -p /user/flink/savepoints
sudo -u hdfs hdfs dfs -mkdir -p /user/flink/ha
sudo -u hdfs hdfs dfs -mkdir -p /user/hive/warehouse/paimon
sudo -u hdfs hdfs dfs -mkdir -p /user/bigdata
sudo -u hdfs hdfs dfs -chown -R bigdata:hadoop /user/flink /user/hive/warehouse/paimon /user/bigdata
sudo -u hdfs hdfs dfs -chmod -R 775 /user/flink /user/hive/warehouse/paimon /user/bigdata

3.5 配置同步到 master2/node1/node2(--delete 强制覆盖)

for host in master2 node1 node2; do
echo "===== sync conf / setenv to $host ====="
rsync -avz --delete /home/bigdata/module/flink-1.20.5/conf/ $host:/home/bigdata/module/flink-1.20.5/conf/
rsync -avz --delete /home/bigdata/module/flink-1.20.5/bin/ $host:/home/bigdata/module/flink-1.20.5/bin/
rsync -avz /home/bigdata/software/config_{A,B,C}.yaml $host:/home/bigdata/software/
done

# 4 台 setenv.sh 校验(瘦 classpath 没 hive-client/lib/*)
for host in master1 master2 node1 node2; do
echo "===== $host ====="
ssh $host "grep HADOOP_CLASSPATH= /home/bigdata/module/flink-1.20.5/bin/setenv.sh"
done

⚠️ /etc/profile.d/ root 属主,用 sudo tee;别用 sudo cat >,重定向 > 不继承 sudo。

# 1)master1 写
sudo tee /etc/profile.d/flink120.sh << 'EOF' > /dev/null
# Flink 1.20 + HiDataPlus HDP 3.3.2
export FLINK_HOME=/home/bigdata/module/flink-1.20
export FLINK_CONF_DIR=$FLINK_HOME/conf
# PATH 顺序:我们的 Flink 1.20 放最前面,避免 HDP 自带 /usr/hdp/*/flink/bin 把 1.15 顶上来
export PATH=$FLINK_HOME/bin:$PATH

export HADOOP_HOME=/usr/hdp/current/hadoop-client
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export HIVE_HOME=/usr/hdp/current/hive-client
export HIVE_CONF_DIR=/etc/hive/conf
# 瘦化:只 hadoop classpath + /etc/hive/conf;禁塞 hive-client/lib/*
export HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$HIVE_CONF_DIR
EOF
sudo chmod 644 /etc/profile.d/flink120.sh

# 2)分发到 master2 / node1 / node2(ssh + sudo tee)
for host in master2 node1 node2; do
echo "===== deploy env to $host ====="
cat /etc/profile.d/flink120.sh | ssh $host "sudo tee /etc/profile.d/flink120.sh > /dev/null && sudo chmod 644 /etc/profile.d/flink120.sh"
done

# 3)4 台 source 并校验版本
for host in master1 master2 node1 node2; do
echo "===== $host ====="
ssh $host "source /etc/profile.d/flink120.sh && which flink && flink --version"
done

每台都打印 Version: 1.20.5, Commit ID: ... 就 OK。


5.0 终极 0→1 命令链(推荐!所有前置检查 + conf.clean 重建 + 启动一条 && \ 串完)

⚠️ 这是最干脆的一键命令,跳过了 5.1 繁琐的校验步骤。直接复制粘贴在 master1 上执行(按你的资源把第 2 行的 CONFIG_LETTER=C 改成 A/B/C 即可)。

# =====================================================
# 0→1 一键启动链(master1 上整段复制粘贴运行)
# =====================================================
export CONFIG_LETTER=C && \
export CLEAN_FLINK_CONF_DIR=/home/bigdata/module/flink-1.20.5/conf.clean && \
export FLINK_DIST=/home/bigdata/module/flink-1.20.5 && \
source /etc/profile.d/flink120.sh && \
\
echo "[1/7] 校验 PATH 指向新 Flink(不能是 HDP 1.15)" && \
test "$(which flink)" = "/home/bigdata/module/flink-1.20/bin/flink" && \
flink --version | grep -q 'Version: 1.20.5' && \
\
echo "[2/7] 清理 + 重建 conf.clean(每次都重建,避免旧缓存)" && \
rm -rf $CLEAN_FLINK_CONF_DIR && mkdir -p $CLEAN_FLINK_CONF_DIR && \
rsync -av $FLINK_DIST/conf/ $CLEAN_FLINK_CONF_DIR/ \
--exclude='*.bak*' --exclude='flink-conf*.yaml*' --exclude='config.yaml*' && \
cp /home/bigdata/software/config_${CONFIG_LETTER}.yaml $CLEAN_FLINK_CONF_DIR/config.yaml && \
ls $CLEAN_FLINK_CONF_DIR/config.yaml && \
grep -E 'jobmanager.memory.process.size|taskmanager.memory.process.size|io.tmp.dirs' $CLEAN_FLINK_CONF_DIR/config.yaml && \
\
echo "[3/7] 4 台重建 /tmp/flink-bigdata 1777 sticky(清残余属主问题)" && \
for host in master1 master2 node1 node2; do
ssh $host "
sudo rm -rf /tmp/flink-bigdata
sudo -u bigdata mkdir -p /tmp/flink-bigdata/tmp /tmp/flink-bigdata/upload /tmp/flink-bigdata/web-tmp
sudo chmod -R 1777 /tmp/flink-bigdata
"
done && \
\
echo "[4/7] HDFS 授权(sudo -u hdfs 写 /user 目录)" && \
sudo -u hdfs hdfs dfs -mkdir -p /user/flink/checkpoints /user/flink/savepoints /user/flink/ha /user/hive/warehouse/paimon /user/bigdata && \
sudo -u hdfs hdfs dfs -chown -R bigdata:hadoop /user/flink /user/hive/warehouse/paimon /user/bigdata && \
sudo -u hdfs hdfs dfs -chmod -R 775 /user/flink /user/hive/warehouse/paimon /user/bigdata && \
\
echo "[5/7] 瘦 HADOOP_CLASSPATH(禁 hive-client/lib/*,防 Jackson/Netty 版本冲突)" && \
export HADOOP_CLASSPATH=$(/usr/hdp/current/hadoop-client/bin/hadoop classpath):/etc/hive/conf && \
export FLINK_CONF_DIR=$CLEAN_FLINK_CONF_DIR && \
\
echo "[6/7] 前置校验:conf.clean 存在 + 内存参数真读到了" && \
test -d $FLINK_CONF_DIR && \
grep -q 'jobmanager.memory.process.size' $FLINK_CONF_DIR/config.yaml && \
\
echo "[7/7] 启动 YARN Session(-D 全连写无空格;绝对路径 bin/yarn-session.sh,不依赖软链穿透)" && \
case $CONFIG_LETTER in
C) JM_MB=512 ; TM_MB=1024 ; SLOTS=1 ;;
A) JM_MB=1024; TM_MB=2048 ; SLOTS=2 ;;
B) JM_MB=2048; TM_MB=4096 ; SLOTS=4 ;;
*) echo "CONFIG_LETTER must be C/A/B" >&2 ; exit 1 ;;
esac && \
$FLINK_DIST/bin/yarn-session.sh \
-d \
-jm $JM_MB \
-tm $TM_MB \
-s $SLOTS \
-nm paimon-1.20 \
-qu default \
-Djobmanager.memory.process.size="${JM_MB} mb" \
-Dtaskmanager.memory.process.size="${TM_MB} mb" \
-Dtaskmanager.numberOfTaskSlots=$SLOTS \
-Dio.tmp.dirs=/tmp/flink-bigdata/tmp \
-Denv.java.opts.all="-Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8" \
-Dclassloader.check-leaked-classloader=false

# 成功最后一行会打印:The Web frontend of the YARN session cluster is located at: http://master1:8082

5.1 三套启动命令(与 3.2 配置严格对齐;前置 conf.clean、/tmp、HDFS 授权 5.0 已做完的话,这三条只保留提交部分)

⚠️ 操作约束:所有提交统一在 master1 上跑;-D 全连写无空格;FLINK_CONF_DIR 显式指向 conf.clean

命令 C — 极限丐版(配置 C:JM 512M / TM 1G / 1 slot)

source /etc/profile.d/flink120.sh
export CLEAN_FLINK_CONF_DIR=/home/bigdata/module/flink-1.20.5/conf.clean
export FLINK_CONF_DIR=$CLEAN_FLINK_CONF_DIR
export HADOOP_CLASSPATH=$(/usr/hdp/current/hadoop-client/bin/hadoop classpath):/etc/hive/conf

/home/bigdata/module/flink-1.20.5/bin/yarn-session.sh \
-d -jm 512 -tm 1024 -s 1 -nm paimon-1.20 -qu default \
-Djobmanager.memory.process.size="512 mb" \
-Dtaskmanager.memory.process.size="1024 mb" \
-Dtaskmanager.memory.managed.fraction=0.2 \
-Dtaskmanager.memory.network.fraction=0.08 \
-Dtaskmanager.memory.jvm-overhead.fraction=0.1 \
-Dio.tmp.dirs=/tmp/flink-bigdata/tmp \
-Denv.java.opts.all="-Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8" \
-Dclassloader.check-leaked-classloader=false

命令 A — 小资源版(配置 A:JM 1G / TM 2G / 2 slot)

source /etc/profile.d/flink120.sh
export CLEAN_FLINK_CONF_DIR=/home/bigdata/module/flink-1.20.5/conf.clean
export FLINK_CONF_DIR=$CLEAN_FLINK_CONF_DIR
export HADOOP_CLASSPATH=$(/usr/hdp/current/hadoop-client/bin/hadoop classpath):/etc/hive/conf

/home/bigdata/module/flink-1.20.5/bin/yarn-session.sh \
-d -jm 1024 -tm 2048 -s 2 -nm paimon-1.20 -qu default \
-Djobmanager.memory.process.size="1024 mb" \
-Dtaskmanager.memory.process.size="2048 mb" \
-Dtaskmanager.memory.managed.fraction=0.3 \
-Dio.tmp.dirs=/tmp/flink-bigdata/tmp \
-Denv.java.opts.all="-Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8" \
-Dclassloader.check-leaked-classloader=false

命令 B — 生产版(配置 B:JM 2G / TM 4G / 4 slot)

source /etc/profile.d/flink120.sh
export CLEAN_FLINK_CONF_DIR=/home/bigdata/module/flink-1.20.5/conf.clean
export FLINK_CONF_DIR=$CLEAN_FLINK_CONF_DIR
export HADOOP_CLASSPATH=$(/usr/hdp/current/hadoop-client/bin/hadoop classpath):/etc/hive/conf

/home/bigdata/module/flink-1.20.5/bin/yarn-session.sh \
-d -jm 2048 -tm 4096 -s 4 -nm paimon-1.20 -qu default \
-Djobmanager.memory.process.size="2048 mb" \
-Dtaskmanager.memory.process.size="4096 mb" \
-Dio.tmp.dirs=/tmp/flink-bigdata/tmp \
-Denv.java.opts.all="-Djava.io.tmpdir=/tmp/flink-bigdata/tmp -Dfile.encoding=UTF-8" \
-Dclassloader.check-leaked-classloader=false
浏览器打开:http://master1:8082
  • Task Managers Tab:至少 2 台 TM;
  • Slots Tab:丐版总 Slots ≥ 3(3 台 × 1),A 版 ≥ 4(2 台 × 2),B 版 ≥ 8;
  • Job 页空 → 正常。
source /etc/profile.d/flink120.sh
export CLEAN_FLINK_CONF_DIR=/home/bigdata/module/flink-1.20.5/conf.clean
export FLINK_CONF_DIR=$CLEAN_FLINK_CONF_DIR
$FLINK_HOME/bin/sql-client.sh embedded -s yarn-session

出现大绿色 Flink SQL> 就 OK。ClassNotFound 回 2.2;hdfs:// scheme 找不到回 3.1 + 3.3。


6. Paimon Quick-Start Hello World(复制粘贴一条一条执行)

全在 Flink SQL> 里跑,分 6 步。

6.1 SET 全局参数

SET 'execution.checkpointing.interval' = '3min';
SET 'execution.checkpointing.mode' = 'EXACTLY_ONCE';
SET 'sink.use-managed-memory-allocator' = 'true';
SET 'sink.managed.writer-buffer-memory' = '256M';
SET 'sql-client.execution.result-mode' = 'tableau';

6.2 创建 Paimon Catalog(复用 HDP HMS,master1:9083)

CREATE CATALOG paimon WITH (
'type' = 'paimon',
'metastore' = 'hive',
'uri' = 'thrift://master1:9083',
'warehouse' = 'hdfs:///user/hive/warehouse/paimon',
'hive-conf-dir' = '/etc/hive/conf',
'hadoop-conf-dir' = '/etc/hadoop/conf'
);

USE CATALOG paimon;
CREATE DATABASE IF NOT EXISTS demo;
USE demo;

SHOW DATABASES;

6.3 建 Paimon 主键表 word_count

CREATE TABLE word_count (
word STRING,
cnt BIGINT,
PRIMARY KEY (word) NOT ENFORCED
) WITH (
'bucket' = '1',
'changelog-producer' = 'input'
);

SHOW TABLES;
DESC word_count;

6.4 开流作业:datagen 随机单词 → Paimon

CREATE TEMPORARY TABLE datagen_word (
word STRING
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1000',
'fields.word.length' = '1'
);

SET 'pipeline.name' = 'paimon_quickstart_wordcount_write';
INSERT INTO word_count
SELECT word, COUNT(*) AS cnt
FROM datagen_word
GROUP BY word;

到 Flink Web UI http://master1:8082 看作业 Running,连续 3 个 CP 成功 → 写通路 OK。

6.5 批读 Paimon 表验证

RESET 'execution.checkpointing.interval';
SET 'execution.runtime-mode' = 'batch';

SELECT * FROM word_count ORDER BY cnt DESC LIMIT 20;

能看到 20 行结果 → Paimon 2.0 + Flink 1.20 + HDP 3.3.2 全链路通了

6.6 退出 SQL Client + 停 demo 作业(可选)

Flink SQL> EXIT;

Flink Web UI 里 Cancel 掉 paimon_quickstart_wordcount_write。跑真实湖仓分层跳到 湖仓一体案例.md


7. StreamPark 2.2.x 独立安装 + 提交 Paimon 作业(推荐)

推荐独立安装 StreamPark 2.2.x 到 /home/bigdata/module/streampark,端口 10001;不要用 Ambari 自带的 10000(版本老且依赖 Ambari 升级)。 路线二选一:

  • 路线 A(推荐):走 7.0 独立安装 → 7.1 起
  • 路线 B:用 Ambari 自带 → 直接跳到 7.1,所有端口 10001 → 10000

7.0 下载安装 StreamPark(独立,master1)

7.0.1 下包(master1 /home/bigdata/software

cd /home/bigdata/software

# ① MySQL Driver(复用 1.4 已下的)
ls mysql-connector-j-8.0.33.jar || \
wget -c https://repo.maven.apache.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar -O mysql-connector-j-8.0.33.jar

# ② StreamPark 2.2.0
wget -c https://mirrors.huaweicloud.com/apache/streampark/2.2.0/apache-streampark_2.12-2.2.0-bin.tar.gz -O apache-streampark_2.12-2.2.0-bin.tar.gz
# 兜底 1:阿里云
# wget -c https://mirrors.aliyun.com/apache/streampark/2.2.0/apache-streampark_2.12-2.2.0-bin.tar.gz -O apache-streampark_2.12-2.2.0-bin.tar.gz
# 兜底 2:Apache 归档
# wget -c https://archive.apache.org/dist/streampark/2.2.0/apache-streampark_2.12-2.2.0-bin.tar.gz -O apache-streampark_2.12-2.2.0-bin.tar.gz

ls -lh /home/bigdata/software | grep -E 'apache-streampark|mysql-connector-j'

7.0.2 解压 + 软链 + 拷 MySQL Driver

mkdir -p /home/bigdata/module
cd /home/bigdata/software
tar -zxf apache-streampark_2.12-2.2.0-bin.tar.gz -C /home/bigdata/module/
ln -sfn /home/bigdata/module/apache-streampark_2.12-2.2.0 /home/bigdata/module/streampark

cp /home/bigdata/software/mysql-connector-j-8.0.33.jar /home/bigdata/module/streampark/lib/
ls -lh /home/bigdata/module/streampark/lib/mysql-connector-j-8.0.33.jar

7.0.3 在 master1 MySQL 给 StreamPark 建库 + 用户

mysql -uroot -p123456
CREATE DATABASE IF NOT EXISTS streampark DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'streampark'@'%' IDENTIFIED BY 'Streampark@123456';
GRANT ALL PRIVILEGES ON streampark.* TO 'streampark'@'%' WITH GRANT OPTION;
CREATE USER IF NOT EXISTS 'streampark'@'localhost' IDENTIFIED BY 'Streampark@123456';
GRANT ALL PRIVILEGES ON streampark.* TO 'streampark'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

7.0.4 改 StreamPark Console 配置:端口 10001 + MySQL

cd /home/bigdata/module/streampark/conf
cp application.yml application.yml.bak

cat > application.yml << 'EOF'
server:
port: 10001
servlet:
context-path: /
compression:
enabled: true
mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*

spring:
profiles:
active: mysql
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://master1:3306/streampark?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: streampark
password: Streampark@123456
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8

mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: org.apache.streampark.console.*.entity
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'

streampark:
console:
auth:
ttl: 12h
home: ${STREAMPARK_HOME:/home/bigdata/module/streampark}
EOF

7.0.5 启动 StreamPark Console(首次自动建表)

source /etc/profile.d/flink120.sh
export HADOOP_HOME=/usr/hdp/current/hadoop-client
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HIVE_CONF_DIR=/etc/hive/conf
export HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$HIVE_CONF_DIR
export FLINK_HOME=/home/bigdata/module/flink-1.20
export STREAMPARK_HOME=/home/bigdata/module/streampark

cd /home/bigdata/module/streampark/bin
bash startup.sh

等 30~60 秒:

http://master1:10001
账号:admin
密码:streampark(首次登录强制改强密码,例如 Admin123456!)

停:cd /home/bigdata/module/streampark/bin && bash shutdown.sh 日志:tail -100f /home/bigdata/module/streampark/logs/console.out


7.1 登录 StreamPark Console

  • 独立版:http://master1:10001
  • Ambari 自带:http://master1:10000
  • 账号 admin / 初始密码 streampark

左侧:Settings → Flink Home → New

字段填法
Flink Home NameFlink 1.20 Paimon
Flink Home Path/home/bigdata/module/flink-1.20(软链路径)
Flink Version1.20,没有就写 1.20.0
备注Paimon 2.0 专用

Save → Sync → 绿色对勾。

7.3 Resource Center → Cluster 添加 YARN Session

左侧:Resource Center → Cluster → New Cluster

字段填法
Cluster Namepaimon-yarn-session
Execution ModeYARN Session
Yarn Queuedefault
集群地址空(自动读 yarn-site.xml)
Flink 版本选 7.2 的 Flink 1.20 Paimon
Yarn Session Namepaimon-1.20(与 5.0/5.1 -nm 对齐,自动 Attach)

Save → Check Status → 绿色 Running

7.4 上传 Paimon Jar 到 Resource Center → Upload

/home/bigdata/module/flink-1.20.5/lib 下 5 个 Jar 全传:

  • paimon-flink-1.20-2.0.0.jar
  • paimon-flink-action-2.0.0.jar
  • paimon-hive-connector-3.1-2.0.0.jar
  • flink-sql-connector-mysql-cdc-3.1.1.jar
  • mysql-connector-j-8.0.33.jar(可选)

左侧:Application → New Application

字段填法
Execution ModeFlink SQL
Flink Cluster7.3 的 paimon-yarn-session
Flink VersionFlink 1.20 Paimon
SQL 内容6.1 ~ 6.4 所有 SQL(SET + CREATE CATALOG + CREATE DATABASE + CREATE TABLE + CREATE TEMP TABLE + INSERT INTO)完整粘进去
Dependencies勾选 7.4 上传的 Paimon 4 个 Jar
Checkpoint Interval180000(毫秒)
Savepoint StrategyLATEST
Parallelism4(丐版写 2
告警通知(可选)钉钉 Webhook

Save → Launch → Flink Web UI http://master1:8082 看作业 Running + StreamPark 列表绿 → 全链路通


8. 常见坑速查(按实际踩坑顺序,每行现象 / 根因 / 修法)

#现象根因 90%马上跑的修法
1wget https://.../flink-1.20.0-... 403 Forbidden(清华 TUNA)Flink 1.20.0 已下架统一升级到 1.20.5,用华为云 / 阿里云镜像(1.2 节三条,第一条首选)
2wget paimon-hive-3.1-2.0.0.jar 404flink-connector-mysql-cdc-3.1.0 (com.ververica) 404① artifactId 少写了 connector- 前缀(正确:paimon-hive-connector-3.1
② CDC 3.0+ 已捐 Apache,groupId 应 org.apache.flink,SQL 用 fat jar 带 sql- 前缀(正确:flink-sql-connector-mysql-cdc-3.1.1.jar
1.3 节四条 wget 全量重跑;artifactId 严格抄前置常量区
3mkdir: 无法创建目录"/data1": 权限不够/data1 root 属主 755,普通用户不能写临时目录统一全迁 /tmp/flink-bigdata/*(1777 sticky bit),跑 3.0 节 for 循环;严禁再用 /data1/home/bigdata/flink
4/etc/profile.d/flink120.sh权限不够 / sudo cat > /etc/profile.d/... 还是权限不够/etc/profile.d/ root 属主;sudo cat > file 的重定向 > 不继承 sudosudo tee << 'EOF' > /dev/null 写法(4 节已写好);分发用 cat 文件 \| ssh host 'sudo tee 目标 > /dev/null'
5JaasModule NoSuchFileException: /home/bigdata/flink(YARN AM Container 启动时)Flink JaasModule 写 jaas 临时文件用 Path.toRealPath() —— 父目录必须存在;且 /home/bigdata/ 是 700,YARN NM 映射用户和家目录属主不一致会炸① 临时目录全迁 /tmp/flink-bigdata/*(3.0 节 1777);② env.java.opts.all 显式 -Djava.io.tmpdir=/tmp/flink-bigdata/tmp;③ io.tmp.dirs 必须对齐同一目录
6IllegalConfigurationException: Total Flink Memory (64MB) < Off-heap Memory (128MB)(反复出现)四层叠加:
① 软链 flink-1.20 断了 → Flink 读默认空值
② PATH 被 HDP 自带 /usr/hdp/*/flink/bin 覆盖 → 实际跑 1.15
-D key=value(带空格)被 JCommander 整参数丢弃
终极大坑:Flink 1.20 默认配置文件已从 flink-conf.yaml 升级为扁平 config.yaml,我们一直写的 flink-conf 根本不被读;且如果 config.yaml 用 nested map(a:\n b: v)和 -D 扁平 key 混用 → 触发 ClassCastException String cannot cast to Map @ YamlParserUtils.convertAndDumpYamlFromFlatMap
按顺序修
ln -sfn /home/bigdata/module/flink-1.20.5 /home/bigdata/module/flink-1.20
which flink 必须指向 1.20(不是 HDP 1.15)→ source /etc/profile.d/flink120.sh
-D连写无空格 -Dkey=value
④ 统一用 conf.clean/config.yaml全扁平 key-value,禁 nested map)→ 直接跑 5.0 终极 0→1 链(会重建 conf.clean,100% 绕开这个坑)
7ClassCastException: class java.lang.String cannot be cast to class java.util.Map @ YamlParserUtils.convertAndDumpYamlFromFlatMapconfig.yaml 写了 nested map(如 jobmanager:\n memory:\n process.size: 512),但命令行 -D 是扁平 key;两者互相转换时炸config.yaml 强制全扁平 key-valuejobmanager.memory.process.size: 512 mb),与 -D 格式完全一致;跑 5.0 时 config_*.yaml 已按扁平写好
8AccessControlException: user=bigdata access=WRITE inode="/user":hdfs:hdfs:drwxr-xr-xHDFS /user 属主 hdfs:hdfs,普通用户不能 mkdir一律 sudo -u hdfs hdfs dfs -mkdir -p ... + chown -R bigdata:hadoop ...(3.4 节和 5.0 [4/7] 已内置)
9YARN AM FAILED exitCode:1,prelaunch.err Last 4096 bytes: 整段为空(尾部没堆栈)YARN Diagnostics 只截尾部 4KB;真实堆栈在 stderr/syslog 的头部 / 中部;或者直接上 NM 本地容器目录`yarn logs -applicationId APP_ID -am ALL 2>&1
10JaasModule AccessDeniedException: /tmp/flink-bigdata/tmp/jaas-*.conf(Container 内部)或 /tmp/flink-bigdata chown: 不允许的操作/tmp/flink-bigdata 残余目录是之前其他进程/root 创建的,属主不是 bigdata,bigdata 自己 chown 被拒
② Container 映射用户 ≠ bigdata,写家目录 700 必炸
每次启动前先清残余再重建(5.0 [3/7] 已内置):sudo rm -rf /tmp/flink-bigdata && sudo -u bigdata mkdir -p ... && sudo chmod -R 1777 /tmp/flink-bigdata(1777 sticky bit:任何用户可写自己的文件但不能删别人的,完美适配 YARN 任意映射用户)
11SLF4J Reconfiguration failed: No configuration found for 'xxx' in 'null' 紧接着 RuntimeException: The configuration directory '.../conf.clean' does not exist启动时直接指定了 FLINK_CONF_DIR=conf.clean,但跳过了「建 conf.clean + rsync 原 conf 的 log4j/logback/config.yaml」步骤不要跳步骤,直接跑 5.0 终极 0→1 链[2/7] 段会先 rm -rf conf.clean && mkdir && rsync 原 conf(除 flink-conf*)&& cp config_*.yaml → config.yaml,全链路闭环
12flink --version 还是 1.15(HDP 自带)或 which flink 指向 /usr/hdp/.../flink/bin/flinkHDP 自带 /usr/hdp/current/flink/bin 在 PATH 前面;或者 /etc/profile.d/flink120.sh 没 source/etc/profile.d/flink120.sh 必须写 export PATH=$FLINK_HOME/bin:$PATH($FLINK_HOME 放最前)(4 节已内置)
② 每次手动跑脚本前 source /etc/profile.d/flink120.sh(5.0 [1/7] 已校验)