2
在我看来,编写org.apache.hadoop.io.serializer.Serialization
可以直接以封装类将该类型序列化的相同格式序列化Java类型。这样Mappers和Reducers不必处理包装类。在Hadoop MapReduce for Java类型中使用Writable包装类的原因是什么?
在我看来,编写org.apache.hadoop.io.serializer.Serialization
可以直接以封装类将该类型序列化的相同格式序列化Java类型。这样Mappers和Reducers不必处理包装类。在Hadoop MapReduce for Java类型中使用Writable包装类的原因是什么?
没有什么能阻止你改变序列使用不同的机制,比如Java Serializable接口或类似的东西节俭,协议缓冲器等
事实上,Hadoop的附带了Java Serializable对象的(实验)序列化的实现 - 只需配置序列化工厂即可使用它。默认序列化机制是WritableSerialization
,但可以通过设置以下配置属性进行更改:但是,任何的期望一个可写(输入/输出格式,partitioners,比较器)等需要
io.serializations=org.apache.hadoop.io.serializer.JavaSerialization
请牢记替换为可以通过Serializable
实例而不是Writable
实例的版本。
为好奇的读者一些更多的链接:
是的,我知道我可以更改序列化实现,并且可写序列化格式更优。它仍然没有解释包装类的要求。哦,我认为这是我直接询问Hadoop创建者之一所能得到的最佳答案。 – user533020
我想我不明白你要求什么,当你说'包装类的要求' - 可写不是包装,它的接口表示对象符合一些'契约',并且对象知道如何序列化自己 –
我在说的是,每种Java类型都有Writable包装类(int - IntWritable,string - TextWritable等)。他们装饰Java类型以说明如何序列化它们。在编写映射器或简化器时,您必须提取/解包/调用'get'方法来获取输入Java类型,然后包装输出Java类型。所有这些似乎都没有必要。 – user533020