Databricks Photon 이 이제 AWS 및 Azure에서 정식으로 제공됩니다.
오늘, Photon 이 공개 프리뷰로 제공된다는 기쁜 소식을 전해드립니다. Photon은 쿼리 성능을 획기적으로 개선하기 위해 C++로 개발된 네이티브 벡터화 엔진입니다. Photon의 이점을 누리기 위해서는 시스템을 켜기만 하면 됩니다. Phonton은 작업과 리소스를 원활하게 조정하고 SQL 및 Spark 쿼리의 일부를 투명한 방식으로 가속화합니다. 조정이나 사용자 개입이 필요하지 않습니다.
<a href="https://www.databricks.com/resources/ebook/rise-data-lakehouse?itm_data=photonpublicpreviewengine-blog-riselakehousebook" target="_blank">데이터 웨어하우스의 아버지 빌 인몬과 함께 레이크하우스가 미래의 데이터 아키텍처인 이유를 알아보세요</a>.</p><hr><p>새로운 엔진은 궁극적으로 모든 워크로드를 가속화하도록 설계되었지만, 미리 보기 기간 동안 Photon은 워크로드당 총비용을 절감하면서 SQL 워크로드를 더 빠르게 실행하는 데 중점을 둡니다. Photon을 통해 얻을 수 있는 이점은 두 가지가 있습니다.</p><ul><li>추가 비용 없이 <a href="https://www.databricks.com/product/databricks-sql" rel="noopener" target="_blank">Databricks SQL</a> 에서 기본 쿼리 엔진으로</li><li>Databricks 클러스터의 새로운 고성능 <a href="https://docs.databricks.com/runtime/index.html" rel="noopener" target="_blank">런타임 </a>의 일부로, 비 Photon 런타임을 실행하는 동일한 인스턴스 유형과는 <a href="https://www.databricks.com/product/aws-pricing/instance-types" rel="noopener" target="_blank">다른 속도로 DBU를 소비 </a>합니다.</li></ul><p>이 블로그에서는 Photon을 구축하게 된 동기를 논의하고 Photon의 내부 작동 방식을 설명하며 Databricks SQL과 기존 Databricks Data Science & Data 엔지니어링 클러스터 모두에서 Photon의 쿼리 실행을 모니터링하는 방법도 알아봅니다.</p><h2>Photon으로 더 빠르게</h2><p>왜 새로운 쿼리 엔진을 구축해야 하는지 궁금하실 것입니다. 백문이 불여일견이라는 말처럼, 막대 차트를 통해 데이터가 전하는 이야기를 들어보겠습니다.</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="TPC-DS 1TB를 사용하여 버전 2.1 대비 Photon이 적용된 Databricks Runtime의 상대적 속도 향상" height="803"></a><figcaption>이미지 1: TPC-DS 1TB를 사용한 버전 2.1 대비 Databricks Runtime의 상대적 속도 향상</figcaption></figure><p>TPC-DS 벤치마크(스케일 팩터 1TB)의 Power Test를 사용한 Databricks Runtime 성능 차트에서 볼 수 있듯이, 성능은 수년에 걸쳐 꾸준히 향상되었습니다. 그러나 Photon이 도입되면서 쿼리 성능이 비약적으로 향상되었습니다. Photon은 Databricks Runtime 8.0보다 최대 2배 더 빠릅니다. 이것이 바로 저희가 Photon의 잠재력에 대해 매우 기대하는 이유이며, 이제 막 시작했을 뿐입니다. Photon 로드맵에는 더 넓은 적용 범위와 더 많은 최적화 계획이 포함되어 있습니다.</p><p>초기 비공개 미리 보기 고객은 다음과 같은 SQL 워크로드에서 Photon을 사용하여 평균 2~4배의 속도 향상을 경험했습니다.</p><ul><li><strong>SQL 기반 작업</strong> - SQL 및 Spark DataFrame에서 대규모 프로덕션 작업을 가속화합니다.</li><li><strong>IoT 사용 사례</strong> - Spark 및 기존 Databricks Runtime에 비해 Photon을 사용한 더 빠른 시계열 분석.</li><li><strong>데이터 개인 정보 보호 및 규정 준수</strong> - Delta Lake, 프로덕션 작업 및 Photon을 사용하여 데이터를 중복시키지 않고 페타바이트 규모의 데이터세트를 쿼리하여 레코드를 식별하고 삭제합니다.</li><li><strong>Delta 및 Parquet으로 데이터 로드</strong> - Photon의 벡터화된 I/O는 Delta 및 Parquet 테이블의 데이터 로드 속도를 높여 데이터 엔지니어링 작업의 전체 런타임과 비용을 절감합니다.</li></ul><h2>Photon 작동 방식</h2><p>Photon은 C++로 작성되었지만 Databricks Runtime 및 Spark에 직접 통합됩니다. 이는 Photon을 사용하는 데 코드 변경이 필요하지 않다는 것을 의미합니다. 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="이미지 2 - Photon 쿼리의 수명 주기" height="720"></a><figcaption>이미지 2: Photon 쿼리의 수명 주기</figcaption></figure><p>클라이언트가 Spark driver에 지정된 query 또는 명령을 제출하면 파싱이 이루어지고, <a href="https://www.databricks.com/glossary/catalyst-optimizer" rel="noopener" target="_blank">Catalyst Optimizer</a> 는 Photon이 없는 경우와 마찬가지로 분석, 계획 및 최적화를 수행합니다. 한 가지 차이점은 Photon의 경우 런타임 엔진이 물리적 계획을 검토하여 Photon에서 실행할 수 있는 부분을 결정한다는 것입니다. Photon 계획에 대해 정렬 병합 조인을 해시 조인으로 변경하는 등 일부 수정이 적용될 수 있지만, 조인 순서를 포함한 계획의 전반적인 구조는 동일하게 유지됩니다. Photon은 아직 Spark가 지원하는 모든 기능을 지원하지 않으므로 단일 쿼리가 Photon과 Spark에서 부분적으로 실행될 수 있습니다. 이 하이브리드 실행 모델은 사용자에게 완전히 투명합니다.</p><p>그런 다음 쿼리 계획은 태스크라고 하는 분산 실행의 원자 단위로 분할됩니다. 이 태스크는 작업자 노드의 스레드에서 실행되며 데이터의 특정 파티션에서 작동합니다. Photon 엔진이 작동하는 수준이 바로 이 수준입니다. Spark의 전체 단계 코드 생성을 네이티브 엔진 구현으로 대체하는 것으로 생각할 수 있습니다. Photon 라이브러리는 JVM에 로드되며, Spark와 Photon은 <a href="https://en.wikipedia.org/wiki/Java_Native_Interface" rel="noopener" target="_blank">JNI</a>를 통해 통신하여 오프힙 메모리에 데이터 포인터를 전달합니다. 또한 Photon은 혼합 계획에서 스필링을 조정하기 위해 Spark의 메모리 관리자와 통합됩니다. Spark와 Photon은 모두 오프힙 메모리를 사용하도록 구성되며 메모리 압박 하에서 조정됩니다.</p><p>공개 미리 보기 릴리스의 Photon은 많은 데이터 유형, 연산자 및 표현식을 지원하지만 전부는 아닙니다. 자세한 내용은 설명서의 <a href="https://docs.databricks.com/runtime/photon.html" rel="noopener" target="_blank">Photon 개요</a> 를 참조하세요.</p>
현재 모든 워크로드와 연산자가 지원되는 것은 아니므로 Photon의 이점을 누릴 수 있는 워크로드를 선택하는 방법과 실행 계획에서 Photon의 존재를 감지하는 방법에 대해 궁금해하실 수 있습니다. 요약하면 Photon 실행은 상향식입니다. 테이블 스캔 연산자에서 시작하여 지원되지 않는 연산을 만날 때까지 DAG(방향성 비순환 그래프)를 따라 위로 계속됩니다. 그 시점에서 실행은 Photon을 벗어나고 나머지 운영은 Photon 없이 실행됩니다.
Databricks SQL에서 Photon을 사용하는 경우 쿼리의 얼마만큼이 Photon을 사용하여 실행되었는지 쉽게 확인할 수 있습니다.
일반적으로 Photon에서 작업 시간의 비율이 클수록 Photon으로 인한 성능 이점이 커집니다.

Databricks 클러스터에서 Photon을 사용하는 경우 Spark UI에서 Photon 작업을 볼 수 있습니다. 다음 스크린샷은 쿼리 세부 정보 DAG를 보여줍니다. DAG에는 Photon에 대한 두 가지 표시가 있습니다. 첫째, Photon 연산자는 PhotonGroupingAgg와 같이 Photon으로 시작됩니다. 두 번째로, DAG에서 Photon 연산자와 스테이지는 복숭아색으로 표시되는 반면 Photon이 아닌 것은 파란색입니다.

위에서 설명한 것처럼 Photon을 사용하는 방법에는 두 가지가 있습니다.
Photon을 사용하는 SQL endpoint 또는 클러스터를 생성한 후 Databricks SQL 편집기나 노트북에서 NYC Taxi 데이터세트 에 대해 몇 가지 query를 실행해 볼 수 있습니다. 발췌본을 미리 로드하여 Databricks 데이터세트의 일부로 액세스할 수 있도록 했습니다.
먼저 다음 SQL 스니펫을 사용하여 기존 데이터를 가리키는 새 테이블을 만듭니다.
이 쿼리를 사용해 보고 Photon의 속도를 경험해 보세요!
2개의 i3.2xlarge 실행기와 i3.2xlarge 드라이버를 갖춘 웜업된 AWS 클러스터에서 Photon 및 기존 Databricks Runtime을 사용하여 위 query의 응답 시간을 측정했습니다. 결과는 다음과 같습니다.

Photon에 대해 더 자세히 알아보려면 데이터 및 AI 서밋 세션인 Radical speed for SQL Queries Photon Under the Hood를 시청할 수도 있습니다. 읽어 주셔서 감사합니다. 이에 대한 피드백을 기다리겠습니다!
우리와 함께하세요
관련 포스트