Introdução à serialização do hadoop

O conceito

  1. A serialização de dados é converter um objeto ou estrutura de dados em um formato específico, para que possa ser transmitido na rede ou armazenado na memória ou em um arquivo.
  2. Desserialização é a operação oposta, o objeto é dados serializados. O foco da serialização de dados restaurada
  nos dados é a troca e transmissão de dados

Medida

  1. Tamanho dos dados após a serialização. Como os dados serializados precisam ser transmitidos pela rede ou armazenados na memória ou nos arquivos, quanto menor a quantidade de dados, menor o tempo necessário para armazenar ou transmitir
  2. O tempo e o consumo de CPU de serialização e desserialização da CPU.
  Se ele pode cruzar idiomas ou plataformas. Porque no desenvolvimento atual da empresa, um projeto geralmente usa linguagens diferentes para arquitetura e implementação. Então, em um sistema de rede heterogêneo, os dois lados da rede podem usar linguagens diferentes ou sistemas operacionais diferentes, por exemplo, Java é usado em uma extremidade e C ++ é usado na outra; ou Windows é usado em uma extremidade e o outro é usado na outra extremidade. É um sistema Linux e, dessa vez, exige que os dados serializados sejam analisados ​​e transmitidos entre diferentes idiomas e plataformas diferentes

Problemas com o mecanismo nativo de serialização / desserialização do Java

  1. A serialização nativa do Java não pode assumir a estrutura do objeto, o que resulta em uma grande quantidade de dados ao serializar vários objetos.No uso
  da serialização nativa do Java, o objeto é analisado e analisado de acordo com o formato especificado por Java. É um formato de bytecode, portanto, quando outros idiomas recebem esse objeto no momento, ele não pode ser analisado ou é mais difícil de analisar. Ou seja, o mecanismo de serialização nativo do Java não é usado em idiomas ou plataformas.

Estrutura de serialização comum (Avro)

  O conceito

    1. O Avro é uma estrutura de serialização de chamada e procedimento de procedimento remoto, desenvolvida no projeto Apache Hadoop
    2. Ele usa JSON para definir tipos de dados e protocolos de comunicação e usa formato binário compactado para serializar dados
    . Usado no Hadoop, ele pode fornecer um formato serializado para dados persistentes e um formato de telegrama para comunicação entre nós do Hadoop e de programas clientes para serviços do Hadoop
    através do avro, serializados a cada vez, de acordo com o esquema (esquema ) Arquivos para serializar, podem melhorar o desempenho

  Funcionalidades

    1. Tipos de estrutura de dados avançados, 8 tipos de dados básicos e 6 tipos complexos
    2. Formulário binário compressível rápido
    3. Fornece arquivos de contêiner para dados persistentes
    4. Chamada de procedimento remoto RPC framework
    , função dinâmica simples de combinação de idioma, Depois de combinar o Avro e as linguagens dinâmicas, nem a leitura ou gravação de arquivos de dados nem o uso do protocolo RPC requerem geração de código, e a geração de código como uma otimização opcional vale a pena implementar apenas em linguagens estaticamente tipadas. A geração de código como uma otimização opcional só vale a pena implementar em uma linguagem de tipo estaticamente

  Tipo simples

Tipo de dados Explicação
nulo Sem valor
boleano Um booleano binário
int Número inteiro assinado de 32 bits
grandes Número inteiro assinado de 64 bits
flutuador Ponto flutuante de precisão única de 32 bits
em dobro Número de ponto flutuante de precisão dupla de 64 bits
bytes Sequência de bytes não assinados de 8 bits
corda Sequência de caracteres

 

 

 

 

 

 

 

 

  Tipo complexo

  1. O Avro define seis tipos de dados complexos, cada um com atributos exclusivos: A tabela a seguir descreve cada tipo de dado complexo:
  2. Cada tipo de dados complexo contém seus próprios atributos, entre os quais Alguns atributos são necessários e outros são opcionais
  3. Aqui, o valor padrão do atributo de campo no tipo de Registro precisa ser explicado Quando um atributo de campo nos dados da instância do Esquema do Registro não fornece dados da instância, o valor padrão é fornecido. Para valores específicos, consulte A tabela abaixo. O valor padrão do campo Union é determinado pelo primeiro Esquema na definição Union.

Tipo Atributos Explicação
Registro   classe
  nome  uma cadeia JSON que fornece o nome do registro (obrigatório).
  namespace  uma sequência JSON que qualifica o nome (opcional).
  doc  uma cadeia JSON que fornece documentação para o usuário deste esquema (opcional).
  apelido  uma matriz JSON de cadeias, fornecendo nomes alternativos para este registro (opcional).
  Campos  uma matriz JSON, listando os campos (obrigatório).
  nome  uma sequência JSON.
  tipo  um esquema / uma sequência de registros definidos.
  padrão  um valor padrão para o campo quando falta.
  ordem  ordenação deste campo.
Enums   enum
  nome  uma cadeia JSON que fornece o nome da enumeração (obrigatório).
  namespace  uma sequência JSON que qualifica o nome.
  doc  uma cadeia JSON que fornece documentação para o usuário deste esquema (opcional).
  apelido  uma matriz JSON de cadeias, fornecendo nomes alternativos para esta enumeração (opcional)
  símbolos  uma matriz JSON, listando símbolos, como sequências JSON (obrigatório). Todos os símbolos em uma enumeração devem ser exclusivos.
Matrizes    matriz
  Itens  o esquema dos itens da matriz.
Mapas    mapa
  valores  o esquema dos valores do mapa.
Fixo    fixo
  nome  uma string nomeando isso fixo (obrigatório).
  namespace  uma sequência que qualifica o nome.
  apelido  uma matriz JSON de cadeias, fornecendo nomes alternativos para essa enumeração (opcional).
  Tamanho um número inteiro, especificando o número de bytes por valor (obrigatório).
Sindicatos   uma matriz JSON

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  Ilustrar

Tipo Avro tipo json Exemplos
nulo nulo nulo
boleano boleano verdadeiro
int, longo inteiro 1
flutuador, duplo número 1.1
bytes corda "\ u00FF"
corda corda "foo"
registro objeto {"a": 1}
enum corda "FOO"
matriz matriz [1]
mapa objeto {"a": 1}
fixo corda "\ u00ff"

 

 

 

 

 

 

 

 

  Exemplos de uso

    Arquivo POM

<projeto xmlns = "http://maven.apache.org/POM/4.0.0" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" 
         xsi: schemaLocation = "http: / /maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> 
    <modelVersion> 4.0.0 </modelVersion> 

    <groupId> com.blb < / groupId> 
    <artifactId> avro </artifactId> 
    <versão> 0.0.1-SNAPSHOT </version> 
    <packaging> jar </packaging> 

    <dependências> 
        <dependência> 
            <groupId> org.apache.avro </groupId> 
            < artifactId> avro </artifactId> 
            <versão> 1.8.2 </ versão>
        </dependency> 
        <dependency> 
            <groupId> org.apache.avro </groupId>
            <artifactId> avro-tools </artifactId> 
            <versão> 1.8.2 </version> 
        </dependency> 
        <dependência> 
            <groupId> org.apache.avro </groupId> 
            <artifactId> avro-maven-plugin </ artifactId > 
            <version> 1.8.2 </version> 
        </dependency> 
        <dependency> 
            <groupId> org.apache.avro </groupId> 
            <artifactId> avro-compiler </artifactId> 
            <version> 1.8.2 </version> 
        </dependency> 
          <dependency> 
            <groupId> org.apache.avro </groupId>
            <artifactId> avro-ipc </artifactId> 
            <versão> 1.8.2 </version>
        </dependency> 
    </dependencies> 
    <build> 
        <plugins>
            <plugin> 
                <groupId> org.apache.maven.plugins </ groupId> 
                <artifactId> maven-compiler-plugin </ artifactId> 
                <versão> 3.1 </ version> 
                <configuration> 
                    <! - de um modo geral, destino e destino A fonte é consistente, mas às vezes, para permitir que o programa seja executado em outras versões do jdk (para o jdk de destino da versão baixa, o código-fonte não pode usar a sintaxe que não é suportada no jdk da versão baixa), haverá um destino diferente do código-fonte Situação-> 
                    <source> 1.8 </ source> <! - A versão do JDK usada pelo código-fonte-> 
                    <target> 1.8 </ target> <! - A versão compilada do arquivo de classe de destino que precisa ser gerada-> 
                    < codificação> UTF-8 </ codificação> <! - codificação do conjunto de caracteres-> 
                </ configuração> 

            </ plugin> 
            <plugin>
                <groupId> org.apache.avro </groupId> 
                <artifactId> avro-maven-plugin </artifactId> 
                <version> 1.8.2 </version> 
                <executions> 
                    <execution> 
                        <phase> generate-sources </phase> 
                        <goals> 
                            <goal> esquema </goal> 
                        </goals> 
                        <configuração> 
                            <sourceDirectory> $ {project.basedir} / src / main / avro / </sourceDirectory> 
                            <outputDirectory> $ {project.basedir} / src / main / java / </outputDirectory>
                        </configuration>
                    </execution> 
                </executions> 
            </plugin>
            <plugin> 
                <groupId> org.apache.maven.plugins </groupId> 
                <artifactId> maven-compiler-plugin </artifactId> 
                <configuration> 
                    <source> 1.8 </source> 
                    <target> 1.8 </ target> 
                </configuration> 
            </plugin> 
        </plugins> 
    </build> 
</project>

 

 

 

 

 

 

uma cadeia JSON que fornece documentação para o usuário deste esquema (opcional).

Acho que você gosta

Origin www.cnblogs.com/zhan98/p/12709324.html
Recomendado
Clasificación