Compression de données dans Hadoop

Les volumes de données énormes qui sont des réalités dans un Hadoop compression typique déploiement marque une nécessité. La compression de données vous permet d'économiser vraiment beaucoup d'espace de stockage et est sûr d'accélérer le mouvement de ces données tout au long de votre cluster. Sans surprise, un certain nombre de schémas de compression disponibles, appelés codecs, sont dehors là pour vous d'envisager.

Dans un déploiement Hadoop, vous avez affaire (potentiellement) avec un assez grand nombre de nœuds esclaves individuels, dont chacun a un certain nombre de gros disques durs. Il est pas rare pour un nœud esclave individu d'avoir plus de 45 To d'espace de stockage brut disponibles pour HDFS.

Même si nœuds esclaves Hadoop sont conçus pour être peu coûteux, ils ne sont pas libres, et avec de grands volumes de données qui ont une tendance à croître à un rythme croissant, la compression est un outil évident pour contrôler les volumes de données extrêmes.

Premièrement, certains termes de base: A codec, qui est une forme raccourcie de compressor /décembreompressor, est la technologie (logiciel ou matériel, ou les deux) pour compresser et décompresser de données, il est la mise en œuvre d'un algorithme de compression / décompression.

Vous devez savoir que certains codecs prennent en charge quelque chose appelé compression divisible et que les codecs diffèrent à la fois la rapidité avec laquelle ils peuvent compresser et décompresser des données et la mesure dans laquelle ils peuvent comprimer.

Compression divisible est un concept important dans un contexte Hadoop. La façon Hadoop fonctionne est que les fichiers sont divisés si elles sont plus grandes que le bloc de réglage de la taille du fichier, et scissions de fichiers individuels peuvent être traitées en parallèle par différents mappeurs.

Avec la plupart des codecs, scissions de fichiers de texte ne peuvent pas être décompressés indépendamment des autres divisions de la même fichier, de sorte que ces codecs sont dits non divisible, alors le traitement de MapReduce est limitée à un seul mappeur.

Parce que le fichier peut être décompressé seulement comme un tout, et non comme des pièces individuelles basées sur les divisions, il ne peut y avoir aucun traitement parallèle d'un tel fichier, et la performance pourrait prendre un énorme succès comme une tâche attend un seul mappeur de traiter des données multiples blocs qui ne peuvent pas être décompressées indépendamment.

La compression est divisible seulement un facteur pour les fichiers texte. Pour les fichiers binaires, Hadoop codecs de compression compressent les données dans un conteneur codé en binaire, en fonction du type de fichier (par exemple, un SequenceFile, Avro, ou ProtocolBuffer).




Parlant de la performance, il ya un coût (en termes de ressources de traitement et de temps) associés à la compression des données qui est en cours d'écriture à votre cluster Hadoop.

Avec les ordinateurs, comme la vie, rien est libre. Lors de la compression de données, vous échangez des cycles de traitement pour l'espace disque. Et lorsque que les données sont lues, il ya un coût associé à décompresser les données ainsi. Assurez-vous de peser les avantages de l'épargne de stockage contre la surcharge de performance supplémentaire.

Si le fichier d'entrée à un travail de MapReduce contient des données compressées, le temps qui est nécessaire pour lire ces données de HDFS est réduit et les performances de l'emploi est améliorée. Les données d'entrée est automatiquement décompressé quand il est lu par MapReduce.

L'extension du fichier d'entrée détermine qui a soutenu codec est utilisé pour décompresser automatiquement les données. Par exemple, une extension .gz identifie le fichier comme un fichier compressé par gzip.

Il peut également être utile pour compresser la sortie de la phase intermédiaire de la carte dans le flux de traitement de MapReduce. Parce que la sortie de fonction de la carte est écrit sur le disque et expédié sur le réseau pour réduire les tâches, la compression de la sortie peut entraîner des améliorations de performances significatives.

Et si vous voulez stocker la sortie de MapReduce que les fichiers d'historique pour une utilisation future, la compression de ces données permet de réduire considérablement la quantité d'espace nécessaire dans HDFS.

Il existe de nombreux algorithmes et des outils de compression, et de leurs caractéristiques et points forts varient. Le compromis le plus commun est entre les taux de compression (le degré auquel un fichier est compressé) et compresser / décompresser des vitesses. Le framework Hadoop prend en charge plusieurs codecs. Le cadre compresse et décompresse transparente la plupart des formats d'entrée et de fichiers de sortie.

La liste suivante identifie certains codecs communs qui sont pris en charge par le framework Hadoop. Soyez sûr de choisir le codec qui correspond le mieux aux exigences de votre utilisation cas particulier (par exemple, avec des charges de travail, où la vitesse de traitement est important, a choisi un codec avec une vitesse élevée de décompression):

  • Gzip: Un utilitaire de compression qui a été adopté par le projet GNU, Gzip (abréviation de GNU zip) génère des fichiers compressés qui ont une extension .gz. Vous pouvez utiliser la commande gunzip pour décompresser les fichiers qui ont été créés par un certain nombre d'utilitaires de compression, y compris Gzip.

  • Bzip2: Du point de vue de la facilité d'utilisation, Bzip2 et Gzip sont similaires. Bzip2 génère un meilleur taux de compression que ne Gzip, mais il est beaucoup plus lent. En fait, de tous les codecs de compression disponibles dans Hadoop, Bzip2 est de loin le plus lent.

    Si vous mettez en place une archive que vous aurez rarement besoin d'interroger et de l'espace est à une prime élevée, alors peut-être serait Bzip2 être utile d'examiner.

  • Snappy: Le codec Snappy de Google fournit des ratios modestes de compression, mais une compression rapide et des vitesses de décompression. (En fait, il a les vitesses les plus rapides de décompression, ce qui rend hautement souhaitable pour les ensembles de données qui sont susceptibles d'être demandées souvent.)

    Le codec Snappy est intégré dans Hadoop commune, un ensemble d'utilitaires communs qui prend en charge d'autres sous-projets Hadoop. Vous pouvez utiliser Snappy comme un add-on pour les versions les plus récentes de Hadoop qui ne fournissent pas encore un soutien Snappy codec.

  • LZO: Similaire à Snappy, LZO (abréviation de Lempel-Ziv-Oberhumer, le trio de scientifiques de l'ordinateur qui est venu avec l'algorithme) fournit des ratios modestes de compression, mais une compression rapide et des vitesses de décompression. LZO est autorisé sous licence GNU Public License (GPL).

    LZO supporte la compression se scinder en deux, ce qui permet le traitement parallèle des scissions de fichiers de texte compressées par vos emplois MapReduce. LZO doit créer un index quand il comprime un fichier, car avec blocs de compression de longueur variable, un indice est nécessaire de dire le mappeur où il peut en toute sécurité scinder le fichier compressé. LZO est seulement vraiment souhaitable si vous avez besoin de compresser des fichiers de texte.

Hadoop Codecs
CodecExtension de fichierDivisible?Degré de compressionVitesse de compression
Gzip.GZNonMilieuMilieu
Bzip2.bz2OuiHautLent
Prompt.promptNonMilieuVite
LZO.lzoNon, sauf indexésMilieuVite

Tous les algorithmes de compression doivent faire des compromis entre le degré de compression et la vitesse de compression qu'ils peuvent atteindre. Les codecs qui sont répertoriés vous fournir un certain contrôle sur ce que l'équilibre entre le taux de compression et la vitesse doit être au temps de compression.

Par exemple, Gzip vous permet de régler la vitesse de compression en spécifiant un nombre entier négatif (ou mot-clé), où -1 indique le niveau de compression le plus rapide, et -9 indique le niveau de compression le plus lent. Le niveau de compression par défaut est de -6.


» » » » Compression de données dans Hadoop