Apache Spark 4.0은 Spark 분석 엔진의 발전에서 주요한 이정표를 표시합니다. 이번 릴리스는 SQL 언어 개선과 확장된 연결성, 새로운 Python 기능, 스트리밍 개선, 그리고 더 나은 사용성에 이르기까지 전반적으로 중요한 발전을 가 져왔습니다. Spark 4.0은 기존의 Spark 작업과의 호환성을 유지하면서도, 보다 강력하고, ANSI 준수, 그리고 사용자 친화적으로 설계되었습니다. 이 포스트에서는 Spark 4.0에서 도입된 주요 기능과 개선 사항을 설명하고, 이들이 어떻게 여러분의 빅 데이터 처리 경험을 향상시키는지 설명합니다.
Spark 4.0의 주요 하이라이트는 다음과 같습니다:
- SQL 언어 개선: 세션 변수 및 제어 흐름을 사용한 SQL 스크립팅, 재사용 가능한 SQL 사용자 정의 함수 (UDFs), 복잡한 분석 워크플로우를 간소화하고 단순화하는 직관적인 PIPE 구문 등의 새로운 기능이 포함되어 있습니다.
- Spark Connect 개선: Spark의 새로운 클라이언트-서버 아키텍처인 Spark Connect는 이제 Spark 4.0에서 Spark Classic과 높은 기능 상호 운용성을 달성합니다. 이번 릴리스는 Python과 Scala 간의 호환성을 향상시키고, 다중 언어 지원(새로운 Go, Swift, Rust 클라이언트 포함)을 추가하며, 새로운 spark.api.mode 설정을 통한 더 간단한 마이그레이션 경로를 제공합니다. 개발자들은 Spark Classic에서 Spark Connect로 원활하게 전환하여 더 모듈화되고, 확장 가능하며, 유연한 아키텍처의 이점을 누릴 수 있습니다.
- 신뢰성 및 생산성 향상: 기본적으로 활성화된 ANSI SQL 모드는 더 엄격한 데이터 무결성과 더 나은 상호 운용성을 보장하며, 반정형 JSON 데이터를 효 율적으로 처리하기 위한 VARIANT 데이터 유형과 개선된 관찰성 및 쉬운 문제 해결을 위한 구조화된 JSON 로깅을 보완합니다.
- Python API의 발전: PySpark 데이터프레임에 직접 Plotly 기반 그래프를 그리는 기능, 사용자 정의 Python 배치 및 스트리밍 커넥터를 가능하게 하는 Python 데이터 소스 API, 그리고 동적 스키마 지원과 더 큰 유연성을 위한 다형성 Python UDTF.
- 구조화된 스트리밍 발전: Scala, Java 및 Python에서 강력하고 장애 허용성이 높은 사용자 정의 상태 로직, 상태 저장소 사용성 개선, 그리고 개선된 디버깅 및 관찰성을 위한 새로운 상태 저장소 데이터 소스를 위한 새로운 임의의 상태 처리 API인 transformWithState가 있습니다.
아래 섹션에서는 이러한 흥미로운 기능에 대한 자세한 내용을 공유하고, 마지막에는 더 자세히 알고 싶은 사람들을 위해 관련 JIRA 노력과 심층적인 블로그 게시물에 대한 링크를 제공합니다. Spark 4.0은 대규모 데이터 처리를 위한 견고하고 미래 지향적인 플랫폼을 나타내며, Spark의 친숙함과 현대 데이터 엔지니어링 요구 사항을 충족시키는 새로운 기능을 결합합니다.
주요 Spark Connect 개선 사항
Spark 4.0에서 가장 흥미로운 업데이트 중 하나는 Spark Connect, 특히 Scala 클라이언트의 전반적인 개선입니다. Spark 4에서는 모든 Spark SQL 기능이 Spark Connect와 Classic 실행 모드 사이에서 거의 완벽한 호환성을 제공하며, 아주 소소한 차이만 남아 있습니다. Spark Connect는 사용자 애플리케이션을 Spark 클러스터에서 분리하는 새로운 클라이언트-서버 아키텍처로, 4.0에서는 이전보다 더욱 능력이 향상되었습니다:
- 호환성 향상: Spark 4에서 Spark Connect의 주요 성과 중 하나는 Python과 Scala API의 호환성이 향상되어 Spark Classic과 Spark Connect 간의 전환을 원활하게 만듭니다. 이는 대부분의 사용 사례에서 해야 할 일은 애플리케이션에 대해 Spark Connect를 활성화하는 것이라는 것을 의미합니다. 이는
spark.api.mode
를 connect
로 설정함으로써 이루어집니다. Spark의 강력한 쿼리 최적화 및 실행 엔진을 최대한 활용할 수 있도록 Spark Connect를 활성화한 상태에서 새 작업과 애플리케이션 개발을 시작하는 것을 권장합니다.
- 다국어 지원: Spark Connect 4.0은 다양한 언어와 환경을 지원합니다. Python과 Scala 클라이언트는 완전히 지원되며, Go, Swift, Rust를 위한 새로운 커뮤니티 지원 connect 클라이언트가 사용 가능합니다. 이 다언어 지원은 개발자들이 Connect API를 통해 JVM 생태계 외부에서도 자신이 선호하는 언어로 Spark를 사용할 수 있게 해줍니다. 예를 들어, Rust 데이터 엔지니어링 애플리케이션 또는 Go 서비스는 이제 Spark 클러스터에 직접 연결하여 DataFrame 쿼리를 실행할 수 있어, Spark의 전통적인 사용자 베이스를 넘어서 확장할 수 있습니다.
SQL 언어 기능
Spark 4.0은 데이터 분석을 단순화하는 새로운 기능을 추가합니다:
- SQL 사용자 정의 함수 (UDFs) - Spark 4.0은 SQL UDFs를 도입하여 사용자가 SQL에서 직접 재사용 가능한 사용자 정의 함수를 정의할 수 있게 합니다. 이러한 함수들은 복잡한 로직을 단순화하고, 유지보수성을 향상시키며, Spark의 쿼리 최적화기와 원활하게 통합하여, 기존 코드 기반 UDFs에 비해 쿼리 성능을 향상시킵니다. SQL UDFs는 임시 및 영구 정의를 지원하여, 여러 쿼리와 애플리케이션 간에 공통 로직을 공유하기 쉽게 만듭니다. 블로그 게시물 읽기
- SQL PIPE 구문 - Spark 4.0은 새로운 PIPE 구문을 도입하여, 사용자가 |> 연산자를 사용하여 SQL 작업을 연결할 수 있게 했습니다. 이 함수 스타일 접근법은 변환의 선형적인 흐름을 가능하게 함으로써 쿼리의 가독성과 유지 보수성을 향상시킵니다. PIPE 구문은 기존 SQL과 완벽하게 호환되어, 점진적인 채택과 현재의 작업 흐름에 통합이 가능합니다. 블로그 게시물 읽기
- 언어, 악센트, 대소문자 인식 정렬 - Spark 4.0은 STRING 유형에 대한 새로운 COLLATE 속성을 도입합니다. Spark에서 순서와 비교를 결정하는 방법을 제어하기 위해 많은 언어와 지역 인식 정렬 중에서 선택할 수 있습니다. 또한, 대소문자, 악센트, 뒤따르는 공백에 민감하지 않아야 하는지 여부를 결정할 수도 있습니다. 블로그 게시물 읽기
- 세션 변수 - Spark 4.0은 세션 내에서 상태를 유지하고 관리하기 위해 호스트 언어 변수를 사용하지 않고 세션 로컬 변수를 도입했습니다. 블로그 게시물 읽기
- 파라미터 마커 - Spark 4.0은 명명된 (":var") 및 미명명 ("?") 스타일의 파라미터 마커를 도입했습니다. 이 기능은 spark.sql() api를 통해 안전하게 값을 전달하고 쿼리를 매개변수화 할 수 있습니다. 이는 SQL 인젝션의 위험을 완화합니다. 설명서를 참조하세요.
- SQL 스크립팅: 새로운 SQL 스크립팅 기능 덕분에 Spark 4.0에서 다단계 SQL 워크플로우를 작성하는 것이 더 쉬워졌습니다. 이제 로컬 변수와 제어 흐름과 같은 기능을 가진 다중 SQL 스크립트를 실행할 수 있습니다. 이 개선 사항은 데이터 엔지니어가 ETL 로직의 일부를 순수 SQL로 이동시키게 해주며, 이전에는 외부 언어나 저장된 절차를 통해서만 가능했던 구조를 Spark 4.0이 지원합니다. 이 기능은 곧 오류 조건 처리에 의해 더욱 개선될 것입니다. 블로그 게시물 읽기
데이터 무결성 및 개발자 생산성
Spark 4.0은 플랫폼을 더욱 신뢰할 수 있고, 표준 준수, 사용자 친화적으로 만드는 여러 업데이트를 도입합니다. 이러한 개선 사항들은 개발 및 생산 워크플로우를 모두 간소화하며, 더 높은 데이터 품질과 더 빠른 문제 해결을 보장합니다.
- ANSI SQL 모드: Spark 4.0에서 가장 중요한 변화 중 하나는 ANSI SQL 모드를 기본적으로 활성화하여 Spark를 표준 SQL 의미론에 더욱 가깝게 만드는 것입니다. 이 변경은 숫자 오버플로우나 0으로 나누기와 같이 이전에는 묵시적으로 잘림이나 null을 발생시키던 작업에 대해 명확한 오류 메시지를 제공함으로써 더 엄격한 데이터 처리를 보장합니다. 또한, ANSI SQL 표준을 준수함으로써 상호 운용성이 크게 향상되어, 다른 시스템에서 SQL 작업 부하를 이전하는 것을 단순화하고, 광범위한 쿼리 재작성 및 팀 재교육의 필요성을 줄입니다. 전반적으로, 이런 발전은 더욱 명확하고, 신뢰할 수 있으며, 이식 가능한 데이터 워크플로우를 촉진합니다. 설명서를 참조하세요.
- 새로운 VARIANT 데이터 유형: Apache Spark 4.0은 반정형 데이터를 위해 특별히 설계된 새로운 VARIANT 데이터 유형을 도입하였습니다. 이를 통해 복잡한 JSON 또는 맵과 같은 구조를 단일 열 내에 저장하면서 중첩된 필드를 효율적으로 쿼리할 수 있습니다. 이 강력한 기능은 스키마의 유연성을 크게 향상시켜, 미리 정의된 스키마에 맞지 않는 데이터의 수집과 관리를 더욱 쉽게 만듭니다. 또한, Spark의 내장 인덱싱 및 JSON 필드 파싱 기능은 쿼리 성능을 향상시켜, 빠른 조회와 변환을 가능하게 합니다. 스키마 진화 단계의 반복적인 필요성을 최소화함으로써, VARIANT는 ETL 파이프라인을 단순화하고, 더욱 효율적인 데이터 처리 작업 흐름을 가능하게 합니다. 블로그 게시물 읽기
- 구조화된 로깅: Spark 4.0은 디버깅과 모니터링을 단순화하는 새로운 구조화된 로깅 프레임워크를 도입했습니다.
spark.log.structuredLogging.enabled=true,
를 활성화함으로써 Spark는 로그를 JSON 라인으로 작성합니다—각 항목은 타임스탬프, 로그 레벨, 메시지, 그리고 전체 Mapped Diagnostic Context (MDC) 컨텍스트와 같은 구조화된 필드를 포함합니다. 이 현대적인 형식은 Spark SQL, ELK, Splunk와 같은 관찰 도구와의 통합을 단순화하며, 로그를 파싱, 검색, 분석하는 것을 훨씬 쉽게 만듭니다. [자세히 알아보기]
Python API의 발전
Python 사용자들은 Spark 4.0에서 많은 것을 축하할 수 있습니다. 이 릴리스는 Spark를 더 Pythonic하게 만들고 PySpark 작업의 성능을 향상시킵니다:
- 기본 플로팅 지원: PySpark에서의 데이터 탐색이 더욱 쉬워졌습니다 - Spark 4.0은 PySpark DataFrames에 기본 플로팅 기능을 추가합니다. 이제 .plot() 메소드를 호출하거나 DataFrame에서 직접 차트를 생성하기 위해 관련 API를 사용하여, pandas로 데이터를 수동으로 수집하지 않고도 Spark 데이터에서 직접 차트를 생성 할 수 있습니다. 내부적으로 Spark는 차트를 렌더링하기 위해 기본 시각화 백엔드로 Plotly를 사용합니다. 이는 히스토그램과 산점도와 같은 일반적인 플롯 유형을 PySpark DataFrame에서 한 줄의 코드로 생성할 수 있음을 의미하며, Spark는 노트북이나 GUI에서 플롯할 데이터의 샘플 또는 집계를 가져오는 작업을 처리합니다. 기본 플로팅을 지원함으로써, Spark 4.0은 탐색적 데이터 분석을 간소화합니다 - Spark 컨텍스트를 떠나거나 별도의 matplotlib/plotly 코드를 작성하지 않고도 데이터셋에서 분포와 추세를 시각화할 수 있습니다. 이 기능은 EDA를 위해 PySpark를 사용하는 데이터 과학자들에게 생산성 향상을 가져다 줍니다.
- Python 데이터 소스 API: Spark 4.0은 개발자가 Python에서 배치 및 스트리밍을 위한 사용자 정의 데이터 소스를 완전히 구현할 수 있게 하는 새로운 Python DataSource API를 도입했습니다. 이전에는 새로운 파일 형식, 데이터베이스, 또는 데이터 스트림에 대한 커넥터를 작성하는 것이 종종 Java/Scala 지식을 필요로 했습니다. 이제 Python에서 리더와 라이터를 생성할 수 있어, Spark를 더 넓은 개발자 커뮤니티에게 열 수 있습니다. 예를 들어, 사용자 정의 데이터 형식이나 Python 클라이언트만 있는 API가 있다면, 이 API를 사용하여 Spark DataFrame 소스/싱크로 감쌀 수 있습니다. 이 기능은 PySpark의 배치 및 스트리밍 컨텍스트에서의 확장성을 크게 향상시킵니다. Python에서 간단한 사용자 정의 데이터 소스를 구현하는 예제를 보려면 PySpark 깊이 파고들기 게시물을 참조하거나 여기에 있는 예제 샘플을 확인해 보세요. 블로그 게시물 읽기
- 다형성 Python UDTF: SQL UDTF 기능을 기반으로 PySpark는 이제 Python에서 사용자 정의 테이블 함수를 지원하며, 입력에 따라 다른 스키마 형태를 반환할 수 있는 다형성 UDTF를 포함합니다. 데코레이터를 사용하여 Python 클래스를 출력 행의 반복자를 생성하는 UDTF로 생성하고, Spark SQL 또는 DataFrame API에서 호출할 수 있도록 등록할 수 있습니다. 강력한 측면은 동적 스키마 UDTF입니다 - UDTF는 매개변수를 기반으로 출력 열을 결정하기 위해 설정 파일을 읽는 등의 방식으로 스키마를 동적으로 생성하는 analyze() 메소드를 정의할 수 있습니다. 이 다형성 행동은 UDTF를 매우 유연하게 만들어, 다양한 JSON 스키마 처리나 입력을 가변 출력 세트로 분할하는 등의 시나리오를 가능하게 합니다. PySpark UDTF는 Python 로직이 Spark 실행 엔진 내에서 전체 테이블 결과를 출력할 수 있게 합니다. 설명서를 참조하세요.
스트리밍 개선 사항
Apache Spark 4.0은 성능, 사용성, 관찰성을 향상시키기 위해 구조화된 스트리밍을 계속 개선합니다:
- 임의의 상태 유지 처리 v2: Spark 4.0은 transformWithState라는 새로운 임의의 상태 유지 처리 연산자를 도입합니다. TransformWithState는 객체 지향 로직 정의, 복합 유형, 타이머 및 TTL 지원, 초기 상태 처리 지원, 상태 스키마 진화 등 다양한 기능을 지원하는 복잡한 운영 파이프라인을 구축할 수 있습니다. 이 새로운 API는 Scala, Java 및 Python에서 사용할 수 있으며 상태 데이터 소스 리더, 연산자 메타데이터 처리 등 다른 중요한 기능과의 네이티브 통합을 제공합니다. [블로그 포스트 읽기]
- 상태 데이터 소스 - 리더: Spark 4.0은 스트리밍 상태를 테이블로 쿼리하는 기능을 추가합니다. 이 새로운 상태 저장 데이터 소스는 상태 유지 스트리밍 집계(카운터, 세션 윈도우 등)와 조인 등에서 사용되는 내부 상태를 읽을 수 있는 DataFrame으로 노출합니다. 추가 옵션을 통해 이 기능은 사용자가 미세한 가시성을 위해 업데이트별 상태 변경을 추적할 수 있게 합니다. 이 기능은 또한 스트리밍 작업이 어떤 상태를 처리하고 있는지 이해하는 데 도움이 되며, 스트림의 상태 기반 로직을 문제 해결 및 모니터링하는 데 더욱 도움이 되며, 기본적인 손상이나 불변성 위반을 감지하는 데도 도움이 됩니다. 블로그 게시물 읽기
- State Store 개선: Spark 4.0은 또한 개선된 Static Sorted Table (SST) 파일 재사용 관리, 스냅샷 및 유지 관리 개선, 개편된 상태 체크포인트 형식 및 추가적인 성능 개선과 같은 수많은 상태 저장소 개선을 추가합니다. 이와 함께, 간편한 모니터링과 디버깅을 위해 개선된 로깅 및 오류 분류 주변에 많은 변경 사항이 추가되었습니다.
감사의 말
Spark 4.0은 Apache Spark 프로젝트에 대한 큰 도약으로, 핵심 개선사항부터 더 풍부한 API까지 모든 계층에 걸쳐 최적화와 새로운 기능이 도입되었습니다. 이번 릴리스에서는 커뮤니티가 5000개 이상의 JIRA 이슈를 해결하였고, Databricks, Apple, Linkedin, Intel, OpenAI, eBay, Netease, Baidu와 같은 조직에서 활동하는 약 400명의 개별 기여자들이 이러한 개선을 주도하였습니다.
우리는 티켓을 제출하든, 코드를 검토하든, 문서를 개선하든, 메일링 리스트에서 피드백을 공유하든, 모든 기여자에게 진심으로 감사의 말씀을 전합니다. 헤드라인 SQL, Python, 스트리밍 개선 외에도, Spark 4.0은 Java 21 지원, Spark K8S 연산자, XML 커넥터, Connect에서의 Spark ML 지원, 그리고 PySpark UDF 통합 프로파일링을 제공합니다. 변경 사항 전체 목록과 모든 기타 엔진 수준의 개선 사항에 대해서는 공식 Spark 4.0 릴리스 노트를 참조하십시오.

Spark 4.0 가져오기: Spark 4.0은 완전히 오픈 소스입니다. spark.apache.org에서 다운로드하세요. 많은 기능들이 이미 Databricks Runtime 15.x 및 16.x에서 사용 가능했으며, 이제 Runtime 17.0에 기본적으로 포함되어 배송됩니다. 관리 환경에서 Spark 4.0을 탐색하려면 무료 커뮤니티 에디션에 가입하거나 트라이얼을 시작하고, 클러스터를 구성할 때 “17.0”을 선택하면 몇 분 안에 Spark 4.0을 실행할 수 있습니다.

이러한 기능에 대해 논의한 Spark 4.0 모임을 놓쳤다면, 여기에서 녹음 내용을 확인할 수 있습니다. 또한, 이러한 Spark 4.0 기능에 대한 미래의 심층적인 모임에 주목하세요.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)