Apache Zeppelin连接远程Flink集群失败问题求助
Apache Zeppelin 连接远程Flink集群序列化版本不兼容问题
尝试通过docker-compose部署Apache Zeppelin与Apache Flink,Zeppelin在本地模式(自行启动Flink集群)下可正常工作,但在远程模式(连接现有集群)时出现类序列化版本不兼容错误。目前使用Flink 1.12.0与Zeppelin 0.10.1搭配,这是唯一能让本地模式正常运行的版本。
docker-compose.yml配置
version: "2.2" services: jobmanager: image: flink:1.12.0 ports: - "8081:8081" command: jobmanager environment: - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager taskmanager: image: flink:1.12.0 depends_on: - jobmanager command: taskmanager scale: 1 environment: - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager taskmanager.numberOfTaskSlots: 2 zeppelin: image: apache/zeppelin:0.10.1 hostname: zeppelin depends_on: - taskmanager container_name: zeppelin ports: - "9080:8080" - "9081:8081" volumes: - /home/administrator/flink/flink-1.12.0:/opt/flink environment: FLINK_HOME: /opt/flink
Zeppelin远程Flink集群配置
flink.execution.mode: remote flink.execution.remote.host: jobmanager flink.execution.remote.port: 8081
错误堆栈信息
data: org.apache.flink.api.scala.DataSet[String] = org.apache.flink.api.scala.DataSet@6adbed6a org.apache.flink.client.program.ProgramInvocationException: Job failed (JobID: c55932eec9cc32b8df64630be00b2532) at org.apache.flink.client.deployment.ClusterClientJobClientAdapter.lambda$null$6(ClusterClientJobClientAdapter.java:119 undefined) ... Caused by: java.io.InvalidClassException: org.apache.flink.api.scala.typeutils.CaseClassTypeInfo; local class incompatible: stream classdesc serialVersionUID = -3156538608383968041, local class serialVersionUID = -8170136754691974512 ...
已尝试操作
- 查看Flink日志寻找其他端口尝试,均无效;
- 尝试其他Flink版本,但出现不同错误,甚至本地模式都无法正常运行。
解决方案建议
统一Flink依赖版本
错误核心是Zeppelin内置的Flink Scala依赖与远程集群版本不匹配。虽然挂载了本地Flink 1.12.0到Zeppelin容器,但Zeppelin 0.10.1默认携带的Flink依赖可能和集群的Scala版本(如2.11/2.12)不一致:- 检查本地Flink 1.12.0的Scala版本:查看
flink-1.12.0/lib下的jar包,比如flink-scala_2.11-1.12.0.jar对应Scala 2.11; - 替换Zeppelin默认的Flink依赖:删除Zeppelin容器内
interpreter/flink下的旧jar包,复制集群flink-1.12.0/lib中的所有jar到该目录,确保依赖完全一致。
- 检查本地Flink 1.12.0的Scala版本:查看
修正远程连接端口
当前配置的8081是Flink Web UI端口,远程连接需使用JobManager的RPC端口(默认6123),修改Zeppelin配置:flink.execution.mode: remote flink.execution.remote.host: jobmanager flink.execution.remote.port: 6123同时在docker-compose的jobmanager环境变量中明确RPC端口:
environment: - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager jobmanager.rpc.port: 6123确保容器网络连通性
在Zeppelin容器内执行ping jobmanager和telnet jobmanager 6123,确认能正常访问JobManager的RPC端口,排除网络不通的问题。使用官方兼容镜像
尝试使用Zeppelin官方提供的带指定Flink版本的镜像,比如apache/zeppelin:0.10.1-flink-1.12(若存在),这类镜像已预先处理好依赖兼容性,避免手动配置的冲突。
内容的提问来源于stack exchange,提问作者Michel D
相关产品推荐
相关产品推荐

