web-dev-qa-db-fra.com

Comment impala fournit une réponse aux requêtes plus rapide que la ruche

J'ai récemment commencé à rechercher de grands ensembles de données CSV reposant sur HDFS à l'aide de Hive et Impala. Comme je m'y attendais, j'obtiens un meilleur temps de réponse avec Impala par rapport à Hive pour les requêtes que j'ai utilisées jusqu'à présent.

Je me demande s'il existe certains types de requêtes/cas d'utilisation qui nécessitent toujours Hive et où Impala ne convient pas.

Comment Impala fournit-il une réponse aux requêtes plus rapide que Hive pour les mêmes données sur HDFS?

52
techuser soma

Vous devriez voir Impala comme "SQL sur HDFS", tandis que Hive est plus "SQL sur Hadoop".

En d'autres termes, Impala n'utilise même pas du tout Hadoop. Il a simplement des démons qui s'exécutent sur tous vos nœuds qui mettent en cache certaines des données qui sont dans HDFS, de sorte que ces démons peuvent retourner des données rapidement sans avoir à passer par une tâche Map/Reduce entière.

La raison en est qu'il y a une certaine surcharge impliquée dans l'exécution d'un travail Map/Reduce, donc en court-circuitant complètement Map/Reduce, vous pouvez obtenir un gain assez important en temps d'exécution.

Cela dit, Impala ne remplace pas Hive, il convient à des cas d'utilisation très différents. Impala ne fournit pas de tolérance aux pannes par rapport à Hive, donc s'il y a un problème lors de votre requête, il a disparu. Certainement pour les types de travaux ETL où l'échec d'un travail serait coûteux, je recommanderais Hive, mais Impala peut être génial pour les petites requêtes ad hoc, par exemple pour les scientifiques des données ou les analystes commerciaux qui veulent simplement jeter un œil et analyser certaines données sans créer des emplois robustes. De plus, d'après mon expérience personnelle, Impala n'est pas encore très mature et j'ai parfois vu des plantages lorsque la quantité de données est supérieure à la mémoire disponible.

101
Charles Menguy

IMHO, SQL sur HDFS et SQL sur Hadoop sont les mêmes. Après tout, Hadoop est HDFS (et aussi MapReduce). Donc, quand nous disons SQL sur HDFS, il est entendu que c'est SQL sur Hadoop (pourrait être avec ou sans MapReduce).

Pour revenir à la question réelle, Impala fournit une réponse plus rapide car il utilise MPP (traitement massivement parallèle) contrairement à Hive qui utilise MapReduce sous le capot, ce qui implique des frais généraux initiaux (comme Charles Sir l'a spécifié). Le traitement massivement parallèle est un type de calcul qui utilise de nombreux processeurs distincts fonctionnant en parallèle pour exécuter un seul programme où chaque processeur possède sa propre mémoire dédiée. Le fait même qu'Impala, étant basé sur MPP, n'implique pas les frais généraux d'un travail MapReduce à savoir configuration et création de travail, attribution de créneau, création de division, génération de carte, etc., le rend incroyablement rapide.

Mais cela ne signifie pas qu'Impala est la solution à tous vos problèmes. Étant très gourmand en mémoire (MPP), il ne convient pas aux tâches qui nécessitent des opérations de données lourdes comme les jointures, etc., car vous ne pouvez tout simplement pas tout intégrer dans la mémoire. C'est là que Hive est le mieux adapté.

Donc, si vous avez besoin en temps réel, des requêtes ad hoc sur un sous-ensemble de vos données vont pour Impala. Et si vous avez un peu besoin de traitement par lots sur votre Big Data, optez pour Hive.

HTH

30
Tariq

Il y a quelques fonctionnalités clés dans l'impala qui le rendent rapide.

  1. Il n'utilise pas map/Reduce qui sont très chers à bifurquer en jvms séparés. Il exécute un démon Impala distinct qui divise la requête et les exécute en parallèle et fusionne le jeu de résultats à la fin.

  2. Il fait la plupart de son fonctionnement en mémoire.

  3. Il utilise hdfs pour son stockage qui est rapide pour les gros fichiers. Il met en cache autant que possible les requêtes, les résultats et les données.

  4. Il prend en charge un nouveau format de fichier comme parquet, qui est un format de fichier en colonnes. Donc, si vous utilisez ce format, ce sera plus rapide pour les requêtes où vous n'accédez qu'à quelques colonnes la plupart du temps.

6
Animesh Raj Jha