2017-12-21 117 views
5

Tôi cố gắng gửi một công việc trên Flink 1.4 và nhận ngoại lệ sau đây.Flink 1.4 AvroUtils lỗi

Bất kỳ ý tưởng nào về cách giải quyết sự cố?

Caused by: org.apache.flink.runtime.client.JobExecutionException: Job execution failed. 
at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$6.apply$mcV$sp(JobManager.scala:897) 
at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$6.apply(JobManager.scala:840) 
at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1$$anonfun$applyOrElse$6.apply(JobManager.scala:840) 
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) 
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) 
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) 
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415) 
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
Caused by: java.lang.VerifyError: Bad type on operand stack 
Exception Details: 
    Location: 
    org/apache/flink/formats/avro/utils/AvroKryoSerializerUtils.addAvroGenericDataArrayRegistration(Ljava/util/LinkedHashMap;)V @23: invokespecial 
    Reason: 
Type 'org/apache/flink/api/java/typeutils/runtime/kryo/Serializers$SpecificInstanceCollectionSerializerForArrayList' (current frame, stack[7]) is not assignable to 'com/esotericsoftware/kryo/Serializer' 
    Current Frame: 
bci: @23 
flags: { } 
locals: { 'org/apache/flink/formats/avro/utils/AvroKryoSerializerUtils', 'java/util/LinkedHashMap' } 
stack: { 'java/util/LinkedHashMap', 'java/lang/String', uninitialized 6, uninitialized 6, 'java/lang/Class', uninitialized 12, uninitialized 12, 'org/apache/flink/api/java/typeutils/runtime/kryo/Serializers$SpecificInstanceCollectionSerializerForArrayList' } 
    Bytecode: 
0x0000000: 2b12 05b6 000b bb00 0c59 1205 bb00 0d59 
0x0000010: bb00 0659 b700 0eb7 000f b700 10b6 0011 
0x0000020: 57b1         

at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) 
at java.lang.Class.getConstructor0(Class.java:3075) 
at java.lang.Class.getConstructor(Class.java:1825) 
at org.apache.flink.api.java.typeutils.AvroUtils.getAvroUtils(AvroUtils.java:48) 
at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.buildKryoRegistrations(KryoSerializer.java:481) 
at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.<init>(KryoSerializer.java:119) 
at org.apache.flink.api.java.typeutils.GenericTypeInfo.createSerializer(GenericTypeInfo.java:90) 
at org.apache.flink.api.java.typeutils.TupleTypeInfo.createSerializer(TupleTypeInfo.java:107) 
at org.apache.flink.api.java.typeutils.TupleTypeInfo.createSerializer(TupleTypeInfo.java:52) 
at org.apache.flink.api.java.typeutils.ListTypeInfo.createSerializer(ListTypeInfo.java:102) 
at org.apache.flink.api.common.state.StateDescriptor.initializeSerializerUnlessSet(StateDescriptor.java:253) 
at org.apache.flink.runtime.state.DefaultOperatorStateBackend.getListState(DefaultOperatorStateBackend.java:520) 
at org.apache.flink.runtime.state.DefaultOperatorStateBackend.getUnionListState(DefaultOperatorStateBackend.java:165) 
at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.initializeState(FlinkKafkaConsumerBase.java:692) 
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:178) 
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:160) 
at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96) 
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:259) 
at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeOperators(StreamTask.java:694) 
at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeState(StreamTask.java:682) 
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:253) 
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:718) 
at java.lang.Thread.run(Thread.java:748) 
+1

hiện đang ngăn không nâng cấp từ 1.3.1 đến 1,4 –

+0

chúng tôi đã gặp lỗi tương tự khi nâng cấp lên 1.4 từ 1.3.2. Chúng tôi vẫn đang tìm kiếm giải pháp. – toch

Trả lời

2

nhờ "toch" về câu trả lời trước đó - anh ta đã cho tôi một hướng đi cho các giải pháp

<exclude>com.esotericsoftware.kryo:kryo</exclude> 

đã được loại trừ trong chúng tôi pom.xml

Tôi nhận thấy rằng kryo-shaded đã được bao gồm

tôi loại trừ bởi thêm vào pom

<exclude>com.esotericsoftware:kryo-shaded</exclude> 

và nó giải quyết vấn đề

+2

Vui lòng không lặp lại câu trả lời từ những người dùng khác, thay vào đó hãy trả lời câu trả lời của họ. –

+0

Bạn có thể chỉ ra vị trí trong pom bạn đã loại trừ không? – Jicaar

5

Đó là xung đột giữa lib Kryo vào trong công việc và hình ảnh đã được nạp trong Flink.

Thật vậy, serializers $ SpecificInstanceCollectionSerializerForArrayList thừa hưởng từ com.esotericsoftware.kryo.Serializer qua SpecificInstanceCollectionSerializerCollectionSerializer. (xem Serializers.java trong Flink và CollectionSerializer.java ở Kryo).

Chúng tôi sửa lỗi bằng cách loại trừ Kryo lib khỏi công việc Jar. Trong Gradle build.gradle, nó được thực hiện với (nếu bạn sử dụng ShadowJar plugin):

configurations { 
    runtime.exclude module: 'kryo' , group: 'com.esotericsoftware.kryo' 
} 

trong Maven pom.xml, nó được thực hiện với (nếu bạn sử dụng bóng râm plugin):

<exclude>com.esotericsoftware.kryo:kryo</exclude> 
+0

của nó không làm các trick –

+0

xe tăng theo hướng –

+0

Rất vui được chia sẻ và trợ giúp! – toch

Các vấn đề liên quan