Таким образом, когда Даг Каттинг писал Hadoop, он решил, что стандартный метод Java для сериализации объектов Java с использованием Java Object Serialization (Java Serialization) не отвечает его требованиям для Hadoop. А именно, эти требования были:
- Сериализация данных в компактный двоичный формат.
- Быть быстрым , как по производительности, так и по скорости, с которой это позволило передавать данные.
- Совместимость , так что другие языки легче подключаются к Hadoop.
Как он описал сериализацию Java:
Это выглядело большим и волосатым, и я думал, что нам нужно что-то худое и подлое
Вместо использования сериализации Java они написали свою собственную структуру сериализации. Основные проблемы с сериализацией Java заключались в том, что она записывает имя класса каждого объекта, сериализованного в поток, причем каждый последующий экземпляр этого класса содержит 5-байтовую ссылку на первый вместо имени класса.
Наряду с уменьшением эффективной полосы пропускания потока это вызывает проблемы со случайным доступом, а также с сортировкой записей в сериализованном потоке. Таким образом, сериализация Hadoop не записывает имя класса или требуемые ссылки и предполагает, что клиент знает ожидаемый тип.
Сериализация Java также создает новый объект для каждого десериализованного. Hadoop Writables, которые реализуют сериализацию Hadoop, можно использовать повторно. Таким образом, помогая улучшить производительность MapReduce, которая акцентирует сериализацию и десериализацию миллиардов записей.
Avro вписывается в Hadoop тем, что по-другому подходит к сериализации. Клиент и сервер обмениваются схемой, которая описывает поток данных. Это помогает сделать его быстрым, компактным и, что важно, облегчает смешивание языков.
Таким образом, Avro определяет формат сериализации, протокол для клиентов и серверов для передачи этих последовательных потоков и способ компактного сохранения данных в файлах.
Надеюсь, это поможет. Я думал, что немного истории Hadoop поможет понять, почему Avro является подпроектом Hadoop и с чем он может помочь.