Hi Martin, I think the problem is that the the WritableSerializer, WritableComparator, ValueComparator, ValueSerializer and the AvroSerializer all use Kryo to copy objects. However, in some cases, e.g. missing no-arg constructor, Kryo is not able to copy the object. In these cases, one should try to copy the objects via serialization as a fallback strategy. That’s a bug in these components. I’ll file an issue and open a PR for it.
Thanks a lot for finding this problem Martin! Cheers, Till On Fri, Nov 27, 2015 at 11:59 AM, Martin Junghanns <[email protected]> wrote: > Hi, > > I looked further into the problem and discovered, that the serialization > also fails for TestEnvironment and LocalEnvironment if a groupBy operation > is involved. > > Please have a look at the updated Gist > > https://gist.github.com/s1ck/566796df5f35ee1de6f9 > > Best, > Martin > > > On 27.11.2015 10:20, Martin Junghanns wrote: > >> Hi, >> >> While building IT tests which extend MultipleProgramsTestBase, I >> encountered a problem with serialization: >> >> I posted a minimal example here: >> https://gist.github.com/s1ck/566796df5f35ee1de6f9 >> >> This runs fine with LocalEnvironment. However, when executing this in >> CollectionEnvironment, it leads to the following Exception: >> >> Exception in thread "main" com.esotericsoftware.kryo.KryoException: >> Class cannot be created (missing no-arg constructor): java.util.UUID >> Serialization trace: >> uuid (ObjectInTuple$ID) >> at >> >> com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy.newInstantiatorOf(Kryo.java:1228) >> >> >> I tried to manually register a UUIDSerializer (which should not be >> necessary as Flink has a dependency to such "default" serializers), but >> this did not fix the problem. >> >> What I don't understand in general is why the LocalEnvironment and the >> CollectionEnvironment use different strategies (e.g. in serialization >> and also in workflow execution). >> >> Thanks for your help! >> >> Best, >> Martin >> >
