【问题标题】:Apache storm 0.93, Titan 0.5.4, Kryo 2.21 vs 2.22阿帕奇风暴 0.93,泰坦 0.5.4,Kryo 2.21 与 2.22
【发布时间】:2015-04-10 15:35:37
【问题描述】:

我正在使用 Storm 0.93 和 Titan 0.5.4。 Titan 与我的应用程序在同一个 VM 中运行,并与外部运行的 cassandra 数据库通信。

当我将拓扑部署到 Storm 时,其中一个螺栓使用 Titan 的 API 进行一些查询。我收到以下异常:com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 10.

这是因为 Titan 和 Storm 使用的 kyro 版本略有不同。 Titan 使用 2.22,storm 使用 2.21。

关于如何解决此问题的任何建议?

谢谢。

【问题讨论】:

  • 您可以手动使用不同的类加载器来处理不同版本的 kryo,也许 OSGi 在您的情况下很有用。您将有两个类加载器,一个带有每个版本的 kryo 和要转换的自定义代码。有点长,也许有更好的东西?

标签: apache-storm titan kryo


【解决方案1】:

我通过将 Storm 0.9.3 附带的 kryo-2.21.jar 替换为 kryo-2.22.jar 解决了这个确切的问题。我没有经历过更换这个罐子的任何不良副作用。我们已经在生产环境中无错误运行了几个月。

TL;DR
如果您使用 debain 软件包安装 Storm this project 可能会有所帮助。我已经提交了pull request 将项目升级到storm 0.9.3。在创建 debian 软件包之前,将 kryo-2.21.jar 替换为 kryo-2.22.jar

【讨论】:

  • 您的方法曾经有效,但现在我遇到了同样的错误@Curtis Allen,后来我尝试将两个版本的 kryo 放入 Storm lib 以找到一些新错误,但它没有显示任何错误 & 我的应用程序工作。我不知道发生了什么。
  • @Ajeesh 您的类路径中应该只有一个版本的 kryo。我的猜测是你有一个额外版本的 kryo 以某种方式添加。我建议您使用 ps -ef | grep kryo 之类的东西查看正在运行的 java 进程,并确保类路径中只有一个版本。
  • 我将 kryo 从我的应用程序的所有依赖项中排除,并在storm/lib 文件夹中使用kryo 2.22,但它显示了相同的错误。所以为了找到一些新的错误,我也放了 kryo 2.21,但不知何故它起作用了。我尝试只使用 kryo 2.21 但同样的异常“未注册的类 ID:10”。
猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多