Apache Arrow: formato de intercambio de datos de memoria multiplataforma

Apache Arrow: formato de intercambio de datos de memoria multiplataforma

Big data de memoria pasada Big data de memoria pasada
Apache Arrow es un nuevo proyecto de código abierto de la Fundación Apache, y también es un proyecto de alto nivel. Su propósito es acelerar la operación de proyectos de análisis de big data como una capa de datos multiplataforma. Proporciona especificaciones para el procesamiento y la interacción del almacenamiento de memoria en columnas. Actualmente, los desarrolladores de 13 comunidades, incluidas Calcite, Cassandra, Drill, Hadoop, HBase, Ibis, Impala, Kudu, Pandas, Parquet, Phoenix, Spark y Storm, se han comprometido a convertirlo en un estándar de facto para proyectos de sistemas de big data.

Además de utilizar plataformas de big data como Hadoop como una plataforma económica de almacenamiento y procesamiento por lotes, los usuarios también valoran la escalabilidad y el rendimiento del sistema de análisis al aplicar el análisis de big data. En los últimos años, la comunidad de código abierto ha lanzado muchas herramientas para mejorar el ecosistema de análisis de macrodatos. Estas herramientas cubren todos los aspectos del análisis de datos, como el formato de almacenamiento en columnas (Parquet / ORC), la capa de computación en memoria (Drill , Spark, Impala y Storm) y una potente interfaz API (lenguaje Python y R). Arrow es la última incorporación, proporciona un formato de intercambio de datos de memoria multiplataforma y entre aplicaciones. Por ejemplo, en el Spark 3.0 recientemente lanzado, Arrow se ha utilizado para aumentar el rendimiento de SparkR en al menos un 40%. Vea que finalmente se lanzó la versión oficial de Apache Spark 3.0.0, y las características importantes están completamente analizadas.

Un medio importante para mejorar el rendimiento del análisis de big data es el diseño y procesamiento de datos en columnas. El procesamiento de datos en columnas nos permite aprovechar al máximo el potencial del hardware mediante la computación vectorial y SIMD. Apache Drill, el motor de consulta de big data, existe en columnas, ya sea en el disco duro o en la memoria, y Arrow se desarrolla a partir del formato de datos vectoriales de valor en Drill. Además de los datos en columnas, Apache Arrow también admite conjuntos de datos relacionales y dinámicos, lo que lo convierte en una opción de formato ideal para procesar datos como Internet de las cosas.

Las posibilidades que ofrece Apache Arrow al ecosistema de big data son infinitas. Con Apache Arrow como formato estándar de intercambio de datos en el futuro, se puede decir que la interactividad entre varios sistemas y aplicaciones de análisis de datos ha alcanzado un nuevo nivel. En el pasado, la mayoría de los ciclos de CPU se dedicaban a la serialización y deserialización de datos, pero ahora podemos lograr un intercambio de datos transparente entre diferentes sistemas. Esto significa que los usuarios ya no tienen que preocuparse por los formatos de datos al combinar diferentes sistemas. La siguiente figura muestra la diferencia entre el formato de almacenamiento de columnas y el formato de almacenamiento de filas:
Apache Arrow: formato de intercambio de datos de memoria multiplataforma

Comparación de ventajas antes y después de usar Apache Arrow

Antes del nacimiento de Apache Arrow, si los datos deben intercambiarse entre diferentes sistemas, tenían que manejarse de la siguiente manera
Apache Arrow: formato de intercambio de datos de memoria multiplataforma

Los problemas causados ​​por esto son los siguientes:

  • Cada sistema tiene su propio formato de memoria interna;
  • 70-80% de la CPU se desperdicia en el proceso de serialización y deserialización;
  • Se implementan funciones similares en múltiples proyectos y no existe un estándar único.

Después de usar Apache Arrow para la interacción de los datos del sistema en el proyecto, la arquitectura se convierte en la siguiente forma: Se
Apache Arrow: formato de intercambio de datos de memoria multiplataforma
puede ver que:

  • Todos los sistemas utilizan el mismo formato de memoria;
  • Evite la sobrecarga de comunicación entre sistemas;
  • Las funciones se pueden compartir entre proyectos (como el lector Parquet-to-Arrow)

Apache Arrow tiene las siguientes ventajas:

  • El diseño de la memoria en columnas puede hacer que la velocidad del acceso aleatorio alcance O (1). Este diseño de memoria es muy eficiente en procesadores modernos que procesan flujos de análisis y permiten la optimización SIMD (datos múltiples de entrada única); los desarrolladores pueden desarrollar algoritmos muy eficientes para procesar la estructura de datos de Apache Arrow;
  • Hace que la interacción de datos entre sistemas sea muy eficiente y evita el consumo de serialización y deserialización de datos;
  • Admite tipos de datos complejos.
    La razón por la que Apache Arrow puede hacer acceso aleatorio a los datos llega a O (1). Esto se debe a que Apache Arrow está optimizado para analizar datos estructurados, como los siguientes datos:

people = [
 {
   name: ‘mary’, age: 30,
   places_lived: [
     {city: ‘Akron’, state: ‘OH’},
     {city: ‘Bath’, state: OH’}
   ]
 },
 {
   name: ‘mark’, age: 33,
   places_lived: [
     {city: ‘Lodi’, state: ‘OH’},
     {city: ‘Ada’, state: ‘OH’},
     {city: ‘Akron’, state: ‘OH}
   ]
 }
]

Ahora suponga que necesitamos acceder al valor de people.places_lived.city. En Arrow, el acceso a los valores de la matriz se ve de la siguiente manera:

Apache Arrow: formato de intercambio de datos de memoria multiplataforma
Arrow registra el desplazamiento del campo places_lived y el campo de la ciudad, y podemos obtener el valor del campo a través de este desplazamiento. Porque Arrow registra el desplazamiento para que el acceso a los datos sea muy eficiente.

Sitio web oficial del proyecto Apache Arrow: http://arrow.apache.org/
Proyecto Apache Arrow Github: https://github.com/apache/arrow

Supongo que te gusta

Origin blog.51cto.com/15127589/2677604
Recomendado
Clasificación