web-dev-qa-db-fra.com

Avro vs. Parquet

Je prévois d'utiliser l'un des formats de fichier hadoop pour mon projet lié à hadoop. Je comprends le parquet est efficace pour les requêtes sur colonnes et avro pour l'analyse complète ou lorsque nous avons besoin de toutes les données de colonnes!

Avant de poursuivre et de choisir l’un des formats de fichier, je souhaite comprendre quels sont les inconvénients/inconvénients de l’un sur l’autre. Quelqu'un peut-il me l'expliquer en termes simples?

78
Abhishek

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

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

for

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

Le format Parquet semble nécessiter un peu plus de calculs de la part de l’écriture - par exemple, nécessitant RAM pour la mise en mémoire tampon et l'UC pour la commande des données, etc., mais cela devrait réduire les coûts d'E/S, de stockage et de transfert. ainsi que pour des lectures efficaces, en particulier avec des requêtes de type SQL (par exemple, Hive ou SparkSQL) qui ne s’adressent qu’à une partie des colonnes.

Dans un projet, j'ai fini par revenir des conteneurs Parquet aux conteneurs Avro car le schéma était trop étendu et imbriqué (dérivant de classes relativement hiérarchiques orientées objet) et aboutissait à des milliers de colonnes Parquet. À leur tour, nos groupes de lignes étaient très larges et peu profonds, ce qui signifiait qu'il nous fallait 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 bien utilisé, il permet une amélioration significative des performances.

48
steamer25

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

Le parquet est un format basé sur la colonne. Si vos données comprennent un grand nombre de colonnes mais que vous êtes intéressé par un sous-ensemble de colonnes, vous pouvez utiliser Parquet.

HBase est utile lorsque la mise à jour fréquente des données est impliquée. Avro est rapide dans la récupération, Parquet est beaucoup plus rapide.

44

Avro

  • Largement utilisé comme plateforme de sérialisation
  • Basé sur les lignes, offre un format binaire compact et rapide
  • Le schéma est codé sur le fichier afin que les données puissent être non étiquetées
  • Les fichiers supportent la compression de bloc et sont divisibles
  • Prise en charge de l'évolution du schéma

Parquet

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

De Choix d'un format de stockage de données HDFS - Avro vs. Parquet et plus

27
secfree

Avro et Parquet sont tous deux des formats de stockage "auto-descriptifs", ce qui signifie que les données incorporées, les informations de métadonnées et le schéma sont incorporés lors du stockage de données dans un fichier. L'utilisation de ces formats de stockage dépend du cas d'utilisation. Trois aspects constituent la base sur laquelle vous pouvez choisir quel format sera optimal dans votre cas:

  1. opération de lecture/écriture: Le parquet est un format de fichier basé sur des colonnes. Il supporte l'indexation. Pour cette raison, il est adapté aux requêtes de données à faible temps de latence, complexes ou analytiques, à écriture unique et intensive, en lecture intensive. Ceci est généralement utilisé par les utilisateurs finaux/les scientifiques de données.
    Pendant ce temps, Avro, étant un format de fichier basé sur des lignes, est le mieux utilisé pour les opérations nécessitant beaucoup d’écriture. Ceci est généralement utilisé par les ingénieurs de données. Les deux prennent en charge les formats de compression et de sérialisation, bien qu'ils le fassent de différentes manières.

  2. Outils: Le parquet est un bon choix pour Impala. (Impala est un moteur de requête SQL RDBM MPP (Massive Parallel Processing) qui sait exploiter les données stockées dans un ou plusieurs moteurs de stockage externes.) Encore une fois, Parquet se prête bien aux requêtes complexes/interactives et rapides (faible temps de latence). ) sort des données dans HDFS. Ceci est soutenu par CDH (Cloudera Distribution Hadoop). Hadoop prend en charge les formats ORC (Optimized Row Columnar) d’Apache (la sélection dépend de la distribution Hadoop), alors que Avro convient mieux au traitement de Spark.

  3. Evolution du schéma: Évoluer un schéma de base de données signifie changer la structure de la base de données, donc ses données, et donc son traitement de requête.
    Parquet et Avro prennent en charge l’évolution du schéma, mais à des degrés divers.
    Le parquet convient aux opérations d’ajout, par ex. ajouter des colonnes, mais pas pour renommer des colonnes, sauf si 'read' est fait par index.
    Avro convient mieux à l’ajout, à la suppression et à la mutation de colonnes que le parquet. Historiquement, Avro a fourni un ensemble plus riche de possibilités d'évolution de schéma que Parquet, et bien que leurs capacités d'évolution de schéma aient tendance à s'estomper, Avro brille toujours dans ce domaine, comparé à Parquet.

18
Aakash Aggarwal

Votre compréhension est juste. En fait, nous avons rencontré une situation similaire lors de la migration des données dans notre DWH. Nous avons choisi Parquet au lieu d’Avro car l’économie de disque obtenue était presque le double de celle d’AVro. En outre, le temps de traitement des requêtes était bien meilleur qu'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 un vainqueur prévisible.

Nous utilisons Hive 0.12 de CDH distro. Vous avez mentionné que vous rencontrez des problèmes avec Hive + Parquet, quels sont-ils? Nous n'en avons rencontré aucun.

9
Silver Blaze

Silver Blaze a bien décrit son cas avec un exemple d'utilisation et a décrit comment Parquet était le meilleur choix pour lui. Il est logique d’envisager l’une plutôt que l’autre en fonction de vos besoins. Je suis en train de mettre en place 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 ça t'as aidé.

Il existe de nombreux formats de fichiers que vous pouvez utiliser dans Hive. Les mentions notables sont AVRO, Parquet. RCFile & ORC. Vous pouvez consulter certains bons documents 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 fichier. Suit des liens utiles qui vous permettront de continuer.

Cet article de blog

Ce lien de MapR [Ils ne discutent pas de Parquet cependant]

Ce lien depuis Inquidia

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

Merci!

3
Rahul

Juste pour une description de 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 prochainement sur Avro et une comparaison entre les 2 également. Le posterai ici une fois fait.

0
Abhishek Jain