
Commande propose L'ingénieur Rahul Bhatia de Clairvoyant discute des formats de fichiers dans les grandes données, des fonctions les plus courantes des formats Hadoop et du format à utiliser.
Pourquoi différents formats de fichiers sont nécessaires
Un goulot d'étranglement significatif dans la performance des applications supportant HDFS, comme MapReduce et Spark, est le temps de recherche, de lecture et d'écriture des données. Ces problÚmes sont amplifiés par les difficultés de gestion de grands ensembles de données, surtout si nous n'avons pas un schéma fixe, mais plutÎt un schéma évolutif ou s'il y a des limitations au stockage.
Le traitement des grandes donnĂ©es augmente la charge sur le sous-systĂšme de stockage â Hadoop stocke les donnĂ©es de façon redondante pour atteindre la tolĂ©rance aux pannes. En plus des disques, le processeur, le rĂ©seau, le systĂšme d'entrĂ©e-sortie, etc., subissent Ă©galement une charge Ă©levĂ©e. Ă mesure que le volume des donnĂ©es augmente, le coĂ»t de leur traitement et stockage augmente Ă©galement.
Différents formats de fichiers dans ont été conçus pour résoudre précisément ces problÚmes. Le choix du bon format de fichier peut offrir des avantages substantiels :
- Temps de lecture plus rapide.
- Temps d'écriture plus rapide.
- Fichiers partageables.
- Support de l'évolution des schémas.
- Support avancé de la compression.
Certains formats de fichiers sont destinés à un usage général, d'autres à des cas d'utilisation plus spécifiques, et certains sont développés en tenant compte de caractéristiques particuliÚres des données. Ainsi, le choix est en effet assez vaste.
Format de fichier Avro
Pour de sĂ©rialisation de donnĂ©es utilise largement Avro â c'est un format de stockage de donnĂ©es basĂ© sur des lignes, c'est-Ă -dire textuel, dans Hadoop. Il stocke le schĂ©ma au format JSON, facilitant sa lecture et son interprĂ©tation par n'importe quel programme. Les donnĂ©es elles-mĂȘmes sont enregistrĂ©es dans un format binaire, compact et efficace.
Le systĂšme de sĂ©rialisation Avro est neutre par rapport aux langages. Les fichiers peuvent ĂȘtre traitĂ©s par diffĂ©rents langages, notamment C, C++, C#, Java, Python et Ruby.
Une caractĂ©ristique clĂ© d'Avro est son support robuste des schĂ©mas de donnĂ©es qui Ă©voluent avec le temps, c'est-Ă -dire qui subissent des changements. Avro comprend les modifications de schĂ©ma â suppression, ajout ou modification de champs.
Avro prend en charge une variété de structures de données. Par exemple, il est possible de créer un enregistrement contenant un tableau, un type énuméré et un sous-enregistrement.

Ce format est idĂ©al pour l'Ă©criture dans une zone de transition du data lake (lac de donnĂ©es) (, ou data lake â une collection d'instances pour stocker diffĂ©rents types de donnĂ©es en complĂ©ment des sources de donnĂ©es elles-mĂȘmes).
Ainsi, pour l'écriture dans la zone d'atterrissage du lac de données, ce format convient le mieux pour les raisons suivantes :
- Les donnĂ©es de cette zone sont gĂ©nĂ©ralement lues dans leur intĂ©gralitĂ© pour un traitement ultĂ©rieur par les systĂšmes en aval â et le format basĂ© sur les lignes est dans ce cas plus efficace.
- Les systĂšmes en aval peuvent facilement extraire les schĂ©mas des tables Ă partir des fichiers â il n'est pas nĂ©cessaire de stocker les schĂ©mas sĂ©parĂ©ment dans un mĂ©ta-stockage externe.
- Tout changement dans le schéma source est facilement géré (évolution du schéma).
Format de fichiers Parquet
Parquet est un format de fichier open source pour Hadoop, qui stocke des structures de données imbriquées au format colonne plat..
Comparé à l'approche traditionnelle basée sur les lignes, Parquet est plus efficace en termes de stockage et de performance.
Cela est particuliĂšrement utile pour les requĂȘtes qui lisent certaines colonnes d'une table large (avec de nombreuses colonnes). GrĂące au format de fichiers, seules les colonnes nĂ©cessaires sont lues, minimisant ainsi les entrĂ©es/sorties.
Une petite digression-explication: pour mieux comprendre le format de fichier Parquet dans Hadoop, examinons ce qu'est un format basĂ© sur les colonnes â c'est-Ă -dire en colonnes. Dans ce format, des valeurs homogĂšnes de chaque colonne sont stockĂ©es ensemble.
, l'enregistrement comprend les champs ID, Name et Department. Dans ce cas, toutes les valeurs de la colonne ID seront stockées ensemble, tout comme les valeurs de la colonne Name, et ainsi de suite. La table aura un aspect approximatif :
ID
Nom
Department
1
emp1
d1
2
emp2
d2
3
emp3
d3
Dans le format ligne, les données seraient enregistrées comme suit :
1
emp1
d1
2
emp2
d2
3
emp3
d3
Dans le format de fichiers en colonne, les mĂȘmes donnĂ©es seraient enregistrĂ©es ainsi :
1
2
3
emp1
emp2
emp3
d1
d2
d3
Le format en colonnes est plus efficace lorsque vous devez interroger plusieurs colonnes d'une table. Il ne lira que les colonnes nécessaires, car elles sont adjacentes. Ainsi, les opérations d'entrée/sortie sont minimisées.
Par exemple, vous n'avez besoin que de la colonne NAME. Dans le , chaque enregistrement dans l'ensemble de donnĂ©es doit ĂȘtre chargĂ©, analysĂ© par champs, puis les donnĂ©es NAME extraites. Le format en colonnes permet d'accĂ©der directement Ă la colonne Name, car toutes les valeurs pour cette colonne sont stockĂ©es ensemble. Il n'est pas nĂ©cessaire de balayer tout l'enregistrement.
Ainsi, le format colonne amĂ©liore les performances des requĂȘtes, car il nĂ©cessite moins de temps de recherche pour accĂ©der aux colonnes requises et rĂ©duit le nombre d'opĂ©rations d'entrĂ©e-sortie, en ne lisant que les colonnes nĂ©cessaires.
Une des caractĂ©ristiques uniques est qu'il peut stocker des donnĂ©es avec des structures imbriquĂ©es. Cela signifie que dans un fichier Parquet, mĂȘme les champs imbriquĂ©s peuvent ĂȘtre lus sĂ©parĂ©ment sans avoir besoin de lire tous les champs dans la structure imbriquĂ©e. Pour le stockage de structures imbriquĂ©es, Parquet utilise un algorithme de dĂ©chiquetage et d'assemblage.

Pour comprendre le format de fichier Parquet dans Hadoop, il est nécessaire de connaßtre les termes suivants :
- Groupe de lignes (row group) : une division logique horizontale des données en lignes. Un groupe de lignes se compose d'un fragment de chaque colonne dans un ensemble de données.
- Fragment de colonne (column chunk) : un fragment d'une colonne spécifique. Ces fragments de colonnes résident dans un groupe de lignes donné et seront toujours contigus dans le fichier.
- Page (page) : les fragments de colonnes sont divisĂ©s en pages, enregistrĂ©es consĂ©cutivement. Les pages ont un en-tĂȘte commun, ce qui permet de sauter les lectures non nĂ©cessaires.

Ici, l'en-tĂȘte contient simplement un nombre magique PAR1 (4 octets), qui identifie le fichier comme un fichier au format Parquet.
Dans le pied de page, il est écrit :
- MĂ©tadonnĂ©es du fichier, qui contiennent les coordonnĂ©es de dĂ©marrage des mĂ©tadonnĂ©es de chaque colonne. Lors de la lecture, il est d'abord nĂ©cessaire de lire les mĂ©tadonnĂ©es du fichier pour trouver tous les fragments de colonnes d'intĂ©rĂȘt. Ensuite, les fragments de colonnes doivent ĂȘtre lus de maniĂšre sĂ©quentielle. Les mĂ©tadonnĂ©es incluent Ă©galement la version du format, le schĂ©ma et d'Ă©ventuelles paires clĂ©-valeur supplĂ©mentaires.
- Longueur des métadonnées (4 octets).
- Nombre magique PAR1 (4 octets).
Le format de fichiers ORC
Format de fichiers optimisé en ligne-colonne (Optimized Row Columnar, ) propose un moyen trÚs efficace de stocker des données et a été conçu pour surmonter les limitations des autres formats. Il stocke les données de maniÚre parfaitement compacte, permettant de sauter les détails non nécessaires - tout en ne nécessitant pas de construire de grands index complexes ou maintenus manuellement.
Les avantages du format ORC :
- Un fichier à la sortie de chaque tùche, ce qui réduit la charge sur le NameNode.
- Support des types de données Hive, y compris DateTime, les types décimaux et les types de données complexes (struct, list, map et union).
- Lecture simultanĂ©e d'un mĂȘme fichier par diffĂ©rents processus RecordReader.
- Possibilité de diviser les fichiers sans scanner à la recherche de marqueurs.
- Estimation de l'allocation maximale possible de la mémoire heap pour les processus de lecture/écriture en fonction des informations dans le pied de page du fichier.
- Les métadonnées sont stockées dans un format binaire de sérialisation Protocol Buffers, qui permet d'ajouter et de supprimer des champs.

ORC stocke des collections de lignes dans un seul fichier, et au sein de la collection, les données de ligne sont stockées au format colonne.
Le fichier ORC stocke des groupes de lignes appelés bandes (stripes) ainsi que des informations complémentaires dans le pied de page du fichier. Le post-scriptum à la fin du fichier contient les paramÚtres de compression et la taille du pied de page compressé.
Par défaut, la taille d'une bande est de 250 Mo. Grùce à des bandes de cette taille, la lecture depuis HDFS est effectuée de maniÚre plus efficace : en grands blocs continus.
Le pied de page du fichier contient une liste des bandes dans le fichier, le nombre de lignes par bande et le type de données de chaque colonne. Il y a également la valeur résultante de count, min, max et sum pour chaque colonne.
Le pied de page de la bande contient un répertoire des emplacements de flux.
Les données de ligne sont utilisées lors de la recherche dans les tables.
Les donnĂ©es d'index incluent les valeurs minimales et maximales pour chaque colonne et les positions des lignes dans chaque colonne. Les index ORC sont utilisĂ©s uniquement pour sĂ©lectionner des bandes et des groupes de lignes, et non pour rĂ©pondre aux requĂȘtes.
Comparaison des différents formats de fichiers
Avro par rapport Ă Parquet
- Avro est un format de stockage en ligne, tandis que Parquet stocke les données au format colonne.
- Parquet est mieux adaptĂ© aux requĂȘtes analytiques, c'est-Ă -dire que les opĂ©rations de lecture et de requĂȘte de donnĂ©es sont beaucoup plus efficaces que l'Ă©criture.
- Les opérations d'écriture dans Avro sont plus efficaces que dans Parquet.
- Avro gĂšre plus mĂ»rement l'Ă©volution des schĂ©mas. Parquet ne prend en charge que l'ajout de schĂ©mas, tandis qu'Avro met en Ćuvre une Ă©volution multifonctionnelle, c'est-Ă -dire l'ajout ou la modification de colonnes.
- Parquet est idĂ©al pour interroger un sous-ensemble de colonnes dans une table Ă plusieurs colonnes. Avro convient aux opĂ©rations ETL oĂč nous interrogeons toutes les colonnes.
ORC par rapport Ă Parquet
- Parquet stocke mieux les données imbriquées.
- ORC est mieux adapté à la poussée de prédicats (predicate pushdown).
- ORC prend en charge les propriétés ACID.
- ORC comprime mieux les données.
Suggestions de lecture supplémentaires:
- .
- .
- .
Source : habr.com
