Co to jest Photon?

Photon to natywny dla Azure Databricks wektoryzowany silnik zapytań, który przyspiesza obciążenia SQL, wywołania interfejsu API DataFrame, procesy ETL i bezstanowe obciążenia przetwarzania strumieniowego. Photon przetwarza dane partiami kolumn, co zapewnia znaczący wzrost wydajności w porównaniu z tradycyjnym wykonywaniem opartym na wierszach. Aplikacja Photon jest również zgodna z interfejsami API platformy Apache Spark, dlatego działa z istniejącym kodem bez konieczności wprowadzania zmian.

Jak działa aplikacja Photon

W przypadku obsługiwanych operacji Photon zastępuje silnik wykonywania Spark SQL oparty na JVM natywnym środowiskiem wykonawczym C++. Optymalizator zapytań Apache Spark (Catalyst) nadal planuje zapytanie, ale na warstwie wykonawczej kontrolę przejmuje Photon, przetwarzając dane w partiach kolumnowych zamiast wiersz po wierszu. Gdy Photon napotka nieobsługiwaną operację podczas wykonywania zapytania, automatycznie przechodzi do środowiska wykonawczego Spark w dalszej części tej operacji.

Photon przetwarza dane w partiach po tysiące wierszy jednocześnie, umożliwiając nowoczesnym procesorom korzystanie z instrukcji SIMD, które przetwarzają wiele wartości w jednym cyklu procesora. Działając jako natywny kod C++ zamiast na maszynie JVM, Photon eliminuje przerwy związane z odśmiecaniem pamięci, opóźnienia związane z rozgrzewaniem JIT oraz narzut pamięci. Kolumnowe przetwarzanie wsadowe umożliwia sekwencyjne odczyty sprzyjające wykorzystaniu pamięci podręcznej, co maksymalizuje przepustowość pamięci i wydajność potokową CPU.

Architektura Photon poprawia wydajność na wiele sposobów:

  • Przyspieszanie zapytań: Aplikacja Photon zapewnia maksymalnie 5-krotną lepszą cenę/wydajność obciążeń danych i analiz w porównaniu z innymi magazynami danych w chmurze mierzonymi według standardowych w branży testów porównawczych TPC-DS.
  • Zoptymalizowane łączenia i tasowanie: zastępuje łączenia typu sort-merge wysokowydajnymi łączeniami haszującymi i wykorzystuje przeprojektowany kolumnowy mechanizm tasowania, aby zwiększyć przepustowość łączeń na dużą skalę.
  • Wydajność zapisu: Natywny moduł zapisujący Parquet w Photon przyspiesza zapisy do Delta Lake, Apache Iceberg i Parquet, w tym operacje UPDATE, DELETE, MERGE INTO, INSERT i CREATE TABLE AS SELECT. Szerokie tabele z tysiącami kolumn widzą szczególnie znaczące ulepszenia.
  • Wydajność skanowania: implementuje wypychanie filtrów, oczyszczanie słownika i pomijanie grup wierszy w celu zmniejszenia odczytu danych z magazynu, nawet w przypadku obsługi wielu małych plików.
  • Pamięć podręczna dysku i współbieżność: zapewnia szybszy powtarzany dostęp za pośrednictwem pamięci podręcznej dysku i zwiększa przepływność współbieżnych zapytań w interakcyjnych obciążeniach analizy biznesowej.
  • Integracja z interfejsami API SQL i DataFrame: Obsługuje interfejsy API SQL i DataFrame w językach Python, R, Scala i Java bez konieczności wprowadzania zmian w kodzie.

Aplikacja Photon zapewnia największą korzyść w przypadku długotrwałych zapytań, które przetwarzają duże zestawy danych. Zapytania, które zwykle kończą się w czasie krótszym niż dwie sekundy, nie odnotowują istotnej poprawy, ponieważ czas wykonywania wynika głównie z narzutu związanego z planowaniem i harmonogramowaniem, a nie z przetwarzania danych.

Integracja z platformą Azure Databricks

Photon przyspiesza obciążenia na platformie Azure Databricks. Nie musisz zmieniać kodu ani zapytań, aby korzystać z aplikacji Photon.

  • Analityka SQL i BI: Photon jest domyślnym silnikiem we wszystkich magazynach SQL, obsługując pulpity, zapytania ad hoc i zaplanowane raporty.
  • ETL i inżynieria danych: Zadania wsadowe tworzone przy użyciu języka SQL lub interfejsu API DataFrame działają wydajniej podczas skanowania, łączenia, agregacji i zapisu danych. Natywny moduł zapisu Parquet szczególnie dobrze sprawdza się przy ładowaniu danych do tabel Delta Lake, Apache Iceberg lub Parquet.
  • Lakeflow Spark Declarative Pipelines: Włączenie funkcji Photon w konfiguracji potoku pomaga przyspieszyć działanie Lakeflow Spark Declarative Pipelines.
  • Przesyłanie strumieniowe: Aplikacja Photon obsługuje przesyłanie strumieniowe bezstanowe podczas zapisywania w ujściu delty lub Parquet. Obsługiwane źródła to Delta, Parquet, CSV, JSON, Kafka i Kinesis. Strumieniowanie stanowe nie jest obsługiwane.
  • Sztuczna inteligencja i uczenie maszynowe: aplikacja Photon poprawia wydajność operacji Spark SQL, DataFrames, inżynierii cech i elementów GraphFrames.

Włączanie funkcji Photon

Photon jest zawsze włączony w środowiskach obliczeniowych bezserwerowych, magazynach SQL oraz bezserwerowych potokach deklaratywnych Lakeflow Spark.

W przypadku klasycznych zasobów obliczeniowych ogólnego przeznaczenia, zasobów obliczeniowych dla zadań oraz klasycznych potoków Lakeflow Spark Declarative Pipelines funkcja Photon jest domyślnie włączona, a podczas tworzenia lub edytowania zasobów obliczeniowych można ją włączyć lub wyłączyć za pomocą pola wyboru Użyj akceleracji Photon w sekcji Wydajność. Zobacz Korzystanie z akceleracji Photon. Jeśli te zasoby są tworzone przy użyciu interfejsu API klastrów lub interfejsu API zadań, musisz jawnie włączyć funkcję Photon, ustawiając wartość runtime_enginePHOTON. Jeśli używasz interfejsu Pipelines API, ustaw photon na true.

Funkcje wymagające włączenia aplikacji Photon

Następujące funkcje wymagają włączenia aplikacji Photon:

Obsługiwane typy wystąpień

Photon obsługuje wiele typów wystąpień na węzłach sterowników i węzłach obliczeniowych. Typy instancji Photon zużywają jednostki DBU w innym tempie niż instancje tego samego typu działające w środowisku innym niż Photon. Aby uzyskać więcej informacji na temat wystąpień Photon i użycia jednostek DBU, odwiedź stronę cennika Azure Databricks.

Obsługiwane operatory, wyrażenia i typy danych

Photon obejmuje następujące operatory, wyrażenia i typy danych. Gdy zapytanie obejmuje nieobsługiwaną operację, Photon automatycznie przełącza się na środowisko uruchomieniowe Spark dla tej części wykonywania zapytania.

Operatorzy

  • Scan (Parquet, Delta, CSV, JSON), Filter, Project
  • Haszowanie/Agregowanie/Łączenie/Tasowanie
  • Nested-Loop Dołącz
  • Null-Aware antyłączenie
  • Złączenie przestrzenne (warianty rozgłaszane i tasowane obsługujące ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within i ST_DWithin)
  • Połączenie, Rozszerzenie, PodzapytanieSkalarne
  • Zlewnia zapisu Delta/Parquet
  • Sort, TopK, Limit
  • Funkcja okna

Wyrażenia

Te kategorie są reprezentatywne, a nie wyczerpujące. Poszczególne funkcje w każdej kategorii mogą mieć ograniczenia.

  • Porównanie/logika
  • Arytmetyka/matematyka
  • Warunkowe (IF, CASE itp.)
  • String
  • Rzutowanie
  • Agregacje, w tym Min/Max/MinBy/MaxBy dla typów zagnieżdżonych
  • Data/Znacznik czasu/Format daty

Typy danych

  • Bajt/Krótki/Całkowity/Długi
  • logiczny
  • Ciąg/plik binarny
  • liczba dziesiętna
  • Zmiennoprzecinkowy/podwójny
  • Znacznik daty/godziny
  • TimestampNTZ
  • Struktura
  • Tablica
  • Mapa
  • Variant
  • Null
  • Geometria
  • Geografia
  • Ciąg z uwzględnieniem sortowania

Monitorowanie użycia aplikacji Photon

Możesz monitorować liczbę przebiegów zapytania w aplikacji Photon przy użyciu następujących narzędzi:

  • Interfejs użytkownika platformy Spark (klasyczne obliczenia wszystkich celów i zadań): na karcie SQL/DataFrame interfejsu użytkownika platformy Spark operatory Photon są wyświetlane w kolorze pomarańczowym w wizualizacji języka DAG zapytania. Standardowe operatory platformy Spark są wyświetlane na niebiesko. Pomaga to określić, które części zapytania korzystają z aplikacji Photon i które wracają do środowiska uruchomieniowego platformy Spark.
  • Profil zapytania (magazyny SQL i obliczenia bezserwerowe): widok Szczegóły wykonywania pokazuje procent czasu zadania spędzonego w aplikacji Photon. Plan zapytania odróżnia operatory Photon (fioletowe) od standardowych operatorów (szarych).

Jeśli zauważysz, że zapytanie nie używa Photon zgodnie z oczekiwaniami, sprawdź, czy w zapytaniu używane są nieobsługiwane operacje, funkcje UDF lub formaty danych, które powodują powrót do środowiska uruchomieniowego Spark.

Ograniczenia

  • Jeśli obciążenie natrafi na nieobsługiwaną operację, zasób obliczeniowy automatycznie przełączy się na środowisko uruchomieniowe Spark na pozostały czas trwania tej operacji. Zapytanie nadal generuje poprawne wyniki.
  • Photon nie obsługuje funkcji UDF (funkcji definiowanych przez użytkownika), interfejsów API RDD ani interfejsów API zbiorów danych.
  • Strumieniowanie stanowe nie jest obsługiwane. Aplikacja Photon obsługuje tylko bezstanowe przesyłanie strumieniowe.
  • Photon nie przyspiesza zapytań, które zwykle wykonują się w mniej niż dwie sekundy.