2015-05-16 2 views
1

Прошу прощения, если этот вопрос глупо. Мне сложно получить то, что на самом деле означает. Когда я прочитал «Hadoop окончательное руководство», он говорит, что лучшим преимуществом avro является то, что генерация кода является необязательной в Avro. This link имеет программу для сериализации/десериализации avro с/без генерации кода. Может ли кто-нибудь помочь мне в понимании того, что означает/без генерации кода и реального контекста того же.Что означает генерация кода в avro-hadoop

ответ

2

Это не глупый вопрос - на самом деле это очень важный аспект Avro.

С кода поколения, как правило, означает, что до того компиляции вашего приложения Java, у вас есть Avro схема доступна. Вы, как разработчик, будете использовать компилятор Avro для создания класса для каждой записи в схеме, и вы используете эти классы в своем приложении.

В ссылочной ссылке автор делает это: java -jar avro-tools-1.7.5.jar compile schema student.avsc, а затем непосредственно использует класс student_marks.

В этом случае, каждый экземпляр класса student_marks наследует от SpecificRecord, с пользовательскими методами для доступа к данным внутри (например, getStudentId() для извлечения student_id поля).

Без кода генерация кода обычно означает, что ваше приложение не имеет какой-либо конкретной необходимой схемы (например, оно может обрабатывать разные типы данных).

В этом случае нет класса student, но вы все равно можете читать записи Avro в контейнере Avro. У вас не будет экземпляров student, но экземпляры GenericRecord. Не будет никаких полезных методов, таких как getStudentId(), но вы можете использовать методы get("student_marks") или get(0).

Часто, используя определенные записи с генерированием кода, легче читать, проще сериализовать и десериализовать, но общие записи обеспечивают большую гибкость, когда точная схема записей, которые вы хотите обработать, во время компиляции неизвестна.

Полезный способ думать об этом - это разница между хранением некоторых данных в полезной рукописной структуре POJO по сравнению с Object[]. Первое из них гораздо легче разрабатывать, но последнее необходимо, если типы и количество данных являются динамическими или неизвестными.

Смежные вопросы