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 в данный момент, но я уверен, что есть и другие хорошие примеры.

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