В чем причина наличия записываемых классов-оболочек в Hadoop MapReduce для типов Java?
Мне кажется, что org.apache.hadoop.io.serializer.Serialization
может быть написан для сериализации типов Java напрямую в том же формате, в который классы-обертки сериализуют тип. Таким образом, Mappers и Reducers не должны иметь дело с классами-обертками.
1 ответ
Ничто не мешает вам изменить сериализацию, чтобы использовать другой механизм, такой как интерфейс Java Serializable или что-то вроде thrift, буферов протокола и т. Д.
На самом деле, Hadoop поставляется с (экспериментальной) реализацией сериализации для объектов Java Serializable - просто настройте фабрику сериализации для ее использования. Механизм сериализации по умолчанию WritableSerialization
, но это можно изменить, установив следующее свойство конфигурации:
io.serializations=org.apache.hadoop.io.serializer.JavaSerialization
Имейте в виду, однако, что все, что ожидает записи (форматы ввода / вывода, разделители, компараторы) и т. Д., Должно быть заменено версиями, которые могут быть переданы Serializable
экземпляр, а не Writable
пример.
Еще несколько ссылок для любопытного читателя:
- http://www.tom-e-white.com/2008/07/rpc-and-serialization-with-hadoop.html
- Каковы связи и различия между Hadoop Writable и java.io.serialization? - Этот вопрос кажется похожим на тот, который вы задаете, и у Тарика есть хорошая ссылка на тему, в которой Даг Каттинг объясняет обоснование использования Writables над Serializables.