2017-05-22 1 views
1

Je me demandais juste ce que les gens pensaient de la lecture de Hive par rapport à la lecture d'un fichier .csv ou d'un fichier .txt ou d'un fichier .ORC ou d'un .parquet fichier. En supposant que la table Hive sous-jacente est une table externe qui a le même format de fichier, préférez-vous lire une table Hive ou à partir du fichier sous-jacent lui-même, et pourquoi?Vaut-il mieux que Spark sélectionne la ruche ou la sélectionne dans le fichier

Mike

+0

Vous pouvez trouver la réponse la plus récente à https://stackoverflow.com/questions/32373460/parquet-vs-orc-vs-orc-with-snappy assez intéressant >> la vectorisation est un vrai bonus .. En plus des "pushs-down de prédicats", "skip scans" basés sur des stats locales (les deux fonctionnalités requièrent des formats en colonnes), une taille de partition efficace, une compression appropriée ... –

Répondre

1

tl; dr: Je le lire directement à partir des fichiers de parquet

J'utilise Spark 1.5.2 et 1.2.1 Ruche Pour une table de colonne de la ligne X 100 5millions certains timings J'ai enregistré sont

val dffile = sqlContext.read.parquet("/path/to/parquets/*.parquet") 
val dfhive = sqlContext.table("db.table") 

nombre de dffiles -> 0,38s; nombre de dfhives -> 8,99 s

dffile somme (col) -> 0,98s; dfhive somme (col) -> 8.10s

dffile sous-chaîne (col) -> 2,63s; dfhive substring (col) -> 7,77s

dffile où (col = valeur) -> 82,59s; dfhive où (col = valeur) -> 157.64s

Notez que cela a été fait avec une ancienne version de la Ruche et une ancienne version de Spark donc je ne peux pas commenter sur la façon dont l'amélioration de la vitesse aurait pu se produire entre le deux mécanismes de lecture

1

D'après ce que je comprends, même si en général .ORC est mieux adapté pour les structures plates et parquet pour ceux imbriqués, spark est optimisé pour parquet. Par conséquent, il est conseillé d'utiliser ce format avec spark.

En outre, Metadata pour toutes vos tables de lecture de parquet sera de toute façon stockée dans hive. Ceci est étincelle doc: Spark SQL caches Parquet metadata for better performance. When Hive metastore Parquet table conversion is enabled, metadata of those converted tables are also cached. If these tables are updated by Hive or other external tools, you need to refresh them manually to ensure consistent metadata.

J'ai tendance à transformer les données dès que possible en parquet le format et le stocker alluxio soutenu par hdfs. Cela me permet d'atteindre de meilleures performances pour les opérations read/write, et de limiter l'utilisation de cache.

J'espère que ça aide.

+0

C'est cool que vous utilisiez Alluxio! Mais ma question concerne spécifiquement Hive vs Non-Hive. Que ce soit ORC, Parquet, peu importe, cela pourrait être défini par autre chose. Ce pourrait être une exigence d'avoir ORC. Je demande juste au sujet de la table de Hive contre juste le dossier. –