stringtranslate.com

Archivo RC

En los sistemas de gestión de bases de datos , el archivo de columnas de registros [1] o RCFile es una estructura de ubicación de datos que determina cómo almacenar tablas relacionales en clústeres de computadoras . Está diseñado para sistemas que utilizan el marco MapReduce . La estructura RCFile incluye un formato de almacenamiento de datos, un enfoque de compresión de datos y técnicas de optimización para la lectura de datos. Es capaz de cumplir con los cuatro requisitos de ubicación de datos: (1) carga rápida de datos, (2) procesamiento rápido de consultas, (3) utilización altamente eficiente del espacio de almacenamiento y (4) una fuerte adaptabilidad a patrones dinámicos de acceso a datos.

RCFile es el resultado de la investigación y los esfuerzos de colaboración de Facebook , la Universidad Estatal de Ohio y el Instituto de Tecnología Informática de la Academia China de Ciencias .

Resumen

Formato de almacenamiento de datos

Por ejemplo, una tabla en una base de datos consta de 4 columnas (c1 a c4):

Para serializar la tabla, RCFile realiza particiones de esta tabla primero horizontalmente y luego verticalmente, en lugar de solo hacerlo horizontalmente como en el DBMS orientado a filas (almacén de filas). La partición horizontal primero dividirá la tabla en varios grupos de filas según el tamaño del grupo de filas , que es un valor especificado por el usuario que determina el tamaño de cada grupo de filas. Por ejemplo, la tabla mencionada anteriormente se puede dividir en dos grupos de filas si el usuario especifica tres filas como el tamaño de cada grupo de filas.

Luego, en cada grupo de filas, RCFile divide los datos verticalmente como en un almacén de columnas. De esta manera, la tabla se serializará como:

 Grupo de Fila 1 Grupo de Fila 2 11, 21, 31; 41, 51; 12, 22, 32; 42, 52; 13, 23, 33; 43, 53; 14, 24, 34; 44, 54;

Compresión de datos de columnas

Dentro de cada grupo de filas, las columnas se comprimen para reducir el uso de espacio de almacenamiento. Dado que los datos de una columna se almacenan de forma adyacente, se puede detectar el patrón de una columna y, por lo tanto, se puede seleccionar el algoritmo de compresión adecuado para una alta tasa de compresión.

Beneficios de rendimiento

El almacenamiento en columnas es más eficiente cuando una consulta solo requiere un subconjunto de columnas, porque el almacenamiento en columnas solo lee las columnas necesarias de los discos, pero el almacenamiento en filas leerá una fila entera.

RCFile combina las ventajas del almacenamiento en filas y columnas mediante particiones horizontales y verticales. Con la partición horizontal, RCFile coloca todas las columnas de una fila en una sola máquina y, por lo tanto, puede eliminar los costos de red adicionales al construir una fila. Con la partición vertical, para una consulta, RCFile solo leerá las columnas necesarias de los discos y, por lo tanto, puede eliminar los costos de E/S locales innecesarios. Además, en cada grupo de filas, la compresión de datos se puede realizar mediante el uso de algoritmos de compresión utilizados en el almacenamiento en columnas .

Por ejemplo, una base de datos podría tener esta tabla:

Esta sencilla tabla incluye un identificador de empleado (EmpId), campos de nombre (Apellido y Nombre) y un salario (Salario). Este formato bidimensional existe solo en teoría; en la práctica, el hardware de almacenamiento requiere que los datos se serialicen en una forma u otra.

En los sistemas basados ​​en MapReduce, los datos normalmente se almacenan en un sistema distribuido, como Hadoop Distributed File System (HDFS) , y se pueden almacenar diferentes bloques de datos en diferentes máquinas. Por lo tanto, para el almacenamiento en columnas en MapReduce, se pueden almacenar diferentes grupos de columnas en diferentes máquinas, lo que introduce costos de red adicionales cuando una consulta proyecta columnas ubicadas en diferentes máquinas. Para los sistemas basados ​​en MapReduce, la ventaja del almacenamiento en filas es que no hay costos de red adicionales para construir una fila en el procesamiento de consultas, y la ventaja del almacenamiento en columnas es que no hay costos de E/S locales innecesarios cuando se leen datos de los discos.

Sistemas orientados por filas

La solución común al problema de almacenamiento es serializar cada fila de datos, de la siguiente manera:

001:10, Smith, Joe, 40000;002:12, Jones, Mary, 50000;003:11, Johnson, Cathy, 44000;004:22, Jones, Bob, 55000;

Los sistemas basados ​​en filas están diseñados para devolver de manera eficiente los datos de una fila completa o de un registro completo en la menor cantidad de operaciones posible. Esto se adapta a los casos de uso en los que el sistema intenta recuperar toda la información sobre un objeto en particular, por ejemplo, la información completa sobre un contacto en un sistema de rolodex o la información completa sobre un producto en un sistema de compras en línea.

Los sistemas basados ​​en filas no son eficientes para realizar operaciones que se aplican a todo el conjunto de datos, en lugar de a un registro específico. Por ejemplo, para encontrar todos los registros de la tabla de ejemplo que tienen salarios entre 40.000 y 50.000, el sistema basado en filas tendría que buscar en todo el conjunto de datos los registros que coincidan. Si bien la tabla de ejemplo que se muestra arriba puede caber en un solo bloque de disco, una tabla con incluso unos pocos cientos de filas no lo haría, por lo que se necesitarían múltiples operaciones de disco para recuperar los datos.

Sistemas orientados a columnas

Un sistema orientado a columnas serializa todos los valores de una columna juntos y luego los valores de la siguiente columna. Para nuestra tabla de ejemplo, los datos se almacenarían de esta manera:

10:001,12:002,11:003,22:004;Smith:001,Jones:002,Johnson:003,Jones:004;Joe:001,María:002,Cathy:003,Bob:004;40000:001,50000:002,44000:003,55000:004;

La diferencia se puede ver más claramente en esta modificación común:

...;Smith:001,Jones:002,004,Johnson:003;...

Dos de los registros almacenan el mismo valor, "Jones", por lo que ahora es posible almacenarlo en el sistema orientado a columnas solo una vez en lugar de dos. Para muchas búsquedas comunes, como "encontrar a todas las personas con el apellido Jones", ahora se puede recuperar la respuesta en una sola operación.

La eficacia operativa de un sistema orientado a columnas depende en gran medida de las operaciones que se estén automatizando. Las operaciones que recuperan datos de objetos serían más lentas y requerirían numerosas operaciones de disco para reunir datos de diferentes columnas y crear un registro de fila completa. Sin embargo, estas operaciones de fila completa son generalmente poco frecuentes. En la mayoría de los casos, solo se recupera un subconjunto limitado de datos. En una aplicación de rolodex, por ejemplo, las operaciones que recopilan los nombres y apellidos de muchas filas para crear una lista de contactos son mucho más comunes que las operaciones que leen los datos de la dirección de domicilio.

Adopción

RCFile se ha adoptado en sistemas del mundo real para el análisis de big data.

  1. RCFile se convirtió en la estructura de ubicación de datos predeterminada en el clúster Hadoop de producción de Facebook. [2] En 2010, era el clúster Hadoop más grande del mundo, [3] donde se agregan conjuntos de datos comprimidos de 40 terabytes cada día. [4] Además, todos los conjuntos de datos almacenados en HDFS antes de RCFile también se han transformado para usar RCFile. [2]
  2. RCFile ha sido adoptado en Apache Hive (desde v0.4), [5] que es un sistema de almacenamiento de datos de código abierto que se ejecuta sobre Hadoop y se utiliza ampliamente en varias empresas de todo el mundo, [6] incluidos varios servicios de Internet, como Facebook , Taobao y Netflix . [7]
  3. RCFile ha sido adoptado en Apache Pig (desde v0.7), [8] que es otro sistema de procesamiento de datos de código abierto que se usa ampliamente en muchas organizaciones, [9] incluidos varios proveedores de servicios web importantes, como Twitter , Yahoo , LinkedIn , AOL y Salesforce.com .
  4. RCFile se convirtió en la estructura de almacenamiento de datos estándar de facto en el entorno de software Hadoop respaldado por el proyecto Apache HCatalog (anteriormente conocido como Howl [10] ), que es el servicio de gestión de tablas y almacenamiento para Hadoop. [11] RCFile cuenta con el respaldo de la biblioteca de código abierto Elephant Bird utilizada en Twitter para análisis de datos diarios. [12]

En los años siguientes, otros formatos de datos de Hadoop también se hicieron populares. En febrero de 2013, Hortonworks anunció un formato de archivo ORC (Optimized Row Columnar) . [13] Un mes después, se anunció el formato Apache Parquet , desarrollado por Cloudera y Twitter . [14]

Véase también

Referencias

  1. ^ Yongqiang He, Rubao Lee, Yin Huai, Zheng Shao, Namit Jain, Xiaodong Zhang y Zhiwei Xu (2011). "RCFile: una estructura de ubicación de datos rápida y eficiente en términos de espacio en sistemas de almacenamiento basados ​​en MapReduce". 27.ª Conferencia internacional sobre ingeniería de datos del IEEE, págs. 1200-1208.{{cite conference}}: CS1 maint: varios nombres: lista de autores ( enlace )
  2. ^ ab "Integración de Hive: HBase y Rcfile__HadoopSummit2010". 30 de junio de 2010.
  3. ^ "¡Facebook tiene el cluster Hadoop más grande del mundo!". 2010-05-09.
  4. ^ "Charla sobre la Cumbre Apache Hadoop India 2011 "Hive Evolution" por Namit Jain". 24 de febrero de 2011.
  5. ^ "Clase RCFile". Archivado desde el original el 23 de noviembre de 2011. Consultado el 21 de julio de 2012 .
  6. ^ "Desarrollado por - Apache Hive - Fundación de software Apache".
  7. ^ "Presentación del grupo de usuarios de Hive de Netflix (18/3/2010)". 19/03/2010.
  8. ^ "HiveRCInputFormat (API Pig 0.17.0)".
  9. ^ "Desarrollado por - Apache Pig - Fundación de software Apache".
  10. ^ Aullido
  11. ^ "HCatalog". Archivado desde el original el 20 de julio de 2012. Consultado el 21 de julio de 2012 .
  12. ^ "Colección de Twitter de código Hadoop, Pig, Hive y HBase relacionado con LZO y Protocol Buffer: Kevinweil/elephant-bird". GitHub . 2018-12-15.
  13. ^ Alan Gates (20 de febrero de 2013). "La iniciativa Stinger: cómo hacer que Apache Hive sea 100 veces más rápido". Blog de Hortonworks . Consultado el 4 de mayo de 2017 .
  14. ^ Justin Kestelyn (13 de marzo de 2013). "Presentación de Parquet: almacenamiento en columnas eficiente para Apache Hadoop". Blog de Cloudera . Consultado el 4 de mayo de 2017 .

Enlaces externos