问题标签 [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 投票
0 回答
539 浏览

scala - Scala酸洗:我自己的班级的简单自定义酸洗器?

我正在尝试在我的 Scala NLP(自然语言处理)应用程序中挑选一些结构相对简单但创建速度较慢的类。因为有很多数据,所以需要pickle和esp。快速解开,不会膨胀。Java 序列化在这方面显然很糟糕。我知道 Kryo,但我从未使用过它。我也遇到过 Apache Avro,它看起来很相似,但我不太确定为什么它通常不被称为合适的解决方案。也不是 Scala 特定的,我看到有一个名为 Scala Pickling 的特定于 Scala 的包。不幸的是,它几乎没有所有文档,我不确定如何创建自定义pickler。

我在这里看到一个问题:

Scala Pickling:为嵌套结构编写自定义pickler / unpickler

这个问题仍然缺少一些上下文,而且与为 Kryo 或 Avro 给出的示例相比,创建自定义pickler 的样板文件看起来非常多。

这是我需要序列化的一些类:

我将如何以使用尽可能少的样板的方式创建自定义选择器/取消选择器(因为我有许多其他需要类似处理的类)?

谢谢!

0 投票
1 回答
2251 浏览

scala - 在 twitter chill 中处理案例类(Scala 接口到 Kryo)?

Twitter-chill 看起来是一个很好的解决方案,可以解决如何在 Scala 中有效地序列化而不需要过多的样板。

但是,我没有看到他们如何处理案例类的任何证据。这只是自动工作还是需要做一些事情(例如创建一个零参数构造函数)?

我对 Scoobi 中内置的序列化机制有一些经验WireFormat,它是一个类似于 Scalding 的 Scala Hadoop 包装器。他们为案例类提供了最多 22 个参数的序列化器,这些参数使用 apply 和 unapply 方法,并对这些函数的参数进行类型匹配以检索类型。(这在 Kryo/chill 中可能没有必要。)

0 投票
1 回答
475 浏览

serialization - 在 Storm 的storm.yaml 中注册自定义序列化程序时抛出异常

我通过以下方式在 Storm 的 conf/storm.yaml 中为一个类注册了一个自定义序列化程序:

topology.kryo.register:
      - custom.Car: custom.MyCarSerializer

当我通过输入“bin/storm nimbus”启动storm时,抛出异常:



如果没有我添加的这些注册,Storm 可以正常运行,所以我确定抛出异常是因为我在 conf/storm.yaml 中添加的注册,而不是 conf/storm.yaml 中的任何其他配置。我猜可能有一些格式错误,Storm 无法正确解析 conf/storm.yaml。但是我检查了我添加的行,例如,1)“-custom.Car:custom.MyCarSerializer”之前没有选项卡,而是空格;2) “-custom.Car:”后面有一个空格。但这并不能解决问题。谁有类似的问题,你是如何解决的?

我storm的版本是0.9.0.1,我在远程模式下运行它。

0 投票
1 回答
1599 浏览

java - 使用 Kryo 反序列化包含一些不可反序列化对象的数组(挽救可反序列化的部分)

背景

我正在尝试以这样一种方式编写 Kryo 反序列化:如果一个对象数组包含一些无法反序列化的对象(由于代码更改),那么数组中的这些引用将变为 null 而不是抛出异常;允许回收对象的其余部分。我以前一直在使用 Java 的内置序列化,并且在其中我已经能够通过在数组中的每个项目之间写入一个“已知良好”的整数来实现这一点,然后在发生错误时在流中查找它以找到开始下一个对象。这详细介绍了反序列化包含一些不可反序列化对象的数组(挽救可反序列化部分)的问题。

出于效率的原因,我现在已经转移到 Kryo 序列化并尝试重新创建这种方法,但是在 Kryo 中,这种错误恢复似乎可以工作一次,但之后它就不能正确恢复。

我试过的

在序列化过程中,我试图END_OF_APPLE_MAGIC在 s 数组中的每个对象之间写入一个已知良好的整数() 。Apple在反序列化过程中,当BadApple找到无法反序列化的 a 时,将其替换为 a ErrorApple(类比越来越弱),并END_OF_APPLE_MAGIC搜索 a 以查找下一个苹果的位置。如果BadApple数组中有一个并且BadApple不是第一个条目,则此方法有效。但是如果数组中有超过 1 个BadApple或第一个AppleBadApple

问题

如何挽救其中只有一些对象可反序列化的 Kyro 序列化数组?ErrorApple从而获得一个包含不可反序列化部分的条目的数组。在我的数组中,我在单个数组中有多个对同一对象的引用,必须在反序列化过程中保留这些引用。

所以进入序列化我有

我想要从反序列化中出来(因为 badApple 已经改变并且不能反序列化

我希望这可以提供一种后备方案,在这种情况下无法实现向后兼容性,或者删除了对我之前安装的程序的第 3 方修改

详细分析

本节概述了现有程序失败的方式。

一般来说

  • BadApple数组中第一个位置以外的单个位置将正常运行
  • 数组中第一个位置的ABadApple将导致下一次Apple正确读取,然后ErrorApples从那时起(即使是好的Apples)
  • 在超过 1个的情况下,第二个之后的BadApple第一个 good将正确读取,但可能会在数组中向前移动,然后从那时起(即使是 good s)。数组末尾会有一个并且可能有空条目。AppleBadAppleErrorApplesAppleKryoException: Buffer underflow

我使用的输入和输出如下所示:

0 投票
1 回答
267 浏览

java - Java 进程在耗尽系统内存后被杀死。为什么?

我正在使用 Oracle Java 在 Ubuntu 12.04.3 x64 VPS 上运行 Java 应用程序。几分钟后,该进程被操作系统杀死:“killed”出现在控制台中。

在崩溃之前,使用 TOP(几千兆字节的虚拟内存)可以看到内存使用过多。为了检查泄漏,我安装了 Java VisualVM 并通过 jstatd 远程连接到它。看不到泄漏迹象:

  • 堆大小:10 MB
  • 永久代空间大小:20 MB
  • 主题:5
  • 加载的课程:815

几次尝试后,hs_err_pid7071.loghs_err_pid7057.log出现在应用程序目录中(链接)。

该应用程序使用了一些本机库。

我跑 jcmd 8749 VM.native_memory detail了,得到了这个结果。VM 当时使用了大约 2 GB 的内存。

删除此行会使泄漏消失:

此方法的文档

0 投票
3 回答
7427 浏览

apache-spark - aparch 火花,NotSerializableException:org.apache.hadoop.io.Text

这是我的代码:

lineB 运行良好,但 lineA 显示:org.apache.spark.SparkException: Job aborted: Task not serializable: java.io.NotSerializableException: org.apache.hadoop.io.Text

我尝试使用 Kryo 来解决我的问题,但似乎没有任何改变:

谢谢!!!

0 投票
1 回答
964 浏览

java - 如何通过使用接口使用 Kryo 序列化/反序列化对象

是否可以通过注册接口而不是创建类来使用 Kryo 序列化/反序列化对象?

在concreate中,我需要序列化一个Path定义为接口的Java 7对象。

我尝试编写一个序列化程序,将路径 URI 保存为字符串并在读取反序列化期间重新创建它。但事实证明,我的序列化编写器方法从未被 Kryo 调用过。

这是我的(Groovy)代码:

知道如何使用 Kryo 注册用于序列化的接口吗?

谢谢

0 投票
0 回答
760 浏览

java - Java Kryo 奇怪的行为取决于字符串长度

我正在使用 Kryo 2.22 库将对象序列化到文件中(我使用 UnsafeInput/Output 来提高性能)。

我的对象包含许多字段,包括 1 个字符串。当此字符串最多包含 ~35 个字符时,没问题。一旦我将其加倍到 ~70 个字符,从文件反序列化时会出现以下异常:

当字符串的长度加倍时,我只是复制了初始内容(即没有引入额外的/特殊字符)。

因此,我的第一个猜测是它与增加的对象大小有关:我将 Kryo 缓冲区大小增加了一倍,但仍然抛出异常。

我现在已经浪费了几个小时来寻找问题,而且我越来越绝望。任何提示/建议将不胜感激!

非常感谢,托马斯

更新:我终于找到了问题:我正在序列化一个子类并反序列化父类。没有帮助的是 Kryo 不一致地抛出异常(在这种情况下,它取决于字符串的大小)

0 投票
1 回答
444 浏览

java - kryo 无法序列化 org.jgrapht.graph.SimpleDirectedGraph

尝试序列化 SimpleDirectedGraph 时出现以下错误:

我对此类错误的 Internet 搜索返回了很多人建议将用户更新到 ASM 4.0 库。我正在使用 Kryo 2.2 All,其中包括 ASM 4.0 库。为了以防万一,我还尝试单独包含 ASM 4 库,但没有运气。

我尝试过序列化更简单的对象,例如 ArrayList。那些很好。我不清楚为什么 kryo 无法序列化这个图形类。有人有想法吗?

更新: 由于我正在使用图表,因此我尝试实现 kryo 的实验性“延续”分支https://github.com/EsotericSoftware/kryo/issues/103

不幸的是,我仍然收到同样的错误。

更新:我认为诀窍可能是使用不同类型的序列化程序。不幸的是,我似乎找不到一个可以与 SimpleDirectedGraph 一起使用的。BeanSerializer 只序列化第一个对象层。嵌套对象似乎没有被序列化。其他序列化程序只是抛出与 FieldSerializer 相同的错误。是否有人们通常与图表一起使用的序列化程序?

0 投票
1 回答
1780 浏览

java - KryoNet:连接后客户端立即断开连接

这似乎是一个流行的问题,但即使在花费大量时间进行故障排除后,我仍然无法找到解决方案。我希望有一个更新的解决方案。

我正在使用 KryoNet Java 网络库设置一个简单的服务器和客户端。我的问题是我的客户端在连接到服务器后立即断开连接。

这是我的代码:

服务器

客户

运行TheServerthen 后TheClient,我的控制台打印:

注意连接和断开之间的时间几乎是即时的,肯定小于我设置的连接超时时间。另请注意,我注释掉了该setKeepAliveTCP()方法,因为虽然我认为没有必要,但我将其插入以查看它是否有效。