Comenzando con la serialización hadoop

El concepto

  1. La serialización de datos es convertir un objeto o estructura de datos en un formato específico, para que pueda transmitirse en la red, o puede almacenarse en la memoria o en un archivo
  2. La deserialización es la operación opuesta, el objeto es datos serializados El enfoque de la serialización de datos restaurada
  en los datos es el intercambio y la transmisión de datos.

Medida

  1. Tamaño de datos después de la serialización. Debido a que los datos serializados deben transmitirse a través de la red o almacenarse en la memoria o los archivos, cuanto menor sea la cantidad de datos, menor será el tiempo necesario para almacenar o transmitir
  2. El tiempo y el consumo de CPU de la serialización y deserialización
  Si puede cruzar idiomas o plataformas. Porque en el desarrollo empresarial actual, un proyecto a menudo usa diferentes lenguajes para la arquitectura y la implementación. En un sistema de red heterogéneo, los dos lados de la red pueden usar diferentes lenguajes o diferentes sistemas operativos, por ejemplo, Java se usa en un extremo y C ++ se usa en el otro; o Windows se usa en un extremo y el otro en el otro. Es un sistema Linux, entonces esta vez requiere que los datos serializados sean analizados y transmitidos entre diferentes idiomas y diferentes plataformas.

Problemas con el mecanismo de serialización / deserialización nativo de Java

  1. La serialización nativa de Java no puede tomar la estructura del objeto, lo que resulta en una gran cantidad de datos al serializar múltiples objetos. Cuando se utiliza
  la serialización nativa de Java, el objeto se analiza y analiza según el formato especificado por Java. Es un formato de código de bytes, por lo que cuando otros idiomas reciben este objeto en este momento, no se puede analizar o es más difícil de analizar. Es decir, el mecanismo de serialización nativo de Java no se usa en idiomas o plataformas.

Marco de serialización común (Avro)

  El concepto

    1. Avro es un marco de llamada a procedimiento remoto y serialización de datos, desarrollado dentro del proyecto Apache Hadoop.
    2. Utiliza JSON para definir tipos de datos y protocolos de comunicación, y utiliza un formato binario comprimido para serializar datos
    . 3. Principalmente Utilizado en Hadoop, puede proporcionar un formato serializado para datos persistentes y un formato de telegrama para la comunicación entre los nodos Hadoop y desde los programas del cliente a los servicios de Hadoop a
    través de avro, serializado cada vez, de acuerdo con el esquema ) Archivos para serializar, pueden mejorar el rendimiento

  Caracteristicas

    1. Tipos de estructura de datos enriquecidos, 8 tipos de datos básicos y 6 tipos complejos
    2. Forma binaria comprimible rápida
    3. Proporcione archivos contenedor para datos persistentes
    4. Procedimiento remoto llame a la
    función de combinación de lenguaje dinámico simple de marco RPC , Después de combinar Avro y lenguajes dinámicos, ni leer ni escribir archivos de datos ni usar el protocolo RPC requiere la generación de código, y la generación de código como optimización opcional solo vale la pena implementarla en lenguajes estáticamente tipados. La generación de código como una optimización opcional solo vale la pena implementarla en un lenguaje de tipo estático

  Tipo simple

Tipo de datos Explicación
nulo Sin valor
booleano Un booleano binario
En t Entero con signo de 32 bits
largo Entero con signo de 64 bits
flotador Coma flotante de precisión simple de 32 bits
doble Número de coma flotante de doble precisión de 64 bits
bytes Secuencia de bytes sin signo de 8 bits
cuerda Secuencia de caracteres

 

 

 

 

 

 

 

 

  Tipo complejo

  1. Avro define seis tipos de datos complejos, cada uno de los cuales tiene atributos únicos. La siguiente tabla describe cada tipo de datos complejos
  2. Cada tipo de datos complejos contiene sus propios atributos, entre los cuales Algunos atributos son obligatorios y otros opcionales
  3. Aquí, se debe explicar el valor predeterminado del atributo de campo en el tipo de registro. Cuando un atributo de campo en los datos de instancia del esquema de registro no proporciona datos de instancia, se proporciona el valor predeterminado. Para valores específicos, consulte La tabla de abajo. El valor predeterminado del campo Unión está determinado por el primer Esquema en la definición de Unión.

Tipo Atributos Explicación
Grabar   clase
  nombre  una cadena JSON que proporciona el nombre del registro (requerido).
  espacio de nombres  una cadena JSON que califica el nombre (opcional).
  Doc  una cadena JSON que proporciona documentación al usuario de este esquema (opcional).
  alias  una matriz JSON de cadenas, que proporciona nombres alternativos para este registro (opcional).
  campos  una matriz JSON, que enumera los campos (obligatorios).
  nombre  una cadena JSON
  tipo  un esquema / una cadena de registro definido.
  defecto  Un valor predeterminado para el campo cuando falta.
  orden  ordenamiento de este campo.
Enumeraciones   enumeración
  nombre  una cadena JSON que proporciona el nombre de la enumeración (obligatorio).
  espacio de nombres  una cadena JSON que califica el nombre.
  Doc  una cadena JSON que proporciona documentación al usuario de este esquema (opcional).
  alias  una matriz JSON de cadenas, que proporciona nombres alternativos para esta enumeración (opcional)
  símbolos  una matriz JSON, que enumera símbolos, como cadenas JSON (obligatorio). Todos los símbolos en una enumeración deben ser únicos.
Matrices    formación
  artículos  El esquema de los elementos de la matriz.
Mapas    mapa
  valores  El esquema de los valores del mapa.
Fijo    fijo
  nombre  una cadena nombrando esto fijo (requerido).
  espacio de nombres  Una cadena que califica el nombre.
  alias  una matriz JSON de cadenas, que proporciona nombres alternativos para esta enumeración (opcional).
  Talla un número entero, que especifica el número de bytes por valor (requerido).
Sindicatos   una matriz JSON

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  Ilustrar

Tipo avro tipo json Ejemplos
nulo nulo nulo
booleano booleano cierto
int, largo entero 1
flotador, doble número 1.1
bytes cuerda "\ u00FF"
cuerda cuerda "foo"
grabar objeto {"a": 1}
enumeración cuerda "FOO"
formación formación [1]
mapa objeto {"a": 1}
fijo cuerda "\ u00ff"

 

 

 

 

 

 

 

 

  Ejemplos de uso

    Archivo POM

<project 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> 
    <version> 0.0.1-SNAPSHOT </version> 
    <packaging> jar </packaging> 

    <dependencies> 
        <dependency> 
            <groupId> org.apache.avro </groupId> 
            < artifactId> avro </artifactId> 
            <versión> 1.8.2 </version>
        </dependency> 
        <dependency>  
            <groupId> org.apache.avro </groupId>
            <artifactId> avro-tools </artifactId>
            <version> 1.8.2 </version> 
        </dependency> 
        <dependency> 
            <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> 
            <version> 1.8.2 </version>
        </dependency> 
    </dependencies> 
    <build> 
        <plugins> 
            <plugin> 
                <groupId> org.apache.maven.plugins </ groupId> 
                <artifactId> maven-compiler-plugin </ artifactId> 
                <version> 3.1 </ version> 
                <configuration> 
                    <! -En general, el destino y la fuente son consistentes, pero a veces, para permitir que el programa se ejecute en otras versiones de jdk (para la versión baja de destino jdk, el código fuente no puede usar la sintaxis que no es compatible con la versión baja jdk) , Habrá casos en los que el destino sea diferente del 
                    origen- > <source> 1.8 </ source> <! - Versión JDK utilizada por el código fuente-> 
                    <target> 1.8 </ target> <! - Clase de destino que se generará La versión compilada del archivo-> 
                    <codificación> UTF-8 </ codificación> <! - Codificación de juego de caracteres-> 
                </ configuration> 

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

 

 

 

 

 

 

una cadena JSON que proporciona documentación al usuario de este esquema (opcional).

Supongo que te gusta

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