Revenir au contenu principal

Sortie de la préversion publique de Photon, le moteur de requête nouvelle génération de la plateforme lakehouse Databricks

photon-blog-og

Published: June 17, 2021

Annonces7 min de leitura

Databricks Photon est désormais en disponibilité générale sur AWS et Azure.

Aujourd'hui, nous sommes ravis d'annoncer la disponibilité de Photon en préversion publique. Photon est un moteur vectorisé natif développé en C++ pour améliorer considérablement les performances de query. Pour profiter de la puissance de Photon, il vous suffit de l'activer. Photon coordonne les tâches et les ressources en toute fluidité pour accélérer des portions de vos requêtes SQL et Spark. Sans aucun ajustement ni aucune intervention de l'utilisateur.


 <a href="https://www.databricks.com/resources/ebook/rise-data-lakehouse?itm_data=photonpublicpreviewengine-blog-riselakehousebook" target="_blank">Découvrez pourquoi les lakehouses sont l'architecture de données du futur</a> avec le père du data warehouse, Bill Inmon.</p><hr><p>Bien que le nouveau moteur soit conçu pour, à terme, accélérer toutes les charges de travail, pendant la préversion, Photon vise principalement à exécuter plus rapidement les charges de travail SQL, tout en réduisant votre coût total par charge de travail. Il existe deux manières de bénéficier de Photon&nbsp;:</p><ul><li>En tant que moteur de requêtes par défaut sur <a href="https://www.databricks.com/product/databricks-sql" rel="noopener" target="_blank">Databricks SQL</a>, sans frais supplémentaires</li><li>Dans le cadre d'un nouveau <a href="https://docs.databricks.com/runtime/index.html" rel="noopener" target="_blank">runtime </a>à hautes performances sur les clusters Databricks, qui <a href="https://www.databricks.com/product/aws-pricing/instance-types" rel="noopener" target="_blank">consomme les DBU à un taux différent </a>de celui du même type d'instance exécutant le runtime non-Photon.</li></ul><p>Dans cet article de blog, nous aborderons la motivation derrière la création de Photon, nous expliquerons son fonctionnement interne et la manière de surveiller l'exécution de la requête dans Photon depuis Databricks SQL et les clusters traditionnels sur Databricks Data Science &amp; Data Engineering.</p><h2>Plus rapide avec Photon</h2><p>On pourrait se demander : pourquoi créer un nouveau moteur de requêtes ? On dit qu'un graphique en barres vaut mille mots, alors laissons les données parler d'elles-mêmes.</p><figure><a href="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-1.png" data-lightbox><img class="size-full wp-image-159095" style="width:1600px;" src="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-1.png" alt="Accélération relative de Databricks Runtime avec Photon par rapport à la version 2.1 en utilisant TPC-DS 1 To" height="803"></a><figcaption>Image 1 : Accélération relative du Databricks Runtime par rapport à la version 2.1 avec TPC-DS 1 To.</figcaption></figure><p>Comme vous pouvez le voir sur ce graphique des performances de Databricks Runtime à l'aide du Power Test du benchmark TPC-DS (facteur d'échelle de 1 To), les performances ont augmenté de manière constante au fil des ans. Cependant, avec l'introduction de Photon, nous constatons un bond en avant considérable dans les performances des requêtes : Photon est jusqu'à 2 fois plus rapide que Databricks Runtime 8.0. C'est pourquoi nous sommes très enthousiastes quant au potentiel de Photon, et ce n'est qu'un début : la Feuille de route de Photon prévoit une couverture plus étendue et davantage d'optimisations.</p><p>Les premiers clients de la préversion privée ont observé des accélérations moyennes de 2 à 4 fois en utilisant Photon sur des charges de travail SQL telles que&nbsp;:</p><ul><li><strong>Jobs basés sur SQL</strong> - Accélérez les Jobs de production à grande échelle sur les DataFrames SQL et Spark.</li><li><strong>Cas d'utilisation de l'IoT</strong> - Analyse de séries temporelles plus rapide à l'aide de Photon par rapport à Spark et au Databricks Runtime traditionnel.</li><li><strong>Confidentialité et conformité des données</strong> - Interrogez des jeux de données à l'échelle du pétaoctet pour identifier et supprimer des enregistrements sans dupliquer les données avec Delta Lake, les Jobs de production et Photon.</li><li><strong>Chargement des données dans Delta et Parquet</strong>&nbsp;: l'I/O vectorisé de Photon accélère le chargement des données pour les tables Delta et Parquet, réduisant ainsi le temps d'exécution global et les coûts des Data Engineering Jobs.</li></ul><h2>Fonctionnement de Photon</h2><p>Bien que Photon soit écrit en C++, il s'intègre directement dans et avec Databricks Runtime et Spark. Cela signifie qu'aucune modification du code n'est nécessaire pour utiliser Photon. Laissez-moi vous présenter rapidement le « cycle de vie d'une query » pour vous aider à comprendre où Photon intervient.</p><figure><a href="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-2.png" data-lightbox><img class="size-full wp-image-159097" style="width:1280px;" src="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-2.png" alt="Image 2 - Cycle de vie d'une query Photon" height="720"></a><figcaption>Image 2 : Cycle de vie d'une query Photon</figcaption></figure><p>Lorsqu'un client soumet une query ou une commande donnée au driver Spark, celle-ci est analysée et l'optimiseur <a href="https://www.databricks.com/glossary/catalyst-optimizer" rel="noopener" target="_blank">Catalyst</a> effectue l'analyse, la planification et l'optimisation comme il le ferait si Photon n'était pas impliqué. La seule différence est qu'avec Photon, le moteur d'exécution parcourt le plan physique et détermine les parties qui peuvent s'exécuter dans Photon. Des modifications mineures peuvent être apportées au plan pour Photon, par exemple la transformation d'une jointure par fusion-tri en jointure par hachage, mais la structure globale du plan, y compris l'ordre des jointures, restera la même. Comme Photon ne prend pas encore en charge toutes les fonctionnalités de Spark, une même requête peut s'exécuter partiellement dans Photon et partiellement dans Spark. Ce modèle d'exécution hybride est totalement transparent pour l'utilisateur.</p><p>Le plan de query est ensuite décomposé en unités atomiques d'exécution distribuée appelées tâches, qui sont exécutées dans des threads sur des nœuds worker et qui opèrent sur une partition spécifique des données. C'est à ce niveau que le moteur Photon intervient. Vous pouvez le considérer comme le remplacement du whole stage codegen de Spark par une implémentation de moteur natif. La bibliothèque Photon est chargée dans la JVM, et Spark et Photon communiquent via <a href="https://en.wikipedia.org/wiki/Java_Native_Interface" rel="noopener" target="_blank">JNI</a>, en transmettant des pointeurs de données vers la mémoire hors tas. Photon s'intègre également au gestionnaire de mémoire de Spark pour un spilling coordonné dans les plans mixtes. Spark et Photon sont tous deux configurés pour utiliser la mémoire hors tas et se coordonner en cas de pression sur la mémoire.</p><p>Avec la version d'évaluation publique, Photon prend en charge de nombreux types de données, opérateurs et expressions, mais pas tous. Pour plus de détails, consultez la <a href="https://docs.databricks.com/runtime/photon.html" rel="noopener" target="_blank">présentation de Photon</a> dans la documentation.</p>

Analyse de l'exécution de Photon

Étant donné que toutes les charges de travail et tous les opérateurs ne sont pas pris en charge aujourd'hui, vous vous demandez peut-être comment choisir les charges de travail qui peuvent bénéficier de Photon et comment détecter la présence de Photon dans le plan d'exécution. En bref, l'exécution de Photon est ascendante : elle commence à l'opérateur d'analyse de table et remonte le DAG (graphe orienté acyclique) jusqu'à ce qu'elle rencontre une opération non prise en charge. À ce stade, l'exécution quitte Photon, et le reste des opérations s'exécuteront sans Photon.

  1. Si vous utilisez Photon sur Databricks SQL, il est facile de voir quelle part d'une query a été exécutée à l'aide de Photon :

     

  2. Cliquez sur l'icône Historique des requêtes dans la barre latérale.
  3. Cliquez sur la ligne contenant la requête que vous souhaitez analyser.
  4. Dans la fenêtre contextuelle Détails de la requête, cliquez sur Détails de l'exécution.
  5. Examinez la métrique Task Time in Photon en bas de la page.

En général, plus le pourcentage de temps de tâche dans Photon est élevé, plus le gain de performance de Photon est important.

Détails d'exécution de l'historique des requêtes Databricks SQL
Image 3 : Détails d'exécution de l'historique des requêtes SQL de Databricks

Si vous utilisez Photon sur des clusters Databricks, vous pouvez voir l'action de Photon dans la Spark UI. La capture d'écran suivante montre le DAG des détails de la requête. Il y a deux indications de Photon dans le DAG. Premièrement, les opérateurs Photon commencent par Photon, comme PhotonGroupingAgg. Deuxièmement, dans le DAG, les opérateurs et les étapes Photon sont de couleur pêche, tandis que ceux qui ne sont pas Photon sont bleus.

DAG des détails de la query de l'interface utilisateur Spark
Image 4 : DAG des détails de la requête dans l'interface utilisateur Spark

Démarrer avec un exemple fonctionnel sur les données des taxis de NYC

Comme nous l'avons vu plus haut, il existe deux façons d'utiliser Photon :

  1. Photon est activé par défaut pour tous les points de terminaison SQL de Databricks. Il vous suffit de provisionner un SQL endpoint, d'exécuter vos queries et d'utiliser la méthode présentée ci-dessus pour déterminer l'impact de Photon sur les performances.
  2. Pour exécuter Photon sur des clusters Databricks (uniquement sur AWS pendant la préversion publique), sélectionnez un runtime Photon lors du provisionnement d'un nouveau cluster. Le nouveau type d'instance Photon consomme des DBU à un taux différent de celui du même type d'instance exécutant le runtime non-Photon. Pour plus de détails sur les spécificités des instances Photon et la consommation de DBU, consultez la page des Tarifs Databricks pour AWS.

Une fois que vous avez créé un point de terminaison SQL ou un cluster compatible Photon, vous pouvez essayer d'exécuter quelques requêtes sur le dataset NYC Taxi depuis l'éditeur SQL de Databricks ou un notebook. Nous avons préchargé un extrait et l'avons rendu accessible dans le cadre de nos datasets Databricks.

Tout d'abord, créez une nouvelle table pointant vers les données existantes avec l'extrait de code SQL suivant :

Essayez cette query et découvrez la vitesse de Photon !

Nous avons mesuré le temps de réponse de la query ci-dessus avec Photon et un Databricks Runtime conventionnel sur un cluster AWS préchauffé avec 2 exécuteurs i3.2xlarge et un driver i3.2xlarge. Voici les résultats.

 Photon vs. Databricks Runtime sur un exemple de query sur les taxis de New York
Image 5 : Photon vs Databricks Runtime sur l'exemple de query des taxis de NYC

Si vous souhaitez en savoir plus sur Photon, vous pouvez également visionner notre session du Data and AI Summit : Radical speed for SQL Queries Photon Under the Hood. Merci de votre lecture, nous attendons vos retours avec impatience !

Ne manquez jamais un article Databricks

Abonnez-vous à notre blog et recevez les derniers articles dans votre boîte mail.

Et ensuite ?

Introducing AI/BI: Intelligent Analytics for Real-World Data

Produto

June 12, 2024/11 min de leitura

Apresentando o AI/BI: analítica inteligente para dados do mundo real

Five Simple Steps for Implementing a Star Schema in Databricks With Delta Lake

Produto

September 12, 2024/8 min de leitura

Cinco etapas simples para implementar um esquema de estrela na Databricks com Delta Lake