В чем причина наличия записываемых классов-оболочек в 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 пример.

Еще несколько ссылок для любопытного читателя:

Другие вопросы по тегам