Spark 3.4 버전에서 Spark Connect가 추가되었습니다. 간단히 정리하자면 Spark Connect는 기존 방식에서는 합쳐져 있던 Spark Driver와 Client의 역할을 명시적으로 분리해서 여러 사용자가 Spark Cluster를 공유할 때 발생하는 문제(멀티 테넌트 문제)를 완화합니다. (Spark Thrift Server를 쓸 때 이 문제 때문에 고생을 좀 했는데, 해결이 될 수도 있겠어요)
Spark Connect에 대해 알아보기 위해 정리한 내용을 공유합니다.
# 기존 문제
* 내장된 원격 연결 부재: Spark 드라이버는 클라이언트 애플리케이션과 스케줄러를 모두 실행합니다. 따라서 클러스터 근접성이 필요한 무거운 아키텍처가 됩니다. 또한 SQL 이외의 언어로는 Spark 클러스터에 원격으로 연결하는 기능이 없어서 사용자는 Apache Livy와 같은 외부 솔루션에 의존해야 합니다.
* 불편한 개발자 경험: 현재 아키텍처와 API는 대화형 데이터 탐색(노트북을 사용한 것처럼)이나 현대적인 코드 편집기에서 사용되는 풍부한 개발자 경험을 지원하지 않습니다.
안정성: 현재의 공유 드라이버 아키텍처로 인해 사용자가 치명적인 예외(예: OOM)를 발생시키면 모든 사용자에게 클러스터가 다운될 수 있습니다.
* 업그레이드 가능성: 현재의 플랫폼 및 클라이언트 API(예: 클래스 패스에 첫 번째 및 서드파티 종속성이 뒤섞임)의 묶음은 Spark 버전 간의 원활한 업그레이드를 허용하지 않으며, 이로 인해 새로운 기능 적용이 어려워집니다.
# Spark Connect가 해결하려는 것
* 안정성: 너무 많은 메모리를 사용하는 애플리케이션은 이제 자신의 환경에만 영향을 미치게 되므로 Spark 드라이버와의 잠재적인 충돌을 걱정하지 않아도 됩니다. 사용자는 클라이언트에서 자체 종속성을 정의할 수 있으며 Spark 드라이버와의 잠재적인 충돌을 걱정하지 않아도 됩니다.
* 업그레이드 가능성: 이제 Spark 드라이버는 애플리케이션과 독립적으로 원활하게 업그레이드될 수 있습니다. 예를 들어 성능 개선 및 보안 수정을 활용하기 위해 업그레이드할 수 있습니다. 이것은 서버 측 RPC 정의가 역 호환성을 고려하도록 설계되었는 한 애플리케이션이 앞으로 호환될 수 있음을 의미합니다.
* 디버깅 및 관찰성: Spark Connect는 개발 중에 즐겨 사용하는 IDE에서 직접 대화식 디버깅을 가능하게 합니다. 마찬가지로 애플리케이션은 애플리케이션의 프레임워크 네이티브 메트릭 및 로깅 라이브러리를 사용하여 모니터링할 수 있습니다.
---
이해하기 위해서 자료를 찾다보니 Design Doc 도 공개되어 있네요.
Spark Connect의 High level Architecture 도 궁금하시다면 아래 링크에서 살펴보세요.
https://moons08.github.io/programming/spark-connect/