Flink作业:获取InvalidClassException:com.fasterxml.jackson.databind.ObjectMapper

时间:2019-04-29 06:32:59

标签: java jackson yarn apache-flink flink-streaming

我们的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

2 个答案:

答案 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>