我们的flink工作在当地运行得非常好,但在尝试将其部署在纱线集群中时,它会低于错误。
Flink版本:1.5.0杰克逊2.6.7
Caused by: java.io.InvalidClassException: com.fasterxml.jackson.databind.ObjectMapper; local class incompatible: stream classdesc serialVersionUID = 2, local class serialVersionUID = 1
我尝试过不同的flink版本,所有版本都会出现问题。
DataStream stream = DataStreamManager
.getStatusUpdateStream(kafkaConsumerConfig, env)
.filter(new CheckStatusUpdate())
.keyBy(new OrderUpdateKeySelector());
stream.process(new ProcessBookingUpdatesEvents(config)).setParallelism(processBookingUpdatesEventsParallelism)
.process(new ExecuteOrderStatusUpdateNotifierFilter(config)).setParallelism(filterParallelism)
.process(new ProcessOrderPostFiltering(config,communicationConfig)).setParallelism(processOrderPostFilteringParallelism);
提交flink工作的命令:
export HADOOP_CLASSPATH=`hadoop classpath`;HADOOP_CONF_DIR=/etc/hadoop/conf flink-1.5.0/bin/flink run -m yarn-cluster -yn 2 -ys 1 -yjm 2048 -ytm 4096 -yst -ynm order_updates -yqu default -p 1 -c com.order.workflow.consumer.flink.OrderStatusUpdateJob orchestrator-build-1.0.21-staging.jar config.yml
欢迎来到classpath-hell :-)。使用您提供的信息,我无法真正看到此错误出现的位置,但我想在flink-operator中的某处,您尝试使用ObjectMapper来编组/解组某些数据。我建议你检查你的纱线类路径上的(哪个杰克逊版本)。如果你需要一个特定版本的杰克逊建造一个带有阴影杰克逊版本的胖罐。如果不玩简单的游戏,并考虑是否已经是你的纱线类路径或(可能更容易)的一个flink已经为你着色:你可以找到包名称:org.apache.flink.hadoop.shaded.org.codehaus.jackson.map
。
希望有所帮助。
来自纱线的杰克逊版本为2.9.5,我使用的是2.6.7将杰克逊版本更改为2.9.5为我工作。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>