Photon은 SQL 워크로드, DataFrame API 호출, ETL 파이프라인 및 상태 비주류 스트리밍 워크로드를 가속화하는 Azure Databricks 네이티브 벡터화된 쿼리 엔진입니다. Photon은 데이터를 열 형식 일괄 처리로 처리하여 기존 행 기반 실행보다 성능이 크게 향상되었습니다. Photon은 Apache Spark API와도 호환되므로 변경 없이 기존 코드에서 작동합니다.
Photon 작동 방식
지원되는 작업의 경우 Photon은 JVM 기반 Spark SQL 실행 엔진을 네이티브 C++ 런타임으로 바꿉니다. Apache Spark 쿼리 최적화 프로그램(Catalyst)은 여전히 쿼리를 계획하지만 Photon은 실행 계층에서 데이터를 행 단위가 아닌 열 형식 일괄 처리로 처리합니다. Photon이 쿼리 실행 중 지원되지 않는 작업을 감지하면 해당 작업의 나머지 부분은 Spark 런타임으로 투명하게 전환됩니다.
Photon은 한 번에 수천 개의 행을 일괄 처리하여 최신 CPU가 CPU 주기당 여러 값을 평가하는 SIMD 지침을 사용할 수 있도록 합니다. Photon은 JVM 대신 네이티브 C++에서 실행하여 가비지 수집 일시 중지, JIT 준비 지연 및 메모리 오버헤드를 제거합니다. 열 형식 일괄 처리를 사용하면 캐시 친화적인 순차 읽기를 가능하게 하여 메모리 대역폭 및 CPU 파이프라인 효율성을 최대화합니다.
Photon의 아키텍처는 다음과 같은 여러 가지 방법으로 성능을 향상시킵니다.
- 쿼리 가속: Photon은 업계 표준 TPC-DS 벤치마크로 측정한 다른 클라우드 데이터 웨어하우스에 비해 데이터 및 분석 워크로드에 대해 최대 5배 더 나은 가격/성능을 제공합니다.
- 최적화된 조인 및 순서 섞기: 정렬 병합 조인을 고성능 해시 조인으로 바꾸고 다시 디자인된 열 형식 순서 섞기를 사용하여 대규모 조인에 대한 처리량을 높입니다.
-
쓰기 성능: Photon 네이티브 Parquet 라이터는
UPDATE,DELETE,MERGE INTO,INSERT,CREATE TABLE AS SELECT작업을 포함한 Delta Lake, Apache Iceberg 및 Parquet에 대한 쓰기 작업을 가속화합니다. 수천 개의 열이 있는 폭이 넓은 테이블은 특히 큰 폭으로 개선되었습니다. - 검사 효율성: 많은 작은 파일을 처리하는 경우에도 스토리지에서 읽은 데이터를 줄이기 위해 필터 푸시다운, 사전 정리 및 행 그룹 건너뛰기를 구현합니다.
- 디스크 캐시 및 동시성: 디스크 캐시를 통해 더 빠른 반복 액세스를 제공하고 대화형 BI 워크로드의 동시 쿼리에 대한 처리량을 향상시킵니다.
- SQL 및 Dataframes API를 사용한 통합: 코드 변경 없이 Python, R, Scala 및 Java SQL 및 DataFrame API를 지원합니다.
Photon은 큰 데이터 세트를 처리하는 장기 실행 쿼리에 가장 큰 이점을 제공합니다. 일반적으로 2초 미만으로 완료되는 쿼리는 실행 시간이 데이터 처리가 아닌 오버헤드 계획 및 예약에 의해 지배되기 때문에 의미 있는 개선을 볼 수 없습니다.
Azure Databricks 플랫폼과의 통합
Photon은 Azure Databricks 플랫폼에서 워크로드를 가속화합니다. Photon을 활용하기 위해 코드 또는 쿼리를 변경할 필요가 없습니다.
- SQL 분석 및 BI: Photon은 모든 SQL 웨어하우스, 전원 대시보드, 임시 쿼리 및 예약된 보고서의 기본 엔진입니다.
- ETL 및 데이터 엔지니어링: SQL 또는 DataFrame API를 사용하여 빌드된 Batch 작업은 더 빠른 검색, 조인, 집계 및 쓰기를 통해 이점을 얻을 수 있습니다. 기본 제공 Parquet 작성기는 Delta Lake, Apache Iceberg 또는 Parquet 테이블로의 적재에 특히 효과적입니다.
- Lakeflow Spark 선언적 파이프라인: 파이프라인 구성에서 Photon을 사용하도록 설정하면 Lakeflow Spark 선언적 파이프라인 실행을 가속화하는 데 도움이 됩니다.
- 스트리밍: Photon은 Delta 또는 Parquet 싱크에 기록할 때 무상태 스트리밍을 지원합니다. 지원되는 원본에는 Delta, Parquet, CSV, JSON, Kafka 및 Kinesis가 포함됩니다. 상태 저장 스트리밍은 지원되지 않습니다.
- AI 및 기계 학습: Photon은 Spark SQL, DataFrames, 기능 엔지니어링 및 GraphFrames 작업의 성능을 향상시킵니다.
Photon 활성화
Photon은 항상 서버리스 컴퓨팅, SQL 웨어하우스 및 서버리스 Lakeflow Spark 선언적 파이프라인 파이프라인에서 사용하도록 설정됩니다.
클래식 다목적 컴퓨팅, 작업 컴퓨팅 및 클래식 Lakeflow Spark 선언적 파이프라인 파이프라인의 경우 Photon은 기본적으로 사용하도록 설정되며 컴퓨팅을 만들거나 편집할 때 성능 아래에서 Photon 가속 사용 확인란을 사용하여 전환할 수 있습니다.
Photon 가속 사용을 참조하세요.
Clusters API 또는 Jobs API를 사용하여 이러한 리소스를 생성하는 경우, runtime_engine를 PHOTON로 설정하여 Photon을 명시적으로 활성화해야 합니다.
Pipelines API를 사용하는 경우, photon를 true로 설정합니다.
Photon 사용이 필요한 기능
다음 기능을 사용하려면 Photon을 사용하도록 설정해야 합니다.
- 읽기 및 쓰기 작업을 위한 예측 입출력 시스템입니다. 예측 I/O란?을 참조하세요.
- 동적 파일 정리
MERGE,UPDATE및DELETE명령문에서 동적 파일 정리를 참조하세요.
지원되는 인스턴스 유형
Photon은 드라이버 및 작업자 노드에서 여러 인스턴스 유형을 지원합니다. Photon 인스턴스 유형은 Photon이 아닌 런타임을 실행하는 동일한 인스턴스 유형과 다른 속도로 DBU를 소비합니다. Photon 인스턴스 및 DBU 사용에 대한 자세한 내용은 Azure Databricks 가격 책정 페이지 참조하세요.
지원되는 연산자, 식 및 데이터 형식
Photon은 다음 연산자, 식 및 데이터 형식을 다룹니다. 쿼리에서 지원되지 않는 작업을 사용하는 경우 Photon은 실행의 해당 부분에 대해 Spark 런타임으로 투명하게 대체됩니다.
연산자
- 스캔(Parquet, Delta, CSV, JSON), 필터, 프로젝션
- 해시 집계/조인/셔플
- Nested-Loop 조인
- Null-Aware 안티 조인
- 공간 조인(
ST_Intersects,ST_Contains,ST_Covers,ST_Equals,ST_Touches,ST_Within,ST_DWithin을(를) 지원하는 브로드캐스트 및 셔플 변형) - 유니온, 확장, 스칼라서브쿼리
- Delta/Parquet 쓰기 싱크
- 정렬, TopK, 제한
- 윈도우 함수
식
이러한 범주는 완전하지 않고 대표적입니다. 각 범주 내의 개별 함수에는 제한 사항이 있을 수 있습니다.
- 비교/논리
- 산술/수학
- 조건부(IF, CASE 등)
- String
- 캐스트
- 중첩 형식에 대한 Min/Max/MinBy/MaxBy를 포함한 집계 함수
- 날짜/타임스탬프/날짜 형식
데이터 형식
- 바이트/Short/Int/Long
- 불리언 (Boolean)
- 문자열/이진
- 십진수
- 부동/더블 (Float/Double)
- 날짜/타임스탬프
- TimestampNTZ
- 구조체
- 배열
- 지도
- Variant
- null
- 기하학
- 지리학
- 정렬된 문자열
광자 사용량 모니터링
다음 도구를 사용하여 Photon에서 실행되는 쿼리의 양을 모니터링할 수 있습니다.
- Spark UI(클래식 다목적 및 작업 컴퓨팅): Spark UI의 SQL/DataFrame 탭에서 Photon 연산자는 쿼리 DAG 시각화에 주황색으로 표시됩니다. 표준 Spark 연산자는 파란색으로 표시됩니다. 이렇게 하면 Photon에서 어떤 부분이 도움이 되는지, 어떤 부분이 Spark 런타임으로 대체되는지 식별할 수 있습니다.
- 쿼리 프로필 (SQL 웨어하우스 및 서버리스 컴퓨팅): 실행 세부 정보 보기는 Photon에 소요된 작업 시간의 백분율을 보여 줍니다. 쿼리 계획은 Photon 연산자(자주색)를 표준 연산자(회색)와 구분합니다.
쿼리가 Photon을 예상대로 사용하지 않는 경우 쿼리에서 지원되지 않는 작업, UDF 또는 Spark 런타임으로 대체되는 데이터 형식을 사용하는지 확인합니다.
제한 사항
- 워크로드가 지원되지 않는 작업에 도달하면 컴퓨팅 리소스는 해당 작업의 나머지 부분에 대해 Spark 런타임으로 투명하게 전환됩니다. 쿼리는 여전히 올바른 결과를 생성합니다.
- Photon은 UDF(사용자 정의 함수), RDD API 또는 데이터 세트 API를 지원하지 않습니다.
- 상태 저장 스트리밍은 지원되지 않습니다. Photon은 상태 비지정 스트리밍만 지원합니다.
- Photon은 일반적으로 2초 미만으로 실행되는 쿼리를 개선하지 않습니다.