问题标签 [kryo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4367 浏览

java - 带有自定义类的嵌套 HashMap 的 Kryo 序列化

我正在尝试使用 kryo 序列化一个自定义类,该类本身包含一些自定义对象,更具体地说是自定义对象的 HashMap。我想知道处理这样的事情的正确方法。下面是我要序列化的类(数据)、嵌套的类以及我当前的 kryo 实现。这是正确的做法吗?

0 投票
1 回答
4285 浏览

serialization - 如何让 Spark 使用 Kryo 序列化对象?

我想将一个对象从驱动程序节点传递到 RDD 所在的其他节点,以便 RDD 的每个分区都可以访问该对象,如下面的代码片段所示。

在上面的代码片段中,我尝试在 Spark 中由 Kryo序列化ImmutableBytesWritable ,所以我做了以下操作:

  1. 配置传递给spark上下文的SparkConf实例,即将“ spark.serializer ”设置为“ org.apache.spark.serializer.KryoSerializer ”,将“ spark.kryo.registrator ”设置为“ xt.HelloKryoRegistrator ”;
  2. 编写一个自定义 Kryo 注册器类,我在其中注册类ImmutableBytesWritable
  3. 为ImmutableBytesWritable编写序列化程序

但是,当我在 yarn-client 模式下提交我的 Spark 应用程序时,抛出了以下异常:

线程“主”org.apache.spark.SparkException 中的异常:在 org.apache.spark.util.ClosureCleaner$.clean 的 org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:166) 中的任务不可序列化(ClosureCleaner.scala:158) 在 org.apache.spark.SparkContext.clean(SparkContext.scala:1242) 在 org.apache.spark.rdd.RDD.map(RDD.scala:27​​0) 在 xt.HelloSpark$.main (HelloSpark.scala:23) 在 xt.HelloSpark.main(HelloSpark.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:325) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 原因:java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) at java.io.ObjectOutputStream.writeSerialData( ObjectOutputStream.java:1508) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ) 在 org.apache 的 org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:42)。spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:73) at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:164) ... 还有 12 个

似乎ImmutableBytesWritable不能被 Kryo 序列化。那么让 Spark 使用 Kryo 序列化对象的正确方法是什么?Kryo 可以序列化任何类型吗?

0 投票
0 回答
745 浏览

class - Apache-Spark 中的 Kryo 类错误

我有一些 Spark 代码,我使用 Kryo 序列化。当没有服务器发生故障时,一切都运行良好,但是当服务器发生故障时,我会遇到一些大问题,因为它试图自行恢复。基本上,错误消息表明我的Article课程对服务器来说是未知的。

我真的很难理解我做错了什么......

我在我的地图之外声明这些类

似乎有些执行者不再知道 anArticle是什么......我该如何解决这个问题?

谢谢,斯蒂芬

0 投票
0 回答
411 浏览

apache-kafka - 通过 Kafka 发送带有字节 [] 的 Kryo 自定义序列化类

我正在尝试用 Kryo 序列化一个类并通过 Apache Kafka 发送它。我正在序列化的对象有一个 byte[] 作为类中的一个字段。序列化对象工作正常,但是当我尝试使用 read 方法对其进行反序列化时遇到了麻烦。我总是得到一个数组越界异常:-2。

下面是我的数据对象类 pojo 和我的自定义序列化程序

}

关于 readBytes() 和 writeBytes() 用法的文档很少。我这样做正确吗?

0 投票
1 回答
2143 浏览

java - java.lang.StackOverflowError 使用 Kryo 序列化具有相互引用的对象时

我有一个类似图形的对象,我从服务器发送到客户端,其中nodes包含adjacencyLists.

我有类似的东西:

每次我发送包含这些清除的对象时,我都会收到以下错误:

在 Kryonet 中有解决方法吗?谢谢

0 投票
1 回答
499 浏览

android - Android 上的 Kryo:找不到类“sun.nio.ch.DirectBuffer”

我在 Android 上使用 Kryonet,启动后,VM 因以下错误而崩溃:找不到类 'sun.nio.ch.DirectBuffer',从方法 com.esotericsoftware.kryo.util.UnsafeUtil.releaseBuffer 引用。

问题是什么?

0 投票
0 回答
1400 浏览

scala - Apache Spark SQL UDT Kryo 序列化,找不到类

我想为 SchemaRDD 引入自定义类型,我正在关注这个示例
但是我遇到了 Kryo 序列化问题,这里是堆栈跟踪:

其中com.gis.io.GeometryWritable是我为其创建 UDT 的自定义类,它存在于 APP jar 中。我也通过将 spark 默认序列化程序从 kryo 更改为 Java 来尝试在 Google 组中弃用但这对我没有帮助。有什么建议么 ??如果我错过了什么?以下是我的课程:

这就是我使用它的方式。

已编辑: 实际上我发现如果我只使用一个 RDD(表),自定义 UDT 可以正常工作。当我们加入两个或多个 RDD 时,就会出现问题。据此,当我们使用自定义 ROW 并使用 JOIN 时,这是一个错误有什么线索吗??

0 投票
2 回答
1906 浏览

java - Java,Kryo:向持久化为 FieldSerializer 的类添加字段

这是使用 Kryo 序列化库。

我已经将对象序列化到数据库中FieldSerializer。现在,我想向序列化类添加几个字段,并获得与它们的向后兼容性。

这可能吗?最好的方法是什么?

我尝试将反序列化器切换到TaggedFieldSerializer,但并不奇怪,这不起作用(Encountered unregistered class ID:)。

那么有没有办法使用具有附加字段的同一类来反序列化这些对象?


更新 1

如果它不明显,我想避免从数据库中删除所有以前序列化的对象。

0 投票
0 回答
980 浏览

serialization - 使用 Kryo 进行 Avro 对象序列化的映射 - Spark

我有一个关于使用 kryo 进行特定 avro 序列化的问题。抱歉,如果这个问题看起来多余,但我没有找到简单的答案。

我已经将 Spark 配置为与 Kryo 一起运行,并且运行良好:Avro 生成的类使用自定义 KryoRegistrator 类进行了很好的序列化。我twitter.chill-avro也用包。

尽管如此,当我尝试序列化 aMap[String, MyAvroClass]时,使序列化工作的唯一方法是MyAvroClass扩展java.io.Serializable.

有人可以解释一下到底发生了什么,并告诉我如何 Map[..., AvroClass]用 kryo 注册吗?

谢谢

0 投票
1 回答
538 浏览

serialization - 使用 Kryo 和 Spark 序列化 Cassandra 表

我正在尝试使用 Apache Spark 测试 Kryo 序列化,以便测量有无序列化的执行时间,并将 kryo 对象流保存到磁盘以模拟 spark 下的缓存。

我设计的测试是将 Cassandra 表存储在序列化的 CassandraRDD 对象中。

生成 CassandraRDD 的 Scala 代码如下:

这段代码有效,但我怀疑 kvRDD,即 CassandraRDD 对象没有被序列化。

是否有关于什么可以和不能用 Kryo 序列化的规则?我如何用 kryo.register 注册这个类?

如果我尝试使用 kryo.register(ClassOf[CassandraRDD]) 注册,我在尝试执行时会收到以下错误:

请注意,我对 Scala 和 Kryo 非常陌生。

非常感谢你提前