Что такое система сериализации данных? - PullRequest
17 голосов
/ 21 марта 2010

согласно проекту Apache AVRO, «Avro - система сериализации».Говоря о системе сериализации данных, означает ли это, что avro - это продукт или API?

Кроме того, я не уверен, что такое система сериализации данных?На данный момент я понимаю, что это протокол, который определяет, как объект данных передается по сети.Может ли кто-нибудь помочь объяснить это интуитивно понятным образом, что людям с ограниченным опытом распределенных вычислений легче понять?

Заранее спасибо!

Ответы [ 2 ]

27 голосов
/ 22 марта 2010

Таким образом, когда Даг Каттинг писал Hadoop, он решил, что стандартный метод Java для сериализации объектов Java с использованием Java Object Serialization (Java Serialization) не отвечает его требованиям для Hadoop. А именно, эти требования были:

  1. Сериализация данных в компактный двоичный формат.
  2. Быть быстрым , как по производительности, так и по скорости, с которой это позволило передавать данные.
  3. Совместимость , так что другие языки легче подключаются к Hadoop.

Как он описал сериализацию Java:

Это выглядело большим и волосатым, и я думал, что нам нужно что-то худое и подлое

Вместо использования сериализации Java они написали свою собственную структуру сериализации. Основные проблемы с сериализацией Java заключались в том, что она записывает имя класса каждого объекта, сериализованного в поток, причем каждый последующий экземпляр этого класса содержит 5-байтовую ссылку на первый вместо имени класса.

Наряду с уменьшением эффективной полосы пропускания потока это вызывает проблемы со случайным доступом, а также с сортировкой записей в сериализованном потоке. Таким образом, сериализация Hadoop не записывает имя класса или требуемые ссылки и предполагает, что клиент знает ожидаемый тип.

Сериализация Java также создает новый объект для каждого десериализованного. Hadoop Writables, которые реализуют сериализацию Hadoop, можно использовать повторно. Таким образом, помогая улучшить производительность MapReduce, которая акцентирует сериализацию и десериализацию миллиардов записей.

Avro вписывается в Hadoop тем, что по-другому подходит к сериализации. Клиент и сервер обмениваются схемой, которая описывает поток данных. Это помогает сделать его быстрым, компактным и, что важно, облегчает смешивание языков.

Таким образом, Avro определяет формат сериализации, протокол для клиентов и серверов для передачи этих последовательных потоков и способ компактного сохранения данных в файлах.

Надеюсь, это поможет. Я думал, что немного истории Hadoop поможет понять, почему Avro является подпроектом Hadoop и с чем он может помочь.

0 голосов
/ 26 ноября 2014

Если вам нужно хранить в ограниченном файле информацию, такую ​​как сведения об иерархии или реализации структуры данных, и передавать эту информацию по сети, вы используете сериализацию данных. Это близко к пониманию формата XML или JSON. Преимущество заключается в том, что информация, переведенная в любой формат сериализации, может быть десериализована для регенерации классов, объектов, структур данных независимо от того, что было сериализовано.

actual implementation-->serialization-->.xml or .json or .avro --->deserialization--->imlementation in original form

Здесь - ссылка на список форматов сериализации. Прокомментируйте, если вам нужна дополнительная информация! :)

...