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 :</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 & 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 :</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> : 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>
É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.
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 :
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.

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.

Comme nous l'avons vu plus haut, il existe deux façons d'utiliser Photon :
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.

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 !
Restez en contact avec nous
Recommandé pour vous
Annonces
June 17, 2021/7 min de leitura
Produto
June 12, 2024/11 min de leitura
Produto
September 12, 2024/8 min de leitura