web-dev-qa-db-fra.com

Pourquoi Presto est plus rapide que Spark SQL

Pourquoi Presto est-il plus rapide que Spark SQL? Quelle est la différence entre Presto et Spark SQL dans les architectures informatiques et la gestion de la mémoire)?

9
Long.zhao

En général, il est difficile de dire si Presto est nettement plus rapide ou plus lent que Spark SQL. Cela dépend vraiment du type de requête que vous exécutez, de l'environnement et des paramètres de réglage du moteur. Je vois dans l'industrie ( ber , Neflix exemples) Presto est utilisé comme analyse SQL ad-hock alors que Spark pour les pipelines ETL/ML .

Une explication possible, il n'y a pas beaucoup de frais généraux pour planifier une requête pour Presto. Le coordinateur Presto est toujours opérationnel et attend la requête. D'un autre côté, Spark fait une approche paresseuse. Il faut du temps au pilote pour négocier avec le gestionnaire de cluster les ressources, copier les pots et démarrer le traitement.

Un autre que l'architecture Presto assez simple. Il a un coordinateur qui effectue l'analyse SQL, la planification, la planification et un ensemble de travailleurs qui exécutent un plan physique.

enter image description here

D'autre part, Spark core a beaucoup plus de couches entre les deux. Outre les étapes de Presto, Spark SQL doit faire face à une construction de résilience dans RDD, faire la gestion des ressources et la négociation pour les emplois.

enter image description here

Veuillez également noter que Spark SQL a un optimiseur basé sur les coûts qui fonctionne mieux sur les requêtes complexes. Alors que Presto (0.199) a un optimiseur basé sur des règles héritées. Il y a un effort contin = pour apporter CBO à Presto qui pourrait potentiellement battre Spark performances SQL.

22
Sayat Satybald

Je pense que la principale différence est que l'architecture de Presto est très similaire à un moteur SQL MPP. Cela signifie qu'il est hautement optimisé uniquement pour l'exécution de requêtes SQL vs Spark étant un cadre d'exécution à usage général capable d'exécuter plusieurs charges de travail différentes telles que ETL, Machine Learning, etc.

De plus, un compromis de Presto pour réduire la latence des requêtes SQL est de ne pas se soucier de la tolérance aux pannes en milieu de requête. Si l'un des nœuds de travail Presto rencontre une défaillance (par exemple, s'arrête) dans la plupart des cas, les requêtes en cours seront abandonnées et devront être redémarrées. Spark d'autre part prend en charge la tolérance aux pannes à mi-requête et peut se remettre d'une telle situation, mais pour ce faire, il doit faire une comptabilité supplémentaire et essentiellement "planifier l'échec". Cette surcharge entraîne un ralentissement des performances lorsque votre cluster ne rencontre aucun défaut.

Position: Presto met l'accent sur la requête, cependant spark accent sur le calcul.

Stockage de mémoire: Les deux sont un stockage de mémoire et des calculs, spark écrit les données sur le disque quand il ne peut pas obtenir suffisamment de mémoire, mais il faut tout de même conduire au MOO.

Tâches, ressources: Le spark valide les tâches et applique des ressources en temps réel à chaque étape (cette stratégie peut entraîner une vitesse de traitement légèrement plus lente par rapport à presto); Presto s'applique à toutes les ressources requises et valide toutes les tâches une fois.

Traitement des données: Dans spark, les données doivent être entièrement traitées avant de passer à l'étape suivante. Presto est un mode de traitement de pipeline par lots (page). Tant que la page est terminée, elle peut être envoyée à la tâche suivante (cette approche réduit considérablement le temps de réponse de bout en bout de diverses requêtes).

Tolérance aux pannes de données: si spark échoue ou perd des données, elles seront recalculées en fonction de la parenté. Mais presto entraînera l'échec de la requête.

6
Long.zhao