在我看来,可以编写org.apache.hadoop.io.serializer.Serialization
来直接以与包装类将类型序列化为相同的格式来序列化java类型。这样,Mappers 和Reducers 就不必处理包装类。
最佳答案
没有什么可以阻止您更改序列化以使用不同的机制,例如 java Serialized 接口(interface)或 thrift、protocol buffers 等。
事实上,Hadoop 附带了 Java Serializable 的(实验性)序列化实现。对象 - 只需配置序列化工厂即可使用它。默认序列化机制是 WritableSerialization
,但可以通过设置以下配置属性来更改:
io.serializations=org.apache.hadoop.io.serializer.JavaSerialization
但是请记住,任何需要可写的内容(输入/输出格式、分区器、比较器)等都需要替换为可以传递 Serialized
实例而不是 实例的版本>可写
实例。
为好奇的读者提供更多链接:
- http://www.tom-e-white.com/2008/07/rpc-and-serialization-with-hadoop.html
- What are the connections and differences between Hadoop Writable and java.io.serialization? - 这似乎与您所问的问题类似,Tariq 有一个很好的链接,其中 Doug Cutting 解释了使用 Writables over Serializables 背后的基本原理。
关于serialization - Hadoop MapReduce 中为 Java 类型提供可写包装类的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203661/