问题标签 [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 回答
256 浏览

scala - Kryo:如何在 Scala 中使用 CollectionSerializer?

使用 CollectionSerializer 来写是很简单的,但是我如何反序列化字节数组。收藏系列。

我希望能够做这样的事情(给定界面):

或者

但我没有尝试编译。

提前致谢。

0 投票
3 回答
4037 浏览

java - 处理序列化框架的不兼容版本更改

问题描述

我们有一个 Hadoop 集群,我们在其上存储使用Kryo(序列化框架)序列化为字节的数据。我们用来执行此操作的 Kryo 版本已从官方版本 2.21 中分叉出来,以将我们自己的补丁应用到我们在使用 Kryo 时遇到的问题。当前的 Kryo 版本 2.22 也修复了这些问题,但有不同的解决方案。因此,我们不能只更改我们使用的 Kryo 版本,因为这意味着我们将无法再读取已经存储在 Hadoop 集群上的数据。为了解决这个问题,我们想运行一个 Hadoop 作业

  1. 读取存储的数据
  2. 反序列化使用旧版本 Kryo 存储的数据
  3. 用新版本的 Kryo 序列化恢复的对象
  4. 将新的序列化表示写回我们的数据存储

问题在于,在一个 Java 程序中(更准确地说,在 Hadoop 作业的映射器类中)使用同一类的两个不同版本并非易事。

简而言之问题

如何在一个 Hadoop 作业中使用同一序列化框架的两个不同版本反序列化和序列化对象?

相关事实概述

  • 我们将数据存储在 Hadoop CDH4 集群上,使用 Kryo 版本 2.21.2-ourpatchbranch 进行序列化
  • 我们希望使用与我们的版本不兼容的 Kryo 版本 2.22 对数据进行序列化
  • 我们使用 Apache Maven 构建我们的 Hadoop 作业 JAR

可能(和不可能)的方法

(1) 重命名包

我们想到的第一种方法是使用Maven Shade 插件的重定位功能重命名我们自己的 Kryo 分支中的包,并使用不同的工件 ID 发布它,以便我们可以在转换作业项目中依赖这两个工件。然后,我们将实例化一个旧版本和新版本的 Kryo 对象,并使用旧版本进行反序列化,使用新版本再次序列化该对象。

问题
我们没有在 Hadoop 作业中明确使用 Kryo,而是通过我们自己的库的多层访问它。对于这些库中的每一个,都需要

  1. 重命名涉及的包和
  2. 创建具有不同组或工件 ID 的版本

为了让事情变得更加混乱,我们还使用了其他 3rd 方库提供的 Kryo 序列化程序,我们必须为此做同样的事情。


(2) 使用多个类加载器

我们提出的第二种方法是在包含转换作业的 Maven 项目中完全不依赖 Kryo,而是从存储在 Hadoop 的分布式缓存中的每个版本的 JAR 中加载所需的类。序列化一个对象看起来像这样:

问题
尽管这种方法可以用于实例化未配置的 Kryo 对象并序列化/恢复某些对象,但我们使用了更复杂的 Kryo 配置。这包括几个自定义序列化程序、注册的类 id 等等。例如,我们无法找到一种方法来为类设置自定义序列化程序而不会得到 NoClassDefFoundError - 以下代码不起作用:

最后一行抛出一个

因为URISerializer该类引用了 Kryo 的Serializer类并尝试使用它自己的类加载器(即 System 类加载器)来加载它,它不知道Serializer该类。


(3) 使用中间序列化

目前最有前途的方法似乎是使用独立的中间序列化,例如使用Gson或类似方法的 JSON,然后运行两个单独的作业:

  1. kryo:2.21.2-ourpatchbranch 在我们的常规存储中 -> JSON 在临时存储中
  2. 临时存储中的 JSON -> 我们常规存储中的 kryo:2-22

问题
这个解决方案的最大问题是它大约使处理的数据的空间消耗增加了一倍。此外,我们需要另一种序列化方法,它对我们所有的数据都没有问题,我们需要首先对其进行调查。

0 投票
1 回答
178 浏览

apache-flex - jboss memcacehd kryo flex

我有一个 jboss 5.1 AS,我在其中尝试使用 memcached 和 kryo 序列化实现会话复制。一切正常,但我的应用程序中有一个页面,它的左侧有一些弹性功能。当我在 GUI 中单击此页面时,kryo 序列化失败并显示以下堆栈跟踪:

我已经被困了很多天,无法解决问题。请帮忙

0 投票
1 回答
4362 浏览

scala - 你如何使用 Kryo 反序列化不可变集合?

你如何使用Kryo反序列化不可变集合?除了我所做的事情之外,我还需要注册一些东西吗?

这是我的示例代码

它抛出异常

0 投票
1 回答
607 浏览

serialization - How do I setup Kryo as a substitute for Writable as a serialization framework in HDFS/Hadoop

How do I setup Kryo as my serialization framework in place of Writable?

Sub Question: How do I set up my objects to be serialized/deserialized as we do for Writable?

0 投票
3 回答
679 浏览

java - Kryo - 如何保持服务器运行并等待请求

我使用Kryo-net发送和接收消息。在服务器端,我打开新线程并设置服务器,问题是线程在代码末尾结束,因此没有真正的请求侦听器。

0 投票
1 回答
1335 浏览

scala - 使用 Cassandra 的 Spark:无法注册 spark.kryo.registrator

目前,当我尝试在独立模式下使用 Cassandra 运行 Spark 时遇到一些问题。

最初,我在 SparkContext 中使用参数 mater="local[4]" 成功运行。

然后,我尝试进入独立模式。我使用的是:

Ubuntu:12.04 Cassandra:1.2.11 Spark:0.8.0 Scala:2.9.3 JDK:Oracle 1.6.0_35 Kryo:2.21

起初,我收到“未读块”错误。作为其他主题的建议,我更改为使用 Kryo 序列化程序并添加 Twitter Chill。然后,我在控制台中收到“注册 spark.kryo.registrator 失败”和如下异常:

之前也有人在spark中遇到过EOFException,答案是没有正确注册registrator。我按照 Spark 指南注册了 Registrator。注册人如下:

我也像指南一样设置属性。

谁能给我一些提示我做错了什么?谢谢。

0 投票
1 回答
1280 浏览

java - kryo的核心技术是什么?

Kryo真的又快又小。这里有什么秘密?

我已经深入研究了它的代码一段时间,但仍然需要一些指导。

谢谢。

0 投票
0 回答
262 浏览

build - 如何构建akka-protostuff-serialization?

我通过java使用akka(akka-2.2.1),我不熟悉scala或sbt。我需要将序列化程序更改为以下之一。

https://github.com/romix/akka-protostuff-serialization

https://github.com/romix/akka-kryo-serialization

如何构建这些?

0 投票
1 回答
2703 浏览

serialization - 使用 Kryo 进行集合序列化

我正在尝试使用kryo序列化和反序列化 java 集合。

序列化方法如下所示:

现在我想编写反序列化方法,但这样做有困难。基本上 CollectionSerializer 有一个 read 方法,但我不明白如何使用它(据我所知,文档很差)。

有任何想法吗?