我们的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
答案 0 :(得分:1)
欢迎来到classpath-hell :-)。根据您提供的信息,我无法真正看到此错误出现的位置,但是我想您会在flink运算符中的某个位置尝试使用ObjectMapper来编组/解组某些数据。我建议您检查一下纱线类路径上的内容(哪个杰克逊版本)。如果您需要特定版本的杰克逊,请使用阴影杰克逊版本构建胖子罐。如果没有玩简单的游戏,则选择已经是您的纱线类路径的线程,还是(可能更容易)获取已经为您着色的一个flink:您可以在软件包名称下找到:org.apache.flink.hadoop.shaded.org.codehaus.jackson.map
。
希望有帮助。
答案 1 :(得分:0)
来自纱线的杰克逊版本为2.9.5,而我使用的版本为2.6.7 将jackson版本更改为2.9.5对我有用。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>