Avro vs. Parquet

Je compte utiliser l’un des formats de fichiers hadoop pour mon projet lié à hadoop. Je comprends que le parquet est efficace pour les requêtes basées sur les colonnes et les avro pour une parsing complète ou lorsque nous avons besoin de toutes les données des colonnes!

Avant de procéder et de choisir l’un des formats de fichier, je veux comprendre quels sont les inconvénients / inconvénients de l’un par rapport à l’autre. Quelqu’un peut-il me l’expliquer en termes simples?

Si vous ne l’avez pas déjà décidé, je vais aller de l’avant et écrire des schémas Avro pour vos données. Une fois cela fait, choisir entre les fichiers de conteneur Avro et les fichiers Parquet est à peu près aussi simple que

job.setOutputFormatClass(AvroKeyOutputFormat.class); AvroJob.setOutputKeySchema(MyAvroType.getClassSchema()); 

pour

 job.setOutputFormatClass(AvroParquetOutputFormat.class); AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema()); 

Le format Parquet semble être un peu plus intensif en calcul du côté de l’écriture – par exemple, nécessitant de la RAM pour la mise en mémoire tampon et le processeur pour la commande des données, etc., il devrait réduire les coûts d’E / S, de stockage et de transfert lit en particulier avec des requêtes de type SQL (par exemple, Hive ou SparkSQL) qui ne traitent qu’une partie des colonnes.

Dans un projet, j’ai fini par revenir des conteneurs Parquet à Avro car le schéma était trop étendu et nested (étant dérivé de classes orientées object assez hiérarchiques) et donnait des milliers de colonnes Parquet. En retour, nos groupes de lignes étaient très larges et peu profonds, ce qui signifiait que cela prenait une éternité avant de pouvoir traiter un petit nombre de lignes dans la dernière colonne de chaque groupe.

Je n’ai pas encore eu beaucoup de chance d’utiliser Parquet pour des données plus normalisées / saines, mais je comprends que si elles sont bien utilisées, cela permet des améliorations de performances significatives.

Avro est un format basé sur les lignes. Si vous souhaitez récupérer les données dans leur ensemble, vous pouvez utiliser Avro

Le parquet est un format basé sur des colonnes. Si vos données contiennent beaucoup de colonnes mais que vous êtes intéressé par un sous-ensemble de colonnes, vous pouvez utiliser Parquet

HBase est utile lorsque des mises à jour fréquentes des données sont impliquées. Avro est rapide dans la récupération, le parquet est beaucoup plus rapide.

Avro

  • Largement utilisé comme plate-forme de sérialisation
  • Basé sur des lignes, offre un format binary compact et rapide
  • Le schéma est codé sur le fichier afin que les données puissent être non marquées
  • Les fichiers prennent en charge la compression de bloc et sont divisibles
  • Prend en charge l’évolution du schéma

Parquet

  • Format de fichier binary orienté colonne
  • Utilise l’algorithme de déchiquetage et d’assemblage décrit dans le papier Dremel
  • Chaque fichier de données contient les valeurs d’un ensemble de lignes
  • Efficace en termes d’E / S disque lorsque des colonnes spécifiques doivent être interrogées

De choisir un format de stockage de données HDFS – Avro vs Parquet et plus

Votre compréhension est juste. En fait, nous avons rencontré une situation similaire lors de la migration de données dans notre DWH. Nous avons choisi Parquet over Avro car l’économie de disque que nous avons eue était presque le double de ce que nous avions obtenu avec AVro. De plus, le temps de traitement des requêtes était bien meilleur que celui d’Avro. Mais oui, nos requêtes étaient basées sur l’agrégation, les opérations basées sur des colonnes, etc. Par conséquent, Parquet était clairement un gagnant évident. Nous utilisons HIve 0.12 de la dissortingbution CDH. Vous avez mentionné que vous rencontrez des problèmes avec Hive + Parquet, quels sont-ils? Nous n’en avons pas rencontré. J’espère que cela t’aides.

Silver Blaze a bien décrit la description avec un exemple d’utilisation et a décrit comment Parquet était le meilleur choix pour lui. Il est judicieux d’envisager l’une sur l’autre en fonction de vos besoins. Je présente une brève description de différents autres formats de fichiers, ainsi qu’une comparaison de la complexité de l’espace-temps. J’espère que cela pourra aider.

Il existe un grand nombre de formats de fichiers que vous pouvez utiliser dans Hive. Les mentions notables sont AVRO, Parquet. RCFile & ORC. Il existe de bons documents disponibles en ligne auxquels vous pouvez vous référer si vous souhaitez comparer les performances et l’utilisation de l’espace de ces formats de fichiers. Suit des liens utiles qui vous feront avancer.

Cet article de blog

Ce lien de MapR [Ils ne discutent pas du parquet cependant]

Ce lien de Inquidia

Les liens ci-dessus vous permettront de démarrer. J’espère que cela répond à votre requête.

Merci!

L’utilisation des deux formats dépend du cas d’utilisation. Sur la base de 3 facteurs, nous pouvons choisir le format qui sera opté dans notre cas:

  1. Opération de lecture / écriture : Le parquet est un format de fichier basé sur des colonnes, donc compatible avec l’indexation, ce qui le rend adapté aux requêtes de lecture intensive, complexes ou analytiques et aux données à faible latence. Ceci est généralement utilisé par les utilisateurs finaux / les scientifiques des données. Considérant que, AVRO, étant un format de fichier basé sur les lignes, est le mieux adapté pour une exploitation intensive en écriture. Ceci est généralement utilisé par les ingénieurs de données. Les deux prennent en charge les formats de sérialisation et de compression.

  2. Outils : Parquet est le mieux adapté à Impala (moteur MPP) car il est responsable des requêtes complexes / interactives et des sorties à faible latence. Ceci est soutenu par le CDH. Comme ce HDP prend en charge les formats ORC (les sélections dépendent également de la dissortingbution de hadoop). Considérant que, Avro est le mieux adapté pour le traitement Spark.

  3. Evolution du schéma : modifie le schéma des données sur la transformation et le traitement. Parquet et Avro supportent tous deux l’évolution des schémas, mais à un certain degré. En comparaison, Avro fournit une évolution de schéma beaucoup plus riche. Le parquet est une bonne opération lorsque nous ajoutons des opérations comme l’ajout de colonnes, mais Avro convient aux opérations d’ajout et de modification. Ici, Avro brille mieux que Parquet.

Juste pour une description sur Parquet, vous pouvez vous référer ici: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

J’ai l’intention d’écrire très bientôt sur Avro et une comparaison entre les deux également. Je vais le poster ici une fois terminé.