Flink 1.13.1 适配 CDH 6.3.2 实战:绕过 YARN 隔离与 Kerberos 冲突 简介本资源是面向大数据开发工程师与运维人员的Flink 1.13.1在CDH 6.3.2企业级平台上的完整部署套件解决Flink与Cloudera生态深度集成中的Parcel分发、YARN资源调度适配及生产环境配置落地等核心问题。压缩包共5个文件含2个关键jarFLINK_ON_YARN-1.13.1.jar用于作业提交FLINK-1.13.1.jar为运行时核心库、1个Parcel安装包适配Scala 2.11/CentOS 7、1个SHA校验文件保障安全性、1个manifest.json定义版本与依赖整体大小299.52MB结构精炼、开箱即用。已有3496人学习下载适用于CDH集群已就绪、需快速上线Flink实时计算能力的中高级用户。读者可直接获取经验证的Parcel分发包、标准化配置模板、YARN会话启动脚本及配套元数据避免手动编译与兼容性踩坑显著缩短Flink在CDH环境的部署周期与调试成本。1. Flink 1.13.1 适配 CDH 6.3.2不是简单替换 JAR而是绕过 YARN 容器隔离、Classpath 冲突与 Kerberos 认证三重关卡的实战落地你手头有一套稳定运行三年的 CDH 6.3.2 集群——HDFS、YARN、Hive、Kafka 全部就位安全策略已启用 Kerberos所有作业都走 YARN Session 模式提交。现在业务方急着要实时数仓能力你选了 Flink 1.13.1它支持 HiveCatalog、有稳定的 SQL DDL、Checkpoint 对齐机制比 1.12 更稳。但当你把官方二进制包解压、改flink-conf.yaml、执行./bin/yarn-session.sh -n 2的那一刻YARN 日志里立刻刷出ClassNotFoundException: org.apache.hadoop.yarn.api.ApplicationConstants$Environment——这不是版本号对不上是 CDH 6.3.2 的 Hadoop 3.0.0-cdh6.3.2 和 Flink 1.13.1 自带的 Hadoop 2.8.3 之间存在API 签名不兼容 类加载器优先级倒置 Kerberos 主体解析失败三重嵌套问题。这不是“换个包就能跑”的事而是必须亲手拆解 Flink 启动链、重编译关键模块、定制 YARN ApplicationMaster 启动参数、并绕过 CDH 自带的hadoop-client依赖污染。本文只讲你真正能抄的命令、能改的配置、能验证的日志位置以及为什么--ship参数在 CDH 下形同虚设——适合正在 CDH 6.3.2 上推进 Flink 落地的运维工程师、大数据平台开发和实时计算负责人。2. 为什么必须放弃官方二进制包CDH 6.3.2 的 Hadoop 依赖体系与 Flink 1.13.1 的类加载冲突本质Flink 1.13.1 官方二进制包flink-1.13.1-bin-scala_2.11.tgz默认打包的是 Apache Hadoop 2.8.3 的 client jar而 CDH 6.3.2 使用的是 Cloudera 修改版 Hadoop 3.0.0-cdh6.3.2。二者表面都是 Hadoop 3.x但实际差异极大CDH 版本中org.apache.hadoop.yarn.api.ApplicationConstants类被移动到hadoop-yarn-common模块且其Environment枚举字段签名从String改为EnumSetString同时CDH 的hadoop-auth模块强制要求 Kerberos 主体格式必须含/hostREALM而 Flink 默认构造的UserGroupInformation会跳过主机名补全逻辑。这些不是“加个-D就能解决”的配置问题而是 JVM 类加载器在 YARN Container 启动时因ClassLoader.getParent()链路被 CDH 的yarn-site.xml中yarn.application.classpath强制前置导致的双版本 Hadoop 类共存冲突。2.1 核心矛盾点CDH 的yarn.application.classpath如何劫持 Flink 的 ClassLoaderCDH 6.3.2 的yarn-site.xml中默认配置property nameyarn.application.classpath/name value $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/share/hadoop/common/*, $HADOOP_COMMON_HOME/share/hadoop/common/lib/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*, $HADOOP_YARN_HOME/share/hadoop/yarn/*, $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*, $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*, $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/* /value /property这个配置会让 YARN NodeManager 在启动 Container 时优先将 CDH 的所有 Hadoop JAR 加入系统 ClassLoader。而 Flink 的flink-dist_2.11-1.13.1.jar中内嵌的hadoop-yarn模块基于 2.8.3会被系统 ClassLoader 排除——因为org.apache.hadoop.yarn.client.cli.ApplicationCLI这类类已在 CDH 的hadoop-yarn-client-3.0.0-cdh6.3.2.jar中定义JVM 不会再加载 Flink 包里的同名类。结果就是Flink 的 YARN Client 无法实例化YarnClusterDescriptoryarn-session.sh启动失败日志报NoClassDefFoundError或IncompatibleClassChangeError。提示不要试图用--classpath覆盖yarn.application.classpath。YARN 规范中该属性为只读任何客户端传入的 classpath 都会被忽略。这是 CDH 的硬性限制不是 Flink 的 bug。2.2 解决路径必须源码编译 Flink替换flink-yarn模块依赖为 CDH 兼容版本官方 Flink 1.13.1 的pom.xml中flink-yarn模块声明dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-yarn-client/artifactId version2.8.3/version /dependency我们必须将其改为指向 CDH 6.3.2 的 Hadoop 坐标并禁用hadoop-client的传递依赖污染。操作分三步下载 CDH 6.3.2 的 Hadoop 依赖清单登录任意 CDH 节点执行# 获取 CDH Hadoop 所有 JAR 的绝对路径用于后续本地 Maven install find /opt/cloudera/parcels/CDH/jars -name hadoop-*.jar | grep -E (client|common|yarn|auth) | sort输出类似/opt/cloudera/parcels/CDH/jars/hadoop-auth-3.0.0-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hadoop-client-3.0.0-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hadoop-common-3.0.0-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hadoop-yarn-client-3.0.0-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hadoop-yarn-common-3.0.0-cdh6.3.2.jar将 CDH JAR 安装到本地 Maven 仓库关键避免网络拉取逐个执行以hadoop-yarn-client为例mvn install:install-file \ -Dfile/opt/cloudera/parcels/CDH/jars/hadoop-yarn-client-3.0.0-cdh6.3.2.jar \ -DgroupIdorg.apache.hadoop \ -DartifactIdhadoop-yarn-client \ -Dversion3.0.0-cdh6.3.2 \ -Dpackagingjar \ -DgeneratePomtrue对hadoop-auth,hadoop-common,hadoop-yarn-common重复此操作。注意不要安装hadoop-client整包它会带来大量冗余依赖如slf4j-log4j12与 Flink 自带的slf4j-api冲突。修改 Flink 源码flink-yarn/pom.xml下载 Flink 1.13.1 源码flink-1.13.1-src.tgz解压后编辑flink-yarn/pom.xml!-- 替换原有 hadoop-yarn-client 依赖 -- dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-yarn-client/artifactId version3.0.0-cdh6.3.2/version exclusions exclusion groupIdorg.slf4j/groupId artifactIdslf4j-log4j12/artifactId /exclusion exclusion groupIdlog4j/groupId artifactIdlog4j/artifactId /exclusion /exclusions /dependency !-- 新增 hadoop-auth 和 hadoop-yarn-common显式控制版本 -- dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-auth/artifactId version3.0.0-cdh6.3.2/version /dependency dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-yarn-common/artifactId version3.0.0-cdh6.3.2/version /dependency同时在flink-yarn/pom.xml的properties中添加hadoop.version3.0.0-cdh6.3.2/hadoop.version并确保flink-runtime-web、flink-clients等模块也排除掉hadoop-client传递依赖搜索hadoop-client全局替换。2.3 编译与验证跳过测试、指定 Scala 版本、检查生成 JAR 依赖树CDH 6.3.2 默认使用 Scala 2.11由 Spark 2.4.0 决定因此编译命令必须锁定# 进入 flink-1.13.1 源码根目录 mvn clean compile -DskipTests -Dscala-2.11 -Dcheckstyle.skiptrue -Drat.skiptrue编译成功后检查flink-yarn/target/flink-yarn_2.11-1.13.1.jar是否真的引用了 CDH 版本jar -tf flink-yarn/target/flink-yarn_2.11-1.13.1.jar | grep hadoop-yarn-client # 应无输出说明未打包进去由 runtime classpath 提供 # 检查 MANIFEST.MF 中的依赖声明 unzip -p flink-yarn/target/flink-yarn_2.11-1.13.1.jar META-INF/MANIFEST.MF | grep Class-Path # 应看到类似hadoop-yarn-client-3.0.0-cdh6.3.2.jar hadoop-auth-3.0.0-cdh6.3.2.jar这一步做完你手里就有了一个「CDH 原生兼容」的flink-yarn模块——它不再携带旧版 Hadoop也不再尝试加载冲突类而是完全信任 CDH 集群提供的 Hadoop 运行时。这是整个适配工程的地基跳过它后面所有配置都是空中楼阁。3. 构建可部署的 Flink CDH 发行版打包策略、conf 配置与 Kerberos 认证绕过方案有了自编译的flink-yarn下一步是组装一个能在 CDH 6.3.2 上直接运行的 Flink 发行版。注意不能直接用mvn package生成flink-dist因为默认打包会把hadoop-client又塞回去。我们必须手动构建发行版并严格控制lib/目录内容。3.1 手动构建发行版只保留必需 JAR剔除所有 Hadoop 相关包进入flink-dist/src/main/resources确认flink-conf.yaml模板中已删除或注释掉以下行CDH 会自动注入# fs.defaultFS: hdfs://nameservice1 # yarn.resourcemanager.address: rm1-host:8032 # hadoop.username: flink然后执行# 清理旧 dist rm -rf flink-dist/target/flink-1.13.1-bin-scala_2.11 # 复制 flink-dist 模板结构 cp -r flink-dist/src/main/flink-bin flink-dist/target/flink-1.13.1-bin-scala_2.11 # 复制编译好的核心模块 cp flink-runtime/target/flink-runtime_2.11-1.13.1.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp flink-clients/target/flink-clients_2.11-1.13.1.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp flink-yarn/target/flink-yarn_2.11-1.13.1.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ # 关键清空 lib/ 下所有 hadoop-* jar官方包自带的必须删 rm flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/hadoop-*.jar # 复制 CDH 的必要 JAR仅 client 级别非 full stack cp /opt/cloudera/parcels/CDH/jars/hadoop-auth-3.0.0-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-common-3.0.0-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-yarn-client-3.0.0-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-yarn-common-3.0.0-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-hdfs-3.0.0-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/注意hadoop-hdfs是必须的因为 Flink 的FileSystem实现如HdfsFileSystem依赖它。但hadoop-mapreduce-client-core等 MR 相关 JAR 绝对不要放进来它们会触发 CDH 的 MapReduce 安全检查导致 AM 启动失败。3.2flink-conf.yaml关键配置关闭 Flink 自动 Hadoop 加载交由 CDH 管理flink-dist/target/flink-1.13.1-bin-scala_2.11/conf/flink-conf.yaml必须包含以下配置# --- YARN 集成 --- jobmanager.memory.process.size: 2048m taskmanager.memory.process.size: 4096m parallelism.default: 2 # 强制禁用 Flink 自带的 Hadoop 加载逻辑 env.java.opts.jobmanager: -Dfs.hdfs.hadoopconf/etc/hadoop/conf -Dhadoop.home.dir/opt/cloudera/parcels/CDH env.java.opts.taskmanager: -Dfs.hdfs.hadoopconf/etc/hadoop/conf -Dhadoop.home.dir/opt/cloudera/parcels/CDH # YARN 相关CDH 会自动读取 /etc/hadoop/conf/yarn-site.xml此处只需最小化覆盖 yarn.application.name: flink-cdh632 yarn.provided.lib.dirs: hdfs:///user/flink/lib # 指向 HDFS 上的共享 lib见下文 # --- Kerberos 认证 --- security.kerberos.login.use-ticket-cache: true security.kerberos.login.keytab: /etc/security/keytabs/flink.service.keytab security.kerberos.login.principal: flink/_HOSTYOUR-REALM.COM # 关键禁用 Flink 的 Kerberos 主体自动补全CDH 要求 _HOST 必须被真实主机名替换 security.kerberos.login.contexts: Client,KafkaClient # 显式指定上下文避免 Flink 自作主张 # --- 文件系统 --- fs.defaultFS: hdfs://nameservice1 fs.hdfs.hadoopconf: /etc/hadoop/conf其中/etc/hadoop/conf是 CDH 的标准配置目录包含core-site.xml、hdfs-site.xml、yarn-site.xml、krb5.conf。Flink 会通过HadoopConfiguration.fromConfiguration()加载它们从而获得 Kerberos realm、KDC 地址、HDFS HA nameservice 等全部信息。3.3 HDFS 共享库路径yarn.provided.lib.dirs的创建与权限设置CDH 要求所有 YARN Application 的依赖 JAR 必须放在 HDFS 上且由 YARN 自动分发而非本地lib/。这是为了保证一致性与安全性# 创建 HDFS 目录需用 hdfs 用户执行 sudo -u hdfs hdfs dfs -mkdir -p /user/flink/lib sudo -u hdfs hdfs dfs -chown flink:flink /user/flink/lib sudo -u hdfs hdfs dfs -chmod 755 /user/flink/lib # 上传 CDH 兼容的 Flink lib即上一步构建的 lib/ 目录 hdfs dfs -put flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/* /user/flink/lib/提示/user/flink/lib下的 JAR 必须对yarn用户可读CDH 默认开启yarn.nodemanager.env-whitelist会校验文件权限。若遇到AccessControlException执行sudo -u hdfs hdfs dfs -chmod 644 /user/flink/lib/*.jar4. 启动与调试yarn-session.sh的正确姿势、日志定位与 Kerberos 主体解析失败排查发行版构建完毕现在进入最易翻车的实操环节。记住在 CDH 6.3.2 上./bin/yarn-session.sh不是交互式命令而是一个“提交脚本”它的输出日志几乎全是误导信息。真正要看的是 YARN ApplicationMaster 的 container 日志。4.1 正确启动命令必须指定--ship且禁用--detached# 进入你构建的发行版目录 cd flink-dist/target/flink-1.13.1-bin-scala_2.11 # 执行注意不加 --detached否则看不到 AM 启动过程 ./bin/yarn-session.sh \ -n 2 \ -s 2 \ -jm 1024 \ -tm 2048 \ -d \ --ship /tmp/flink-udf-jars/ # 若有自定义 UDF必须 ship 到 HDFS见下文 -D fs.hdfs.hadoopconf/etc/hadoop/conf \ -D security.kerberos.login.keytab/etc/security/keytabs/flink.service.keytab \ -D security.kerberos.login.principalflink/_HOSTYOUR-REALM.COM关键点-d表示 detached 模式错。在 CDH 下-d会导致 AM 日志无法捕获。必须去掉-d让命令前台阻塞直到 AM 启动完成或失败。--ship参数必须指向一个本地目录如/tmp/flink-udf-jars/该目录下放你的业务 JAR。Flink 会自动将此目录压缩为ship.zip并上传到 HDFS 的yarn.nodemanager.remote-app-log-dir通常是/var/log/hadoop-yarn/apps再由 AM 下载解压。若不 shipAM 启动后找不到你的 job jar报JobNotFoundException。-D参数用于覆盖flink-conf.yaml适用于临时调试。生产环境应写死在配置文件中。4.2 日志定位四层日志体系与每层看什么CDH 6.3.2 的 Flink YARN 日志分散在四个位置缺一不可日志层级查看方式关键内容何时查看YARN ResourceManager 日志yarn logs -applicationId application_XXXXXApplicationMaster failed to start、Failed to launch container启动失败时第一眼YARN NodeManager 日志AM containeryarn logs -applicationId application_XXXXX -containerId container_XXXXX_01_000001ClassNotFoundException、NoClassDefFoundError、Kerberos login failure确认 AM 是否成功加载 CDH Hadoop 类Flink JobManager WebUI 日志若 AM 启动成功http://jobmanager-host:8081/#/jobmanager/logStarting YarnSessionClusterEntrypoint、Registered TaskExecutorAM 启动成功后看 JM 是否注册 TMFlink TaskManager 日志NodeManager 上yarn logs -applicationId application_XXXXX -containerId container_XXXXX_01_000002TaskExecutor started、Connecting to JobManager确认 TM 是否连上 JM提示yarn logs命令必须在 Kerberos 认证环境下运行。先kinit -kt /etc/security/keytabs/yarn.service.keytab yarn/$(hostname -f)YOUR-REALM.COM再执行日志命令。4.3 Kerberos 主体解析失败Principal flink/xxxREALM not found in keytab的根因与修复这是 CDH 6.3.2 上最典型的血泪坑。现象AM container 日志报Caused by: javax.security.auth.login.LoginException: Principal flink/xxxREALM not found in keytab原因CDH 的hadoop-auth模块在解析 keytab 时严格校验主体中的 hostname 是否与当前机器的 FQDN 完全一致。而 Flink 默认的flink/_HOSTREALM中_HOST是占位符不会被自动替换。解决方法只有两个且必须二选一在flink-conf.yaml中硬编码主机名推荐用于测试security.kerberos.login.principal: flink/node1.example.comYOUR-REALM.COM security.kerberos.login.keytab: /etc/security/keytabs/flink.service.keytab并确保 keytab 中确实包含该主体klist -kt /etc/security/keytabs/flink.service.keytab使用kinit预认证生产环境唯一可靠方案在提交yarn-session.sh前用 flink 用户执行# 切换到 flink 用户确保 keytab 权限为 400 sudo -u flink kinit -kt /etc/security/keytabs/flink.service.keytab flink/$(hostname -f)YOUR-REALM.COM # 然后提交 session此时 flink 用户已有 TGTAM 会复用 sudo -u flink ./bin/yarn-session.sh -n 2 ...此法绕过login.principal解析直接使用 OS ticket cache100% 兼容 CDH。5. 避坑CDH 6.3.2 Flink 1.13.1 的五大高频翻车现场与血泪修复方案以下是我在三个不同客户集群上踩过的、反复出现的五类问题。每一条都对应一个真实报错、一个根本原因、一个可立即执行的修复命令。请务必在部署前逐条核对。5.1 现象yarn-session.sh报java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/client/cli/ApplicationCLI原因flink-yarn模块仍依赖hadoop-yarn-client-2.8.3与 CDH 的hadoop-yarn-client-3.0.0-cdh6.3.2冲突JVM 加载了 CDH 版本但 Flink 代码调用了 2.8.3 特有的方法签名。解决重新检查flink-yarn/pom.xml确认version已改为3.0.0-cdh6.3.2且mvn dependency:tree | grep hadoop-yarn-client输出中只出现一次3.0.0-cdh6.3.2无2.8.3。然后mvn clean compile -DskipTests重编译。5.2 现象AM container 日志报org.apache.hadoop.security.AccessControlException: Permission denied: userflink, accessWRITE, inode/user/flink/lib原因HDFS 目录/user/flink/lib的 owner 不是flink或权限不是755导致 YARN NodeManager以yarn用户运行无法读取该目录下的 JAR。解决sudo -u hdfs hdfs dfs -chown flink:flink /user/flink/lib sudo -u hdfs hdfs dfs -chmod 755 /user/flink/lib sudo -u hdfs hdfs dfs -chmod 644 /user/flink/lib/*.jar # 关键JAR 文件必须 6445.3 现象yarn-session.sh成功返回Session started但 WebUI 无法访问netstat -tuln | grep 8081无监听原因Flink JobManager 绑定到了localhost而非0.0.0.0CDH 的 YARN 容器网络隔离导致外部无法访问。解决在flink-conf.yaml中强制绑定rest.address: 0.0.0.0 rest.bind-address: 0.0.0.0 jobmanager.rpc.address: 0.0.0.0并确保yarn.nodemanager.webapp.address在yarn-site.xml中未被设为localhost。5.4 现象提交 SQL 作业报TableSchema for table hive_table is nullHiveCatalog 初始化失败原因Flink 1.13.1 的 HiveCatalog 依赖hive-metastore-2.3.6而 CDH 6.3.2 使用hive-metastore-2.1.1-cdh6.3.2二者 Thrift 协议不兼容。解决下载 CDH 6.3.2 的 Hive Metastore JAR 并加入lib/cp /opt/cloudera/parcels/CDH/jars/hive-metastore-2.1.1-cdh6.3.2.jar flink-dist/target/flink-1.13.1-bin-scala_2.11/lib/ # 同时排除 flink-sql-hive 的 hive-metastore 传递依赖修改 flink-sql-hive/pom.xml5.5 现象Checkpoint 失败日志报org.apache.flink.core.fs.FileSystem.create(...)抛IOException: Failed on local exception: java.io.IOException: Couldnt setup connection to ...原因Flink 的FileSystem使用了hadoop-common-3.0.0-cdh6.3.2但core-site.xml中fs.defaultFS配置为hdfs://nameservice1而 CDH 的 HA 配置未被正确加载。解决确认/etc/hadoop/conf/core-site.xml中fs.defaultFS值与hdfs-site.xml中dfs.nameservices一致并在flink-conf.yaml中显式指定fs.hdfs.hadoopconf: /etc/hadoop/conf且确保flink-dist/target/flink-1.13.1-bin-scala_2.11/conf/下没有core-site.xml的副本会覆盖 CDH 配置。6. 生产验证用flink run提交一个端到端 Hive Streaming 作业并固化为 CI/CD 流程适配成功只是起点真正价值在于稳定运行业务作业。下面以一个典型的「Kafka → Flink SQL → Hive 分区表」流式入湖任务为例展示如何验证、固化、并规避 CDH 环境下的隐形陷阱。6.1 作业脚本kafka_to_hive.sqlFlink 1.13.1 SQL Client 兼容-- 设置执行环境 SET execution.runtime-mode streaming; SET pipeline.jars hdfs:///user/flink/lib/flink-sql-connector-kafka_2.11-1.13.1.jar; -- 创建 Kafka 表 CREATE TABLE kafka_source ( id BIGINT, name STRING, ts TIMESTAMP(3), WATERMARK FOR ts AS ts - INTERVAL 5 SECOND ) WITH ( connector kafka, topic user_events, properties.bootstrap.servers kafka1:9092,kafka2:9092, properties.group.id flink-cdh632, format json, scan.startup.mode latest-offset ); -- 创建 Hive 分区表需提前在 Hive CLI 中执行 -- CREATE TABLE IF NOT EXISTS default.user_events_hive ( -- id BIGINT, -- name STRING, -- ts TIMESTAMP -- ) PARTITIONED BY (dt STRING) STORED AS PARQUET; -- 插入数据自动按天分区 INSERT INTO default.user_events_hive SELECT id, name, ts, DATE_FORMAT(ts, yyyy-MM-dd) AS dt FROM kafka_source;6.2 提交命令与关键参数说明# 将 SQL 文件和 Kafka connector JAR 上传到 HDFS hdfs dfs -put kafka_to_hive.sql /user/flink/sql/ hdfs dfs -put flink-sql-connector-kafka_2.11-1.13.1.jar /user/flink/lib/ # 提交注意必须用 flink 用户且已 kinit sudo -u flink kinit -kt /etc/security/keytabs/flink.service.keytab flink/$(hostname -f)YOUR-REALM.COM sudo -u flink ./bin/flink run \ -m yarn-cluster \ -d \ -c org.apache.flink.table.client.SqlClient \ ./lib/flink-sql-client_2.11-1.13.1.jar \ --defaults /user/flink/sql/kafka_to_hive.sql \ --jar hdfs:///user/flink/lib/flink-sql-connector-kafka_2.11-1.13.1.jar \ -D sql-client.execution.result-modetableau \ -D sql-client.verbosetrue参数说明-m yarn-cluster指定 YARN 集群模式非 session-ddetached 模式作业后台运行与yarn-session.sh的-d含义不同-c org.apache.flink.table.client.SqlClient入口类--defaultsSQL 脚本路径HDFS--jar显式指定 connector JARFlink SQL Client 不会自动扫描lib/-D动态配置覆盖flink-conf.yaml。6.3 CI/CD 固化用 Ansible 自动化部署与版本回滚在生产环境绝不能手动 copy-paste。我们用 Ansible 将整个流程固化# deploy-flink-cdh.yml - name: Deploy Flink CDH 1.13.1 hosts: cdh_namenodes become: yes vars: flink_version: 1.13.1 cdh_hadoop_version: 3.0.0-cdh6.3.2 tasks: - name: Create flink user and dirs user: name: flink state: present createhome: yes become: yes - name: Upload Flink dist tarball copy: src: flink-{{ flink_version }}-cdh632.tar.gz dest: /opt/flink/flink-{{ flink_version }}-cdh632.tar.gz owner: flink group: flink - name: Extract and set permissions unarchive: src: /opt/flink/flink-{{ flink_version }}-cdh632.tar.gz dest: /opt/flink/ remote_src: yes owner: flink group: flink - name: Upload HDFS shared libs p a hrefhttps://download.csdn.net/download/flh141/20449532 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p