J'exécute quelques tests sur les formats de stockage disponibles avec Hive et j'utilise Parquet et ORC comme options principales. J'ai inclus ORC une fois avec la compression par défaut et une fois avec Snappy.
J'ai lu de nombreux documents qui déclarent que Parquet est meilleur en complexité temps / espace par rapport à ORC, mais mes tests sont opposés aux documents que j'ai parcourus.
Suit quelques détails de mes données.
Table A- Text File Format- 2.5GB
Table B - ORC - 652MB
Table C - ORC with Snappy - 802MB
Table D - Parquet - 1.9 GB
Le parquet était pire en ce qui concerne la compression de ma table.
Mes tests avec les tableaux ci-dessus ont donné les résultats suivants.
Opération de comptage de lignes
Text Format Cumulative CPU - 123.33 sec
Parquet Format Cumulative CPU - 204.92 sec
ORC Format Cumulative CPU - 119.99 sec
ORC with SNAPPY Cumulative CPU - 107.05 sec
Somme d'une opération de colonne
Text Format Cumulative CPU - 127.85 sec
Parquet Format Cumulative CPU - 255.2 sec
ORC Format Cumulative CPU - 120.48 sec
ORC with SNAPPY Cumulative CPU - 98.27 sec
Moyenne d'une opération de colonne
Text Format Cumulative CPU - 128.79 sec
Parquet Format Cumulative CPU - 211.73 sec
ORC Format Cumulative CPU - 165.5 sec
ORC with SNAPPY Cumulative CPU - 135.45 sec
Sélection de 4 colonnes dans une plage donnée à l'aide de la clause where
Text Format Cumulative CPU - 72.48 sec
Parquet Format Cumulative CPU - 136.4 sec
ORC Format Cumulative CPU - 96.63 sec
ORC with SNAPPY Cumulative CPU - 82.05 sec
Cela signifie-t-il que ORC est plus rapide que Parquet? Ou puis-je faire quelque chose pour que cela fonctionne mieux avec le temps de réponse des requêtes et le taux de compression?
Merci!
Réponses:
Je dirais que ces deux formats ont leurs propres avantages.
Parquet pourrait être mieux si vous avez des données hautement imbriquées, car il stocke ses éléments sous forme d'arborescence comme le fait Google Dremel ( voir ici ).
Apache ORC pourrait être meilleur si votre structure de fichiers est aplatie.
Et pour autant que je sache, le parquet ne prend pas encore en charge les index. ORC est livré avec un index léger et depuis Hive 0.14 un filtre Bloom supplémentaire qui pourrait être utile pour améliorer le temps de réponse aux requêtes, en particulier lorsqu'il s'agit d'opérations de somme.
La compression par défaut de Parquet est SNAPPY. Les tableaux A - B - C et D contiennent-ils le même ensemble de données? Si oui, il semble qu'il y ait quelque chose de louche à ce sujet, quand il ne se compresse qu'à 1,9 Go
la source
Vous voyez cela parce que:
Hive dispose d'un lecteur ORC vectorisé mais pas de lecteur de parquet vectorisé.
Spark possède un lecteur de parquet vectorisé et aucun lecteur ORC vectorisé.
Spark fonctionne mieux avec du parquet, la ruche fonctionne mieux avec ORC.
J'ai vu des différences similaires lors de l'exécution d'ORC et de Parquet avec Spark.
La vectorisation signifie que les lignes sont décodées par lots, améliorant considérablement la localisation de la mémoire et l'utilisation du cache.
(correct à partir de Hive 2.0 et Spark 2.1)
la source
Parquet et ORC ont leurs propres avantages et inconvénients. Mais j'essaie simplement de suivre une règle empirique simple - "Comment vos données sont-elles imbriquées et combien de colonnes sont-elles présentes" . Si vous suivez le Google Dremel, vous pouvez découvrir comment le parquet est conçu. Ils utilisent une structure arborescente hiérarchique pour stocker des données. Plus la nidification est plus profonde dans l'arbre.
Mais ORC est conçu pour un magasin de fichiers aplati. Donc, si vos données sont aplaties avec moins de colonnes, vous pouvez utiliser ORC, sinon, le parquet vous conviendra. La compression sur des données aplaties fonctionne à merveille dans ORC.
Nous avons effectué des analyses comparatives avec un fichier aplati plus volumineux, l'avons converti en Spark Dataframe et l'avons stocké au format parquet et ORC dans S3 et avons interrogé avec ** Redshift-Spectrum **.
Bientôt, nous ferons une analyse comparative des données imbriquées et mettrons à jour les résultats ici.
la source
Nous avons fait un benchmark comparant les différents formats de fichiers (Avro, JSON, ORC et Parquet) dans différents cas d'utilisation.
https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet
Les données sont toutes accessibles au public et le code de référence est entièrement open source à:
https://github.com/apache/orc/tree/branch-1.4/java/bench
la source
Les deux ont leurs avantages. Nous utilisons Parquet en collaboration avec Hive et Impala, mais nous voulions juste souligner quelques avantages d'ORC par rapport à Parquet: lors de requêtes à exécution longue, lorsque Hive interroge les tables ORC, GC est appelé environ 10 fois moins fréquemment . Peut-être rien pour de nombreux projets, mais peut être crucial pour d'autres.
ORC prend également beaucoup moins de temps, lorsque vous devez sélectionner seulement quelques colonnes dans le tableau. Certaines autres requêtes, en particulier avec les jointures, prennent également moins de temps en raison de l'exécution de requêtes vectorisées, qui n'est pas disponible pour Parquet
De plus, la compression ORC est parfois un peu aléatoire, tandis que la compression Parquet est beaucoup plus cohérente. Cela ressemble à quand la table ORC a de nombreuses colonnes numériques - elle ne se compresse pas non plus. Il affecte à la fois zlib et la compression snappy
la source