Passa al contenuto principale

Anteprima pubblica di Photon: il motore di query di nuova generazione sulla Databricks Lakehouse Platform

photon-blog-og

Pubblicato: June 17, 2021

Annunci6 min di lettura

Databricks Photon è ora disponibile a livello generale su AWS e Azure.

Oggi siamo entusiasti di annunciare la disponibilità di Photon in anteprima pubblica. Photon è un motore vettorizzato nativo sviluppato in C++ per migliorare notevolmente le prestazioni delle query. Per cogliere i vantaggi di Photon basta solo iniziare a utilizzarlo. Photon coordinerà lavoro e risorse in modo pienamente integrato e accelererà in maniera trasparente porzioni delle query SQL e Spark. Non servono aggiustamenti né interventi dell'utente.


 <a href="https://www.databricks.com/resources/ebook/rise-data-lakehouse?itm_data=photonpublicpreviewengine-blog-riselakehousebook" target="_blank">Scopri perché le lakehouse sono l'architettura dei dati del futuro</a> con il padre del data warehouse, Bill Inmon.</p><hr><p>Il nuovo motore è progettato per accelerare tutti i carichi di lavoro, ma in fase di anteprima Photon è ottimizzato per l'esecuzione più rapida dei carichi di lavoro SQL, riducendo al contempo il costo totale per ogni carico di lavoro. Esistono due modi per trarre vantaggio da Photon:</p><ul><li>Come motore di query default su <a href="https://www.databricks.com/product/databricks-sql" rel="noopener" target="_blank">Databricks SQL</a> senza costi aggiuntivi</li><li>Come parte di un nuovo <a href="https://docs.databricks.com/runtime/index.html" rel="noopener" target="_blank">runtime </a>ad alte prestazioni sui Databricks clusters, che <a href="https://www.databricks.com/product/aws-pricing/instance-types" rel="noopener" target="_blank">consuma DBU a una velocità diversa </a>rispetto allo stesso tipo di istanza che esegue il runtime non Photon.</li></ul><p>In questo blog discuteremo la motivazione alla base della creazione di Photon, spiegheremo il suo funzionamento interno e come monitorare l'esecuzione delle query in Photon sia da Databricks SQL che dai cluster tradizionali su Databricks Data Science &amp; Data ingegneria.</p><h2>Più veloce con Photon</h2><p>Ci si potrebbe chiedere: perché creare un nuovo motore di query? Si dice che un grafico a barre valga più di mille parole, quindi lasciamo che siano i dati a raccontare la storia.</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="Accelerazione relativa di Databricks Runtime con Photon rispetto alla versione 2.1 utilizzando TPC-DS 1TB" height="803"></a><figcaption>Immagine 1: speedup relativo di Databricks Runtime rispetto alla versione 2.1 utilizzando TPC-DS da 1 TB</figcaption></figure><p>Come si può vedere da questo grafico delle prestazioni di Databricks Runtime utilizzando il Power Test del benchmark TPC-DS (fattore di scala 1 TB), le prestazioni sono aumentate costantemente nel corso degli anni. Tuttavia, con l'introduzione di Photon, si assiste a un enorme balzo in avanti nelle prestazioni delle query: Photon è fino a 2 volte più veloce di Databricks Runtime 8.0. Ecco perché siamo molto entusiasti del potenziale di Photon e siamo solo all'inizio: la roadmap di Photon contiene piani per una maggiore copertura e ulteriori ottimizzazioni.</p><p>I primi clienti dell'anteprima privata hanno osservato un'accelerazione media da 2 a 4 volte utilizzando Photon su carichi di lavoro SQL come:</p><ul><li><strong>Job basati su SQL</strong> - Accelera i Job di produzione su larga scala su SQL e DataFrames di Spark.</li><li><strong>Casi d'uso IoT</strong> - Analisi più rapida delle serie temporali con Photon rispetto a Spark e al tradizionale Databricks Runtime.</li><li><strong>Privacy dei dati e conformità</strong> - Esegui query su set di dati su scala petabyte per identificare ed eliminare record senza duplicare i dati con Delta Lake, processi di produzione e Photon.</li><li><strong>Caricamento di dati in Delta e Parquet</strong> - L'I/O vettorizzato di Photon accelera i caricamenti di dati per le tabelle Delta e Parquet, riducendo il tempo di esecuzione complessivo e i costi dei Job di Data ingegneria.</li></ul><h2>Come funziona Photon</h2><p>Sebbene Photon sia scritto in C++, si integra direttamente in e con Databricks Runtime e Spark. Ciò significa che non sono necessarie modifiche al codice per utilizzare Photon. Lascia che ti illustri un rapido "ciclo di vita di una query" per aiutarti a capire dove si inserisce Photon.</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="Immagine 2 - Ciclo di vita di una query Photon" height="720"></a><figcaption>Immagine 2: Ciclo di vita di una query Photon</figcaption></figure><p>Quando un client invia una determinata query o un comando al driver Spark, questo viene analizzato e l'ottimizzatore <a href="https://www.databricks.com/glossary/catalyst-optimizer" rel="noopener" target="_blank">Catalyst</a> esegue l'analisi, la pianificazione e l'ottimizzazione proprio come farebbe se non fosse coinvolto Photon. L'unica differenza è che con Photon il motore di runtime esamina il piano fisico e determina quali parti possono essere eseguite in Photon. Al piano per Photon possono essere apportate piccole modifiche, ad esempio, cambiando un sort merge join in un hash join, ma la struttura complessiva del piano, incluso l'ordine dei join, rimarrà la stessa. Dato che Photon non supporta ancora tutte le funzionalità di Spark, una singola query può essere eseguita parzialmente in Photon e parzialmente in Spark. Questo modello di esecuzione ibrido è completamente trasparente per l'utente.</p><p>Il piano della query viene quindi suddiviso in unità atomiche di esecuzione distribuita chiamate task, che vengono eseguite in thread su nodi worker e operano su una partizione specifica dei dati. È a questo livello che il motore Photon svolge il suo lavoro. Lo si può considerare come la sostituzione della whole stage codegen di Spark con un'implementazione del motore nativo. La libreria Photon viene caricata nella JVM e Spark e Photon comunicano tramite <a href="https://en.wikipedia.org/wiki/Java_Native_Interface" rel="noopener" target="_blank">JNI</a>, passando puntatori di dati alla memoria off-heap. Photon si integra anche con il gestore della memoria di Spark per lo spilling coordinato nei piani misti. Sia Spark che Photon sono configurati per utilizzare la memoria off-heap e si coordinano in condizioni di pressione sulla memoria.</p><p>Con la release di anteprima pubblica, Photon supporta molti, ma non tutti, i tipi di dati, gli operatori e le espressioni. Per maggiori dettagli, consulta la <a href="https://docs.databricks.com/runtime/photon.html" rel="noopener" target="_blank">panoramica di Photon</a> nella documentazione.</p><h2>Analisi dell'esecuzione di Photon</h2><p>Dato che non tutti i carichi di lavoro e gli operatori sono attualmente supportati, potresti chiederti come scegliere i carichi di lavoro che possono trarre vantaggio da Photon e come rilevarne la presenza nel piano di esecuzione. In breve, l'esecuzione di Photon è di tipo bottom-up: inizia dall'operatore di scansione della tabella e risale il DAG (grafo aciclico diretto) finché non incontra un'operazione non supportata. A quel punto, l'esecuzione esce da Photon e il resto delle attività operative verrà eseguito senza Photon.</p><ol><li><p>Se utilizzi Photon su Databricks SQL, è facile vedere quale parte di una query è stata eseguita utilizzando Photon:</p><p>&nbsp;</p></li><li>Fai clic sull'icona <strong>Cronologia query</strong> nella barra laterale.</li><li>Fai clic sulla riga contenente la query che desideri analizzare.</li><li>Nel pop-up Dettagli query, fai clic su <strong>Dettagli di esecuzione</strong>.</li><li>Guarda la metrica <strong>Task Time in Photon</strong> in basso.</li></ol><p>In generale, maggiore è la percentuale di tempo di esecuzione in Photon, maggiore sarà il vantaggio in termini di prestazioni offerto da Photon.</p><figure><a href="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-3.jpg" data-lightbox><img class="size-full wp-image-159098" style="width:1200px;" src="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-3.jpg" alt="Dettagli di esecuzione della cronologia delle query di Databricks SQL" height="773"></a><figcaption>Immagine 3: Dettagli di esecuzione della cronologia query di Databricks SQL</figcaption></figure><p>Se si utilizza Photon su cluster Databricks, è possibile visualizzare l'azione di Photon nell'interfaccia utente di Spark. La schermata seguente mostra il DAG dei dettagli della query. Ci sono due indicazioni di Photon nel DAG. Innanzitutto, gli operatori Photon iniziano con Photon, come PhotonGroupingAgg. In secondo luogo, nel DAG gli operatori e gli stadi di Photon sono colorati di pesca, mentre quelli non-Photon sono blu.</p><figure><a href="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-4-rev.png" data-lightbox><img class="size-medium wp-image-159280" style="width:103px;" src="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-4-rev-103x300.png" alt="DAG dettagli query dell'interfaccia utente di Spark" height="300"></a><figcaption>Immagine 4: DAG dei dettagli della query nell'interfaccia utente di Spark</figcaption></figure><h2>Guida introduttiva con un esempio funzionante sui dati dei taxi di New York</h2><p>Come discusso in precedenza, esistono due modi per utilizzare Photon:</p><ol><li>Photon è attivo per impostazione predefinita per tutti gli endpoint SQL di Databricks. È sufficiente <a href="https://docs.databricks.com/sql/admin/sql-endpoints.html" rel="noopener" target="_blank">effettuare il provisioning di un endpoint SQL</a>, eseguire le proprie query e utilizzare il metodo presentato sopra per determinare l'impatto di Photon sulle prestazioni.</li><li>Per eseguire Photon su cluster Databricks (solo AWS durante l'anteprima pubblica), <a href="https://docs.databricks.com/clusters/configure.html#databricks-runtime" rel="noopener" target="_blank">seleziona un runtime Photon durante il provisioning di un nuovo cluster</a>. Il nuovo tipo di istanza Photon consuma DBU a una velocità diversa rispetto allo stesso <a href="https://www.databricks.com/product/aws-pricing/instance-types" rel="noopener" target="_blank">tipo di istanza</a> che esegue il runtime non Photon. Per maggiori dettagli sulle specifiche delle istanze Photon e sul consumo di DBU, consultare la <a href="https://www.databricks.com/product/aws-pricing/instance-types" rel="noopener" target="_blank">pagina dei prezzi di Databricks per AWS</a>.</li></ol><p>Una volta creato un SQL endpoint o un cluster abilitato per Photon, è possibile provare a eseguire alcune query sul <a href="https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page" rel="noopener" target="_blank">set di dati dei taxi di New York</a> dall'editor Databricks SQL o da un Notebook. Abbiamo precaricato un estratto e lo abbiamo reso accessibile come parte dei nostri <a href="https://docs.databricks.com/data/databricks-datasets.html" rel="noopener" target="_blank">set di dati Databricks</a>.</p><p>Per prima cosa, crea una nuova tabella che punti ai dati esistenti con il seguente snippet SQL:</p><pre>&lt;code class="language-plaintext"&gt; CREATE DATABASE IF NOT EXISTS photon_demo; CREATE TABLE photon_demo.nyctaxi_yellowcab_table USING DELTA OPTIONS ( path "/databricks-set di dati/nyctaxi/tables/nyctaxi_yellow/" ); &lt;/code&gt;</pre><p>Prova questa query e goditi la velocità di Photon!</p><pre>&lt;code class="language-plaintext"&gt; SELECT vendor_id, SUM(trip_distance) as SumTripDistance, AVG(trip_distance) as AvgTripDistance FROM photon_demo.nyctaxi_yellowcab_table WHERE passenger_count IN (1, 2, 4) GROUP BY vendor_id ORDER BY vendor_id; &lt;/code&gt;</pre><p>Abbiamo misurato il tempo di risposta della query precedente con Photon e un Databricks Runtime convenzionale su un cluster AWS preriscaldato con 2 executor i3.2xlarge e un driver i3.2xlarge. Ecco i risultati.</p><figure><a href="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-5.png" data-lightbox><img class="size-full wp-image-159101" style="width:1356px;" src="https://www.databricks.com/wp-content/uploads/2021/06/photon-pr-blog-img-5.png" alt=" Photon a confronto con Databricks Runtime sulla query di esempio dei taxi di NYC" height="772"></a><figcaption>Immagine 5: Photon vs. Databricks Runtime sulla query di esempio dei taxi di New York</figcaption></figure><p>Per saperne di più su Photon, è possibile guardare la sessione del nostro Data and AI Summit: <a href="https://www.databricks.com/session_na21/radical-speed-for-sql-queries-on-databricks-photon-under-the-hood" rel="noopener" target="_blank">Radical speed for SQL Queries Photon Under the Hood</a>. Grazie per la lettura, attendiamo il tuo feedback!</p>

Non perdere mai un post di Databricks

Iscriviti al nostro blog e ricevi gli ultimi post direttamente nella tua casella di posta elettronica.

Cosa succederà adesso?

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