RCFile - RCFile

RCFile (Record Columnar File) est une structure de placement de données qui détermine comment stocker des tables relationnelles sur des clusters d'ordinateurs . Il est conçu pour les systèmes utilisant le framework MapReduce . La structure RCFile comprend un format de stockage de données, une approche de compression de données et des techniques d'optimisation pour la lecture de données. Il est capable de répondre aux quatre exigences du placement des données: (1) chargement rapide des données, (2) traitement rapide des requêtes, (3) utilisation très efficace de l'espace de stockage et (4) forte adaptabilité aux modèles d'accès dynamique aux données.

RCFile est le résultat de la recherche et des efforts de collaboration de Facebook , de l'Université d'État de l'Ohio et de l'Institut de technologie informatique de l' Académie chinoise des sciences .

Résumé

Format de stockage des données

Par exemple, une table dans une base de données se compose de 4 colonnes (c1 à c4):

c1 c2 c3 c4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
51 52 53 54

Pour sérialiser la table, RCFile partitionne cette table d'abord horizontalement, puis verticalement, au lieu de ne partitionner la table qu'horizontalement comme le SGBD orienté lignes (row-store). Le partitionnement horizontal partitionnera d'abord la table en plusieurs groupes de lignes en fonction de la taille du groupe de lignes, qui est une valeur spécifiée par l'utilisateur déterminant la taille de chaque groupe de lignes. Par exemple, la table mentionnée ci-dessus peut être partitionnée en deux groupes de lignes si l'utilisateur spécifie trois lignes comme taille de chaque groupe de lignes.

Groupe de lignes 1
c1 c2 c3 c4
11 12 13 14
21 22 23 24
31 32 33 34
Groupe de lignes 2
c1 c2 c3 c4
41 42 43 44
51 52 53 54

Ensuite, dans chaque groupe de lignes, RCFile partitionne les données verticalement comme column-store. Ainsi, la table sera sérialisée comme:

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

Compression des données de colonne

Dans chaque groupe de lignes, les colonnes sont compressées pour réduire l'utilisation de l'espace de stockage. Etant donné que les données d'une colonne sont stockées de manière adjacente, le motif d'une colonne peut être détecté et ainsi l'algorithme de compression approprié peut être sélectionné pour un taux de compression élevé.

Avantages de performance

Le magasin de colonnes est plus efficace lorsqu'une requête ne nécessite qu'un sous-ensemble de colonnes, car le magasin de colonnes ne lit que les colonnes nécessaires sur les disques, mais le magasin de lignes lira une ligne entière.

RCFile combine les mérites du magasin de lignes et du magasin de colonnes via un partitionnement horizontal-vertical. Avec le partitionnement horizontal, RCFile place toutes les colonnes d'une ligne dans une seule machine et peut ainsi éliminer les coûts de réseau supplémentaires lors de la construction d'une ligne. Avec le partitionnement vertical, pour une requête, RCFile ne lira que les colonnes nécessaires à partir des disques et peut ainsi éliminer les coûts d'E / S locaux inutiles. De plus, dans chaque groupe de lignes, la compression des données peut être effectuée à l'aide d'algorithmes de compression utilisés dans le magasin de colonnes .

Par exemple, une base de données peut avoir cette table:

EmpId Nom de famille Prénom Un salaire
dix Forgeron Joe 40000
12 Jones Marie 50000
11 Johnson Cathy 44 000
22 Jones Bob 55 000

Cette table simple comprend un identifiant d'employé (EmpId), des champs de nom (Nom et Prénom) et un salaire (Salaire). Ce format bidimensionnel n'existe qu'en théorie, en pratique, le matériel de stockage nécessite que les données soient sérialisées sous une forme ou une autre.

Dans les systèmes basés sur MapReduce, les données sont normalement stockées sur un système distribué, tel que Hadoop Distributed File System (HDFS) , et différents blocs de données peuvent être stockés sur différentes machines. Ainsi, pour le stockage de colonnes sur MapReduce, différents groupes de colonnes peuvent être stockés sur différentes machines, ce qui entraîne des coûts de réseau supplémentaires lorsqu'une requête projette des colonnes placées sur différentes machines. Pour les systèmes basés sur MapReduce, le mérite du stockage de lignes est qu'il n'y a pas de coûts réseau supplémentaires pour construire une ligne dans le traitement des requêtes, et le mérite du stockage de colonnes est qu'il n'y a pas de coûts d'E / S locaux inutiles lors de la lecture de données à partir de disques.

Systèmes orientés lignes

La solution courante au problème de stockage est de sérialiser chaque ligne de données, comme ceci;

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

Les systèmes basés sur les lignes sont conçus pour renvoyer efficacement les données d'une ligne entière ou d'un enregistrement entier, en aussi peu d'opérations que possible. Cela correspond aux cas d'utilisation où le système tente de récupérer toutes les informations sur un objet particulier, par exemple les informations complètes sur un contact dans un système rolodex ou les informations complètes sur un produit dans un système d'achat en ligne.

Les systèmes basés sur des lignes ne sont pas efficaces pour effectuer des opérations qui s'appliquent à l'ensemble de données, par opposition à un enregistrement spécifique. Par exemple, pour trouver tous les enregistrements de la table d'exemple dont les salaires sont compris entre 40 000 et 50 000, le système basé sur les lignes devrait parcourir l'ensemble de données à la recherche d'enregistrements correspondants. Alors que l'exemple de table ci-dessus peut tenir dans un seul bloc de disque, une table avec même quelques centaines de lignes ne le ferait pas, par conséquent plusieurs opérations de disque seraient nécessaires pour récupérer les données.

Systèmes orientés colonnes

Un système orienté colonnes sérialise toutes les valeurs d'une colonne ensemble, puis les valeurs de la colonne suivante. Pour notre exemple de table, les données seraient stockées de cette manière;

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

La différence peut être plus clairement vue dans cette modification courante:

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

Deux des enregistrements stockent la même valeur, "Jones", il est donc désormais possible de stocker celle-ci dans le système orienté colonnes une seule fois au lieu de deux. Pour de nombreuses recherches courantes, telles que "trouver toutes les personnes portant le nom de famille Jones", la réponse peut désormais être récupérée en une seule opération.

Le fait qu'un système orienté colonne soit ou non plus efficace en fonctionnement dépend fortement de l'automatisation des opérations. Les opérations qui récupèrent les données des objets seraient plus lentes, ce qui nécessiterait de nombreuses opérations de disque pour assembler les données de différentes colonnes afin de créer un enregistrement de ligne entière. Cependant, de telles opérations sur une ligne entière sont généralement rares. Dans la majorité des cas, seul un sous-ensemble limité de données est récupéré. Dans une application rolodex, par exemple, les opérations de collecte des prénoms et noms de famille à partir de nombreuses lignes afin de créer une liste de contacts sont beaucoup plus courantes que les opérations de lecture des données pour l'adresse du domicile.

Adoption

RCFile a été adopté dans les systèmes du monde réel pour l'analyse de Big Data.

  1. RCFile est devenu la structure de placement de données par défaut dans le cluster Hadoop de production de Facebook. En 2010, il s'agissait du plus grand cluster Hadoop au monde, où des ensembles de données compressées de 40 téraoctets sont ajoutés chaque jour. De plus, tous les ensembles de données stockés dans HDFS avant RCFile ont également été transformés pour utiliser RCFile.
  2. RCFile a été adopté dans Apache Hive (depuis la v0.4), un système de stockage de données open source fonctionnant sur Hadoop et largement utilisé dans diverses entreprises du monde entier, y compris plusieurs services Internet, tels que Facebook , Taobao , et Netflix .
  3. RCFile a été adopté dans Apache Pig (depuis la v0.7), qui est un autre système de traitement de données open source largement utilisé dans de nombreuses organisations, y compris plusieurs grands fournisseurs de services Web, tels que Twitter , Yahoo , LinkedIn , AOL et Salesforce.com .
  4. RCFile est devenu la structure de stockage de données standard de facto dans l'environnement logiciel Hadoop pris en charge par le projet Apache HCatalog (anciennement Howl) qui est le service de gestion des tables et du stockage pour Hadoop. RCFile est pris en charge par la bibliothèque open source Elephant Bird utilisée dans Twitter pour l'analyse quotidienne des données.

Au cours des années suivantes, d'autres formats de données Hadoop sont également devenus populaires. En février 2013, un format de fichier ORC (Optimized Row Columnar) a été annoncé par Hortonworks . Un mois plus tard, le format Apache Parquet était annoncé, développé par Cloudera et Twitter .

Voir également

Les références

Liens externes