我们的 flink 作业在本地运行得非常好,但在尝试将其部署到 yarn 集群中时,它抛出以下错误。
Flink 版本:1.5.0 jackson 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
最佳答案
欢迎来到类路径 hell :-)。根据您提供的信息,我无法真正看到此错误出现在哪里,但我猜想在 flink-operator 中的某个地方您尝试使用 ObjectMapper 来编码/解码一些数据。我建议您检查 yarn 类路径上的内容( jackson 版本)。如果您需要特定版本的 jackson,请构建一个带有阴影 jackson 版本的 fat-jar。如果不玩简单的游戏,请选择已经是您的 yarn 类路径的那个,或者(也许更容易)选择已经为您着色的一个 flink:您可以在包名称下找到:org.apache.flink.hadoop .shaded.org.codehaus.jackson.map
.
希望有帮助。
关于java - Flink 作业 : Getting InvalidClassException: com. fastxml.jackson.databind.ObjectMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898086/