Serialization 如何序列化Apache Beam中运行时创建的类

Serialization 如何序列化Apache Beam中运行时创建的类,serialization,deserialization,google-cloud-dataflow,apache-beam,byte-buddy,Serialization,Deserialization,Google Cloud Dataflow,Apache Beam,Byte Buddy,我有一个ApacheBeam应用程序,它使用direct runner在本地运行管道,使用dataflow runner在google云中运行管道。它在本地工作,但无法运行google dataflow runner 以下是错误跟踪: (9938ce94c0752c7):java.lang.RuntimeException:com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.Unchecked

我有一个ApacheBeam应用程序,它使用direct runner在本地运行管道,使用dataflow runner在google云中运行管道。它在本地工作,但无法运行google dataflow runner

以下是错误跟踪:

(9938ce94c0752c7):java.lang.RuntimeException:com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.UncheckedExecutionException:java.lang.IllegalArgumentException:无法反序列化的DofInfo 位于com.google.cloud.dataflow.worker.MapTaskExecutorFactory$3.typedApply(MapTaskExecutorFactory.java:283) 位于com.google.cloud.dataflow.worker.MapTaskExecutorFactory$3.typedApply(MapTaskExecutorFactory.java:253) 位于com.google.cloud.dataflow.worker.graph.Networks$TypeSafeNodeFunction.apply(Networks.java:55) 位于com.google.cloud.dataflow.worker.graph.Networks$TypeSafeNodeFunction.apply(Networks.java:43) 位于com.google.cloud.dataflow.worker.graph.Networks.replaceDirectedNetworkNodes(Networks.java:78) 位于com.google.cloud.dataflow.worker.MapTaskExecutorFactory.create(MapTaskExecutorFactory.java:142) 位于com.google.cloud.dataflow.worker.DataflowWorker.doWork(DataflowWorker.java:271) 位于com.google.cloud.dataflow.worker.DataflowWorker.getAndPerformWork(DataflowWorker.java:244) 位于com.google.cloud.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.doWork(DataflowBatchWorkerHarness.java:135) 位于com.google.cloud.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:115) 位于com.google.cloud.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:102) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)处 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)
原因:com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.UncheckedExecutionException:java.lang.IllegalArgumentException:无法反序列化序列化的DoFnInfo 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2214) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache.get(LocalCache.java:4053) 在com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4899) 位于com.google.cloud.dataflow.worker.userpardonfactory.create(userpardonfactory.java:95) 位于com.google.cloud.dataflow.worker.defaultpardonfactory.create(defaultpardonfactory.java:66) 位于com.google.cloud.dataflow.worker.MapTaskExecutorFactory.createParDoOperation(MapTaskExecutorFactory.java:360) 位于com.google.cloud.dataflow.worker.MapTaskExecutorFactory$3.typedApply(MapTaskExecutorFactory.java:271) ... 14更多
原因:java.lang.IllegalArgumentException:无法反序列化序列化的DofInfo 位于org.apache.beam.sdk.util.SerializableUtils.deserializeFromByteArray(SerializableUtils.java:75) 位于com.google.cloud.dataflow.worker.userpardonffactory$userdofndextractor.getDoFnInfo(userpardonffactory.java:64) 位于com.google.cloud.dataflow.worker.userpardonfactory$1.call(userpardonfactory.java:100) 位于com.google.cloud.dataflow.worker.userpardonfactory$1.call(userpardonfactory.java:97) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4904) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3628) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2336) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2295) 位于com.google.cloud.dataflow.worker.repackaged.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2208) ... 20多个
原因:java.lang.ClassNotFoundException:头\u H 位于java.net.URLClassLoader.findClass(URLClassLoader.java:381) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:348) 位于java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:628) 位于java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620) 位于java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521) 位于java.io.ObjectInputStream.readClass(ObjectInputStream.java:1486) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1336) 位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 位于org.apache.beam.sdk.util.SerializableUtils.deserializeFromByteArray(SerializableUtils.java:72) ... 28多

它指向

“…无法反序列化序列化的DoFnInfo”

“…java.lang.ClassNotFoundException:标头_H”

我怀疑这与我使用bytebuddy代码来创建类
头\u H
builder = new ByteBuddy().subclass(some.class).name("Header_H").modifiers(PUBLIC);
       .defineField("serialVersionUID", long.class, STATIC, PRIVATE, FINAL).value(37L)
       .implement(Serializable.class);

Class <?> clazz = builder.make().load(getClass().getClassLoader()).getLoaded();
DynamicType.Unloaded<?> type = builder.make();
builder.inject(someJar);
File someFolder = ...
File jar = builder.saveIn(someFolder);
ByteBuddyAgent.install().appendToSystemClassLoaderSearch(new JarFile(jar));