AVRO - Visão geral
Para transferir dados em uma rede ou para seu armazenamento persistente, você precisa serializar os dados. Antes doserialization APIs fornecido por Java e Hadoop, temos um utilitário especial, chamado Avro, uma técnica de serialização baseada em esquema.
Este tutorial ensina como serializar e desserializar os dados usando Avro. Avro fornece bibliotecas para várias linguagens de programação. Neste tutorial, demonstramos os exemplos usando a biblioteca Java.
O que é Avro?
Apache Avro é um sistema de serialização de dados com neutralidade de idioma. Foi desenvolvido por Doug Cutting, o pai do Hadoop. Como as classes graváveis do Hadoop não possuem portabilidade de idioma, o Avro se torna bastante útil, pois lida com formatos de dados que podem ser processados por vários idiomas. Avro é a ferramenta preferencial para serializar dados no Hadoop.
Avro tem um sistema baseado em esquema. Um esquema independente de linguagem está associado a suas operações de leitura e gravação. Avro serializa os dados que possuem um esquema embutido. Avro serializa os dados em um formato binário compacto, que pode ser desserializado por qualquer aplicativo.
Avro usa o formato JSON para declarar as estruturas de dados. Atualmente, ele oferece suporte a linguagens como Java, C, C ++, C #, Python e Ruby.
Esquemas Avro
Avro depende muito de seu schema. Ele permite que todos os dados sejam gravados sem nenhum conhecimento prévio do esquema. Ele serializa rapidamente e os dados serializados resultantes são menores em tamanho. O esquema é armazenado junto com os dados do Avro em um arquivo para qualquer processamento posterior.
No RPC, o cliente e o servidor trocam esquemas durante a conexão. Esta troca ajuda na comunicação entre os mesmos campos nomeados, campos ausentes, campos extras, etc.
Os esquemas Avro são definidos com JSON que simplifica sua implementação em linguagens com bibliotecas JSON.
Como Avro, existem outros mecanismos de serialização no Hadoop, como Sequence Files, Protocol Buffers, e Thrift.
Comparação com Thrift e Buffers de protocolo
Thrift e Protocol Bufferssão as bibliotecas mais competentes com Avro. Avro difere dessas estruturas nas seguintes maneiras:
Avro oferece suporte a tipos dinâmicos e estáticos de acordo com os requisitos. Buffers de protocolo e Thrift usam linguagem de definição de interface (IDLs) para especificar esquemas e seus tipos. Esses IDLs são usados para gerar código para serialização e desserialização.
Avro é construído no ecossistema Hadoop. Buffers de Thrift e Protocol não são construídos no ecossistema Hadoop.
Ao contrário do Thrift e do Protocol Buffer, a definição do esquema do Avro está em JSON e não em qualquer IDL proprietário.
Propriedade | Avro | Thrift & Protocol Buffer |
---|---|---|
Esquema dinâmico | sim | Não |
Integrado ao Hadoop | sim | Não |
Esquema em JSON | sim | Não |
Não há necessidade de compilar | sim | Não |
Não há necessidade de declarar IDs | sim | Não |
Borda sangrando | sim | Não |
Características do Avro
Listados abaixo estão algumas das características proeminentes do Avro -
Avro é um language-neutral sistema de serialização de dados.
Ele pode ser processado por várias linguagens (atualmente C, C ++, C #, Java, Python e Ruby).
Avro cria formato binário estruturado que é compressible e splittable. Portanto, ele pode ser usado de maneira eficiente como entrada para tarefas Hadoop MapReduce.
Avro fornece rich data structures. Por exemplo, você pode criar um registro que contém uma matriz, um tipo enumerado e um sub-registro. Esses tipos de dados podem ser criados em qualquer idioma, podem ser processados no Hadoop e os resultados podem ser enviados para um terceiro idioma.
Avro schemas definido em JSON, facilite a implementação nas linguagens que já possuem bibliotecas JSON.
Avro cria um arquivo autoexplicativo denominado Avro Data File, no qual armazena dados junto com seu esquema na seção de metadados.
Avro também é usado em chamadas de procedimento remoto (RPCs). Durante o RPC, o cliente e o servidor trocam esquemas no handshake de conexão.
Trabalho Geral da Avro
Para usar o Avro, você precisa seguir o fluxo de trabalho fornecido -
Step 1- Crie esquemas. Aqui você precisa projetar o esquema Avro de acordo com seus dados.
Step 2- Leia os esquemas em seu programa. Isso é feito de duas maneiras -
By Generating a Class Corresponding to Schema- Compile o esquema usando Avro. Isso gera um arquivo de classe correspondente ao esquema
By Using Parsers Library - Você pode ler diretamente o esquema usando a biblioteca de analisadores.
Step 3 - Serialize os dados usando a API de serialização fornecida para Avro, que se encontra no package org.apache.avro.specific.
Step 4 - Desserialize os dados usando a API de desserialização fornecida para Avro, que se encontra no package org.apache.avro.specific.