Big Data Road

Storm 序列化

  本文翻译至Storm官方Wiki, 欢迎转载,转载请注明出处:   初次翻译,英文好的同学,可以查看英文文档: https://github.com/nathanmarz/storm/wiki/Serialization
    本文是介绍关于Storm 0.6.0及以上版本的序列化系统,Storm 在之前版本使用了另外一套序列化系统。
    Tuple可以包含任何类型的对象。由于Storm是一个分布式系统,它需要知道任务之间传递对象时,怎样序列化和反序列化对象
    Storm使用Kryo来进行序列化。 Kryo是一个灵活和快速的的序列化库,序列化对象较小。默认情况下,Storm可以序列化的原始类型,字符串,字节数组的 ArrayList,HashMap,HashSet和Clojure的集合类型。如果你想在你的元组使用另一种类型,你需要注册一个自定义序列化。

动态类型
Tuple中的字段没有进行类型声明。你把对象放到Fields里,Storm
动态序列化对象。
在我们获得序列化接口之前,让我们花点时间理解Storm 的Tuple 为什么是动态类型。
添加静态类型的到Tuple 的Fileds,将会给Storm的API增加大量的复杂性。例如,Hadoop,静态类型的键和值,在用户使用时,需要的很多注释。 Hadoop的API使用起来比较麻烦,“类型安全”是不值得的。动态类型是简单容易使用。
很难用一种合理的静态方式来统计Storm的Tuples。假设一个Bolt订阅了多个流,这些流的Tuple可能在Fields上有不同的类型,当一个Bolt在执行阶段接受Tuple,这些Tuple可能来自于任何流,
还有可能使任何类型的组合。可能有一些反射魔法,你可以为每一个被Bolt
订阅的Tuple流定义不同的方法,但是
,但简单,直接的方法是动态类型。
最后,使用动态类型的另一个原因是Storm可以以一种简单直接的方式来使用类似于Clojure和JRuby的动态类型语言
自定义序列化
如前所述,Storm使用Kryo
来进行序列化
要实现自定义的序列化,您需要注册新的序列化与Kryo。强烈建议您通过Kryo的主页阅读理解它是如何处理自定义序列。

添加自定义的序列化是在Topology的配置属性“topology.kryo.register”完成的。它需要一个注册的清单,其中每个登记可以采取以下两种形式之一:

1、 需要注册登记的类的名称。在这种情况下,Storm将使用Kryo的FieldsSerializer来序列化类。这可能是最佳的类,也可能不是 - 更多细节见Kryo文档。
2、 映射下类的名字来注册登记com.esotericsoftware.kryo.Serializer实施。
让我们来看看一个例子。
topology.kryo.register:  
- com.mycompany.CustomType1
- com.mycompany.CustomType2: com.mycompany.serializer.CustomType2Serializer
- com.mycompany.CustomType3
com.mycompany.CustomType1com.mycompany.CustomType3 使用 FieldsSerializer 来进行序列化
com.mycompany.CustomType2 使用 com.mycompany.serializer.CustomType2Serializer 来进行序列化
注册序列化器的
的帮助。配置类有一个名为registerSerialization一个方法,在注册时添加到配置里
有更高阶的配置称为Config.TOPOLOGY_SKIP_MISSING_KRYO_REGISTRATIONS。如果设置为true,Storm将忽略任何已注册的,但在classpath中
没有自己的代码
可用的序列化。否则,Storm会引发错误时,它无法找到一个序列化。如果你运行多个群集上,每个人都有不同的序列化的拓扑结构,这是有用的。
但要声明所有在storm.yaml文件拓扑中所有的序列化。
Java序列化
Storm如果遇到一个类型,它没有一个序列化注册,它有可能使用Java序列化。如果对象不能被Java序列化程序序列,Storm会抛出一个错误。

Java序列化是极其昂贵的,无论是在CPU成本以及序列化的对象的大小。强烈建议您在Topology上生产环境之前注册定制序列。 Java序列化在处理Topology原型的时候就是这样的。

可以通过配置文件来关闭Java序列化功能,只需将Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION配置设置为false




posted on 2012-01-19 14:29 徐红星 阅读(2476) 评论(0)  编辑  收藏 所属分类: Storm


只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论