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