주요 컨텐츠로 이동
공지사항

Apache Spark 4.2를 소개합니다

이제 Databricks Runtime 19 Beta에서 사용할 수 있습니다

작성자: Wenchen Fan, Andreas Neumann, Serge Rielau, Szehon Ho, Gengliang Wang, Linhong Liu, Hyukjin Kwon, Jerry Peng, DB Tsai, Xiao Li , Reynold Xin

  • 분석 및 AI를 위한 신뢰할 수 있는 컨텍스트 정의: 메트릭 뷰는 거버넌스가 적용된 비즈니스 정의를 생성하고, 벡터 검색, 지리 공간 유형 및 더 풍부한 SQL 프리미티브는 AI 네이티브 분석을 Spark에 도입합니다.
  • 더 많은 애플리케이션에서 Spark에 액세스: Spark Connect, Arrow 우선 Python 실행, 향상된 PySpark 호환성 및 Python Data Sources 덕분에 서비스, 도구 및 AI 에이전트에서 Spark를 더 쉽게 사용할 수 있습니다.
  • 데이터를 최신 상태로 유지하고 프로덕션 준비 완료: Auto CDC, Data Source V2, CHANGES 쿼리, Real-Time Mode 및 플랫폼 개선 사항을 통해 지속적으로 변경되는 데이터를 안정적으로 처리하는 과정이 간소화됩니다.

소개

Apache Spark 4.2는 현대적인 데이터 및 AI 스택의 더 많은 부분을 엔진 자체로 통합합니다. Spark 4.x를 기반으로 하는 이번 릴리스에는 거버넌스가 적용된 메트릭, 벡터 및 top-K 프리미티브, Arrow 우선 방식의 Python 경로, 최고 수준의 변경 데이터 캡처(CDC), 그리고 더 강력한 스트리밍 및 운영 기반이 추가되었습니다.

이를 통해 Spark는 AI 애플리케이션의 양쪽 측면 모두에서 더욱 유용해집니다. AI 에이전트에 제공되는 데이터의 품질과 최신성을 향상시키고, 애플리케이션과 에이전트가 Spark를 원격 실행 서비스로 더 쉽게 호출할 수 있도록 합니다. AI 관련 스토리는 구체적입니다. 신뢰할 수 있는 시맨틱, 네이티브 검색 프리미티브, 최신 변경 데이터, 그리고 Spark 규모의 컴퓨팅을 위한 개방형 인터페이스를 제공합니다.

Spark 4.2의 이점은 다음 네 가지로 요약할 수 있습니다.

  • 단 한 번의 진실 정의: 메트릭 뷰는 거버넌스가 적용된 비즈니스 메트릭을 Spark에 배치하므로 SQL, BI 도구, 애플리케이션 및 AI 시스템이 모두 동일한 정의를 사용할 수 있습니다.
  • 어디서나 Spark에 액세스: Spark Connect, PySpark, Arrow 및 Python Data Source 개선을 통해 서비스 및 Python 에코시스템에서 Spark를 더 쉽게 호출할 수 있습니다.
  • SQL에서 AI 네이티브 분석 실행: 벡터 함수, NEAREST BY, 스케치, 랭킹 및 지리 공간 유형을 통해 더 많은 분석 빌딩 블록을 Spark SQL에 직접 제공합니다.
  • 변경되는 데이터를 안전하게 이동: Auto CDC, CHANGES 인터페이스, Data Source V2 및 Real-Time Streaming을 통해 지속적으로 변경되는 데이터를 더 쉽고 정확하게 처리할 수 있습니다.

이러한 변화를 통해 기업은 하나의 개방형 엔진을 사용하여 데이터를 준비하고, 비즈니스 의미를 정의하고, 관련 컨텍스트를 검색하고, 분석 및 AI 애플리케이션을 최신 상태로 유지할 수 있습니다.

메트릭 및 시맨틱 모델링: 단 한 번의 진실 정의

Spark 4.2는 메트릭 뷰를 도입하여 Spark SQL에 네이티브 시맨틱 레이어를 제공합니다. 팀은 비즈니스 메트릭을 한 번만 정의하면 대시보드, 보고서, 애플리케이션 및 AI 도구 전반에서 일관되게 사용할 수 있습니다.

이는 많은 중요한 메트릭이 단순히 더할 수 있는 성격이 아니기 때문에 중요합니다. 비율, 고유 개수(distinct count), 리텐션 및 유사한 측정값은 모든 소비자가 서로 다른 세분성(grain)으로 공식을 재작성할 때 잘못된 결과를 초래할 수 있습니다. 메트릭 뷰는 차원(dimension)과 측정값(measure)을 Spark가 이해하는 일급 객체(first-class object)로 만들어, 엔진이 의도된 집계 시맨틱을 보존할 수 있도록 합니다.

메트릭 뷰가 정의되면 사용자는 서로 다른 차원별로 동일한 거버넌스 측정값을 쿼리할 수 있습니다.

AI 애플리케이션의 경우 이는 특히 중요합니다. 에이전트가 대시보드와 다르게 수익을 계산하거나, 사용자가 요청한 그룹화를 변경했을 때 다른 답변을 반환해서는 안 됩니다. 거버넌스가 적용된 메트릭 뷰는 SQL, BI 및 AI에 단일 진실 공급원(source of truth)을 제공하며, Spark 분석, 카탈로그 확인 및 권한이 일관되게 적용됩니다.

Spark Connect 및 PySpark: 어디서나 Spark에 액세스

서비스 API로서의 Spark

Spark Connect는 gRPC 및 Arrow 기반 프로토콜을 통해 클라이언트를 Spark 서버와 분리합니다. 클라이언트가 논리적 계획을 빌드하면 서버가 이를 분석 및 실행하고, 결과는 Arrow 배치로 반환됩니다. 클라이언트에는 전체 Spark 런타임이나 공동 배치된 JVM이 필요하지 않습니다.

덕분에 노트북, 서비스, 개발자 도구 및 AI 애플리케이션에 Spark를 더 쉽게 내장할 수 있습니다. 에이전트나 애플리케이션은 자체 런타임에서 Spark를 호출할 수 있으며, Spark는 서버에서 분석, 최적화, 실행 및 거버넌스를 유지합니다.

Spark 4.2는 Spark Classic과의 호환성 격차를 계속해서 줄여나가고 있습니다. 개선 사항에는 더 나은 RDD API 호환성, spark.read.*SparkSession.emptyDataFrame에 대한 DataFrame 입력, 개선된 디버깅 기능, 오류 전파, 상태 보고 및 YARN 클러스터 모드 지원이 포함됩니다. 이러한 변화를 통해 PySpark와 Spark Connect는 더 빨라지고 호환성이 향상되며, 대규모 및 원격 환경에서 더 쉽게 운영할 수 있게 됩니다.

더욱 Arrow 우선적인 Python 경로

Python은 여전히 사용자가 Spark로 데이터 및 AI 워크로드를 빌드하는 주요 방법 중 하나입니다. Spark 4.2에서는 Arrow에 최적화된 Python UDF 실행이 기본적으로 활성화되므로, 기존 UDF는 코드를 재작성하지 않고도 더 빠른 열 지향(columnar) 경로를 사용할 수 있습니다. 또한 Pandas 3 지원을 통해 Spark와 함께 Python 환경을 더 쉽게 업그레이드할 수 있습니다.

더 많은 제어가 필요한 코드의 경우, Arrow UDF는 데이터를 PyArrow 배열로 유지하여 불필요한 Pandas 변환을 방지합니다. 또한 Spark는 Python Data Source에 대한 시간 및 메모리 프로파일링, 개선된 워커 진단, 데이터로 쿼리할 수 있는 로깅을 포함하여 Python 실행을 위한 프로파일링 및 디버깅을 확장합니다.

Spark 4.2는 Arrow C Data Interface 및 PyCapsule 프로토콜을 통한 상호 운용성도 향상시킵니다. 양쪽 모두가 이를 지원하는 경우, Spark DataFrame은 기본 데이터를 복사하거나 직렬화하지 않고도 Polars 또는 DuckDB와 같은 Arrow 네이티브 도구로 이동할 수 있습니다. 이를 통해 Spark 규모의 처리와 광범위한 Python 및 AI 에코시스템 간의 연결 복잡성(glue)을 줄여줍니다.

Python Data Source는 통합 마찰을 더욱 줄여줍니다. 팀은 Python으로 배치 또는 스트리밍 리더 및 라이터를 빌드하고, 이를 한 번 등록한 다음 표준 Spark 데이터 소스 인터페이스를 통해 사용할 수 있습니다. 4.2에서는 프로파일링을 통해 이러한 커넥터를 블랙박스로 취급하는 대신 더 쉽게 튜닝하고 운영할 수 있습니다.

Spark SQL: 엔진의 AI 네이티브 분석

벡터 스코어링 및 top-K 검색

Spark 4.2는 벡터 유사도 검색, 랭킹 및 시계열 분석을 위한 새로운 SQL 프리미티브를 추가합니다. 이번 릴리스에서는 벡터 거리 및 유사도 함수, 벡터 정규화, 벡터 집계, 그리고 거리 기반 매칭을 위한 top-K 랭킹 조인인 NEAREST BY을 도입합니다. 이러한 프리미티브를 통해 대규모 검색, 추천, 엔티티 확인(entity resolution) 및 후보 생성이 가능해집니다.

네이티브 지리 공간 분석

내장된 GEOMETRYGEOGRAPHY 유형과 ST_* 함수를 사용하면 외부 공간 확장 없이도 위치 인식 분석이 가능합니다. 또한 Spark 4.2에는 Parquet, WKT/WKB, SRID 보존 및 Python 변환 지원이 추가되었습니다.

정규화된 기본 제공 함수 및 임시 뷰

Spark 4.2를 사용하면 SYSTEM.BUILTIN을 지정하여 Spark가 제공하는 함수를 명확하게 호출할 수 있습니다. 세션 변수의 선례에 따라 임시 뷰도 SYSTEM.SESSION을 지정하여 정규화할 수 있습니다. 이는 사용자 정의 함수 또는 영구 관계와 구별하고 인젝션을 방지하는 데 유용합니다.

SQL 검색 경로

Spark 4.2는 SET PATH를 통한 SQL 검색 경로 지원을 추가하여, 경로에 스키마를 추가하는 것만으로 네임스페이스 전반의 테이블, 함수 및 변수와 객체 라이브러리를 더 쉽게 확인할 수 있도록 합니다.

Spark는 예측 가능한 이름 확인을 위해 뷰 및 SQL 함수에 SQL 경로를 유지합니다.

Spark 4.2부터 SQL 스크립트는 커서를 DECLARE, OPEN, FETCH 및 CLOSE할 수 있습니다. 이를 통해 결과 집합의 행별 처리를 더 세밀하게 제어할 수 있으며, 과거에는 이를 위해 SQL 외부로 나가 DataFrame을 사용해야 했습니다.

또한 Spark SQL에는 튜플 스케치(Tuple sketches), 시계열 분석을 위한 time_bucket, 파일 형식 전반에 걸친 더 광범위한 TIME 유형 지원, 윈도우 결과 필터링을 위한 QUALIFY, Top-K max_bymin_by, 그리고 일반 집계 함수에 대한 IGNORE NULLSRESPECT NULLS 지원이 추가되었습니다.

이러한 추가 기능을 통해 Spark SQL은 현대적인 분석 애플리케이션에 더욱 풍부한 표현력을 제공합니다.

Spark Declarative Pipelines 및 Auto CDC: 변경되는 데이터를 안전하게 이동

Spark 4.2는 Spark Declarative Pipelines(SDP)에 Auto CDC 지원을 도입하여 최고 수준의 SCD(Slow Changing Dimensions) Type 1 처리를 Spark에 제공합니다. Auto CDC 이전에는 변경 피드를 사용하고 이를 대상 테이블에 적용하려면 삭제 및 순서가 맞지 않는 변경 이벤트 처리로 인해 복잡해지고 오류가 발생하기 쉬운 머지(merge) 로직을 직접 작성해야 했습니다. Auto CDC를 사용하면 사용자는 CDC 이벤트가 대상 테이블을 업데이트하는 방식만 구성하고 복잡한 작업은 Spark가 관리하도록 할 수 있습니다.

Auto CDC는 SCD Type 1 대상 테이블에 CDC 변경 사항을 적용하기 위한 Python API를 제공합니다. 이는 고객 프로필, 제품 카탈로그, 계정 레코드 및 운영 참조 데이터와 같이 각 레코드의 최신 버전을 안정적으로 유지해야 하는 일반적인 수집 및 복제 워크로드를 위해 설계되었습니다.

예를 들어, 이제 Auto CDC 흐름을 선언적으로 표현할 수 있습니다.

Auto CDC 외에도 Spark 선언적 파이프라인(Spark Declarative Pipelines)은 즉시 분석(eager analysis)을 위한 더 안전한 서버 측 처리 및 흐름을 위한 구조화된 식별자를 포함하여 중요한 플랫폼 강화를 거쳤습니다. 이러한 변경 사항을 통해 선언적 파이프라인 개발의 안정성이 향상되었으며, Spark가 더 높은 수준의 데이터 엔지니어링 패턴을 위한 기반을 마련할 수 있게 되었습니다.

Structured Streaming의 실시간 모드(Real-Time Mode): 더 최신의 운영 데이터

Structured Streaming의 실시간 모드(RTM)를 사용하면 스트리밍 쿼리가 밀리초 단위의 엔드투엔드 대기 시간으로 데이터를 처리할 수 있습니다. 이를 통해 Spark는 완전히 새로운 차원의 사용 사례를 개척할 수 있었으며, 이상 탐지, 개인화, 관측 가능성(observability), 실시간 피처 엔지니어링과 같은 운영 데이터 애플리케이션의 기반이 되고 있습니다.

Spark 4.2에서는 RTM을 PySpark로 확장하여, 이제 실시간 모드에서 (Python UDF 없이) 상태 비저장(stateless) 스트리밍 쿼리를 실행할 수 있습니다. Python은 사용 편의성 덕분에 데이터 사이언티스트와 엔지니어 사이에서 인기가 높으며, 이번 확장을 통해 더 많은 사용자가 RTM의 저지연 처리를 활용할 수 있게 되었습니다.

향후 출시될 Spark 4.x 버전을 대비하여 RTM에 상태 저장(stateful) 지원을 도입할 예정이며, 이미 관련 작업이 진행 중입니다. 이 작업은 세 가지 주요 구성 요소와 함께 SPARK-54699에서 추적되고 있습니다:

  • 스테이지가 완료될 때까지 기다리지 않고 업스트림 스테이지의 데이터를 준비되는 즉시 다운스트림으로 전달하는 새로운 스트리밍 셔플(SPARK-56664)
  • 여러 스테이지를 동시에 실행할 수 있도록 하는 동시 스테이지 스케줄링(SPARK-57000)
  • transformWithState를 시작으로 하는 상태 저장 연산자 지원(SPARK-57228)

상태 저장 지원 외에도 RTM에서 Python UDF(SPARK-57237)를 사용할 수 있도록 지원하기 위해 노력하고 있습니다.

계속 지켜봐 주시기 바라며, 여러분의 피드백과 기여를 환영합니다!

Data Source V2: 진화하는 데이터 소스를 위한 단일 인터페이스

Spark 4.2는 Data Source V2의 또 다른 주요 진전을 보여줍니다. DSv2는 Spark를 통해 읽기, 쓰기, 행 수준 작업, 스키마 진화(schema evolution), 변경 데이터, 작업 메트릭 및 트랜잭션을 노출하는 커넥터의 표준 기반이 되고 있습니다.

DSv2의 CDC

Spark 4.2는 DSv2에 최상급 변경 데이터 캡처(CDC) 지원을 추가합니다. 커넥터는 표준 API를 통해 변경 스트림을 노출할 수 있으며, 사용자는 새로운 CHANGES SQL 절, DataFrame API 및 PySpark 바인딩을 사용하여 이를 쿼리할 수 있습니다. 또한 Spark는 엔진 내에서 일반적인 사후 처리(쓰기 시 복사(copy-on-write) 이월 제거, 업데이트 감지, 행별 순 변경 계산 등)를 처리합니다. 동일한 쿼리가 CDC를 지원하는 모든 DSv2 커넥터에서 일관되게 작동합니다.

행 수준 작업, 스키마 진화 및 트랜잭션

Spark 4.2는 Data Source V2(DSv2) 커넥터의 행 수준 DML 작업에 대한 지원을 더욱 강화합니다. MERGE INTO는 전체 스테이지 코드 생성(whole-stage code generation)을 포함한 추가적인 성능 향상과 함께, Spark 4.1에서 도입된 스키마 진화 기능에 대한 추가 개선 사항을 적용받습니다.

이제 이름 기반 및 위치 기반 열 확인(column resolution) 모두에 대해 INSERT INTO 작업에 대한 스키마 진화가 지원되므로, 진화하는 테이블에 쓸 때의 마찰이 줄어듭니다. 또한, Spark 4.1에 추가된 MERGE INTO 요약을 보완하여 이제 UPDATE 및 DELETE에 대한 작업 요약도 제공됩니다. MERGE INTO 메트릭도 확장 및 개선되었습니다.

Spark 4.2는 프로덕션 등급의 DSv2 커넥터 및 레이크하우스 테이블 포맷을 위한 추가 빌딩 블록을 도입합니다. 주요 추가 사항으로는 트랜잭션 API의 기초, 향상된 파티션 통계 필터링, 스토리지 파티션 조인(storage-partitioned joins) 개선, DSv1 및 DSv2 명령과 동작 간의 긴밀한 정렬 등이 있습니다. 이러한 개선 사항을 통해 DSv2는 레이크하우스 커넥터, 트랜잭션 테이블 포맷 및 기타 대규모 데이터 시스템을 구현하기 위한 보다 완전한 플랫폼이 되었습니다.

주목할 만한 개선 사항 및 감사의 글

Spark 4.2에는 Spark를 더 쉽게 운영, 디버깅, 보호 및 확장할 수 있도록 하는 여러 플랫폼 개선 사항이 포함되어 있습니다. Spark Web UI는 Bootstrap 5, 다크 모드, 더 나은 SQL 계획 시각화, 쿼리 타임라인 개선 및 서버 측 페이지 매김을 통해 대대적으로 현대화되었습니다. 이기종 익스큐터(executor) 관리, 안정적인 리소스 관리자 API, 제어 평면(control-plane) 오버헤드 감소를 통해 Kubernetes 지원이 향상되었습니다. Spark 4.2는 또한 JDK 25 지원을 추가하고, 웹 보안을 개선하며, Spark History Server를 확장하고, Scala, Parquet, ORC, Arrow, Netty, Hadoop을 포함한 주요 종속성을 업그레이드합니다.

Spark 4.2는 260명 이상의 기여자가 참여한 1,900개 이상의 커밋을 통해 Apache Spark 커뮤니티의 저력을 보여줍니다. 이번 릴리스가 가능하도록 코드, 리뷰, 테스트, 문서 및 피드백을 기여해 주신 모든 분께 감사드립니다.

image2.png

Spark 4.2 시작하기

spark.apache.org/downloads에서 Apache Spark 4.2를 다운로드하고, 전체 변경 사항 목록은 Apache Spark 4.2 릴리스 노트를 참조하세요. Apache Spark 4.2는 Databricks Runtime 19 Beta에서도 제공될 예정입니다.

image1.png

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.