Hadoop - Как перейти от реализации доступного для записи интерфейса для использования объекта Avro?
Я использую Hadoop для преобразования файлов JSON в файлы CSV для доступа к ним с помощью Hive.
В настоящее время Mapper заполняет собственную структуру данных, анализируя JSON с помощью JSON-Smart. Затем редуктор считывает этот объект и записывает его в файл, разделенный запятыми. Чтобы сделать это быстрее, я уже реализовал доступный для записи интерфейс в структуре данных...
Теперь я хочу использовать Avro для объекта структуры данных, чтобы иметь большую гибкость и производительность. Как я мог изменить свои классы, чтобы заставить их обмениваться объектами Avro вместо доступных для записи?
1 ответ
Hadoop предлагает подключаемый механизм сериализации через SerializationFactory
,
По умолчанию Hadoop использует WritableSerialization
класс для обработки десериализации классов, которые реализуют Writable
интерфейс, но вы можете зарегистрировать пользовательские сериализаторы, которые реализуют Serialization
интерфейс, установив свойство конфигурации Hadoop io.serializations
(список классов CSV, которые реализуют интерфейс сериализации).
Avro имеет реализацию Serialization
интерфейс в AvroSerialization
класс - так что это будет класс, который вы настраиваете в io.serializations
имущество.
Avro на самом деле имеет целую кучу вспомогательных классов, которые помогают вам писать задания Map / Reduce для использования Avro в качестве ввода / вывода - в исходнике есть несколько примеров (Git copy)
Я не могу найти хорошую документацию для Avro & Map Reduce в данный момент, но я уверен, что есть и другие хорошие примеры.