Cool! Thanks a lot for your help, Luke. On Wed, 8 Jul 2020 at 23:45, Luke Cwik <lc...@google.com> wrote:
> The problem is that CreateSessionMetrics has an instance of > com.ikea.search.ab.common.ProductCatalog$Product as part of its > serialization closure. Does it have a member variable of that type, or > refer to one that is part of its parent's class, or ...? Should it be > marked transient? > > Marking it as serializable is necessary if you want to keep it part of > that class's closure and is unrelated to the usage of @DefaultCoder. > > Here are some articles[1, 2, 3] about Java serialization and what is > captured that could help if you want additional background. > > 1: https://www.cs.unh.edu/~charpov/programming-serial-lambda.html > 2: http://www.lifeisafile.com/Serialization-in-spark/ > 3: > https://stackoverflow.com/questions/40259196/understanding-sparks-closures-and-their-serialization > > > On Wed, Jul 8, 2020 at 1:22 PM Kirill Zhdanovich <kzhdanov...@gmail.com> > wrote: > >> Hello Luke, >> I will try to get "22 more" soon, not sure how to it though >> >> 23:11:11.339 [ERROR] [system.err] Exception in thread "main" >> java.lang.IllegalArgumentException: unable to serialize >> DoFnWithExecutionInformation{doFn=com.ikea.search.ab.bootstrap.Job$CreateSessionMetrics@444f44c5, >> mainOutputTag=Tag<org.apache.beam.sdk.values.PCollection.<init>:400#6929f09b03d242ca>, >> sideInputMapping={}, >> schemaInformation=DoFnSchemaInformation{elementConverters=[]}} >> 23:11:11.339 [ERROR] [system.err] at >> org.apache.beam.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:55) >> 23:11:11.339 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.ParDoTranslation.translateDoFn(ParDoTranslation.java:606) >> 23:11:11.339 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.PrimitiveParDoSingleFactory$PayloadTranslator$1.translateDoFn(PrimitiveParDoSingleFactory.java:197) >> 23:11:11.339 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.ParDoTranslation.payloadForParDoLike(ParDoTranslation.java:738) >> 23:11:11.339 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.PrimitiveParDoSingleFactory$PayloadTranslator.payloadForParDoSingle(PrimitiveParDoSingleFactory.java:193) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.PrimitiveParDoSingleFactory$PayloadTranslator.translate(PrimitiveParDoSingleFactory.java:154) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.PTransformTranslation$KnownTransformPayloadTranslator.translate(PTransformTranslation.java:417) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.PTransformTranslation.toProto(PTransformTranslation.java:225) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.SdkComponents.registerPTransform(SdkComponents.java:157) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.PipelineTranslation$1.visitPrimitiveTransform(PipelineTranslation.java:87) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.sdk.runners.TransformHierarchy$Node.visit(TransformHierarchy.java:665) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.sdk.runners.TransformHierarchy$Node.visit(TransformHierarchy.java:657) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.sdk.runners.TransformHierarchy$Node.access$600(TransformHierarchy.java:317) >> 23:11:11.340 [ERROR] [system.err] at >> org.apache.beam.sdk.runners.TransformHierarchy.visit(TransformHierarchy.java:251) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.sdk.Pipeline.traverseTopologically(Pipeline.java:460) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.runners.core.construction.PipelineTranslation.toProto(PipelineTranslation.java:59) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.DataflowPipelineTranslator.translate(DataflowPipelineTranslator.java:187) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.DataflowRunner.run(DataflowRunner.java:795) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.runners.dataflow.DataflowRunner.run(DataflowRunner.java:186) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.sdk.Pipeline.run(Pipeline.java:315) >> 23:11:11.341 [ERROR] [system.err] at >> org.apache.beam.sdk.Pipeline.run(Pipeline.java:301) >> 23:11:11.341 [ERROR] [system.err] at >> com.ikea.search.ab.bootstrap.Job.testPipeline(Job.java:185) >> 23:11:11.341 [ERROR] [system.err] at >> com.ikea.search.ab.bootstrap.Job.main(Job.java:196) >> 23:11:11.342 [ERROR] [system.err] Caused by: >> java.io.NotSerializableException: >> com.ikea.search.ab.common.ProductCatalog$Product >> 23:11:11.342 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) >> 23:11:11.342 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) >> 23:11:11.342 [ERROR] [system.err] at >> java.util.HashMap.internalWriteEntries(HashMap.java:1790) >> 23:11:11.342 [ERROR] [system.err] at >> java.util.HashMap.writeObject(HashMap.java:1363) >> 23:11:11.342 [ERROR] [system.err] at >> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> 23:11:11.342 [ERROR] [system.err] at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >> 23:11:11.342 [ERROR] [system.err] at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> 23:11:11.342 [ERROR] [system.err] at >> java.lang.reflect.Method.invoke(Method.java:498) >> 23:11:11.342 [ERROR] [system.err] at >> java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) >> 23:11:11.343 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) >> 23:11:11.344 [ERROR] [system.err] at >> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) >> 23:11:11.344 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) >> 23:11:11.344 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) >> 23:11:11.344 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) >> 23:11:11.344 [ERROR] [system.err] at >> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) >> 23:11:11.344 [ERROR] [system.err] at >> org.apache.beam.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:51) >> 23:11:11.344 [ERROR] [system.err] ... 22 more >> 23:11:11.393 [ERROR] >> [org.gradle.internal.buildevents.BuildExceptionReporter] >> 23:11:11.393 [ERROR] >> [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build >> failed with an exception. >> >> On Wed, 8 Jul 2020 at 22:58, Luke Cwik <lc...@google.com> wrote: >> >>> Can you provide the full stacktrace? >>> >>> On Wed, Jul 8, 2020 at 12:33 PM Rui Wang <ruw...@google.com> wrote: >>> >>>> Tried some code search in Beam repo but I didn't find the exact line >>>> of code that throws your exception. >>>> >>>> However, I believe for Java Classes you used in primitives (ParDo, >>>> CombineFn) and coders, it's very likely you need to make them >>>> serializable (i.e. implements Serializable). >>>> >>>> >>>> -Rui >>>> >>>> On Wed, Jul 8, 2020 at 6:23 AM Kirill Zhdanovich <kzhdanov...@gmail.com> >>>> wrote: >>>> > >>>> > Hi! >>>> > I'm using Apache Beam Java(2.19.0) with Dataflow. I created class and >>>> annotated it with DefaultCoder >>>> > >>>> > @DefaultCoder(AvroCoder.class) >>>> > public class ProductCatalog { >>>> > >>>> > When I trying to submit it to cluster I get an error: >>>> > >>>> > Caused by: java.io.NotSerializableException: ...common.ProductCatalog >>>> > >>>> > If I add `implements Serializable` to the class definition everything >>>> works fine. In the Apache Beam guide, I don't see anything about using >>>> implements Serializable. What I'm doing wrong? Thank you in advance for >>>> your help >>>> >>> >> >> -- >> Best Regards, >> Kirill >> > -- Best Regards, Kirill