주요 컨텐츠로 이동

Apache Spark 4.0 소개

Databricks Runtime 17.0에서 사용 가능

Apache Spark 4.0

Free Edition이 Community Edition을 대체하여 향상된 기능을 무료로 제공합니다. 지금 바로 Free Edition 사용을 시작하세요.
 

Apache Spark 4.0은 Spark 분석 엔진의 발전에 있어 중요한 이정표입니다. 이 릴리스는 SQL 언어 개선 및 연결성 확장부터 새로운 Python 기능, 스트리밍 개선, 사용 편의성 향상에 이르기까지 전반에 걸쳐 상당한 발전을 가져왔습니다. Spark 4.0은 기존 Spark 워크로드와의 호환성을 유지하면서 그 어느 때보다 강력하고 ANSI 규정을 준수하며 사용자 친화적으로 설계되었습니다. 이 게시물에서는 Spark 4.0에 도입된 주요 기능과 개선 사항, 그리고 이러한 기능이 빅데이터 처리 경험을 어떻게 향상시키는지 설명합니다.

Spark 4.0의 주요 특징:

  • SQL 언어 개선: 세션 변수 및 제어 흐름을 사용한 SQL 스크립팅, 재사용 가능한 SQL 사용자 정의 함수(UDF), 직관적인 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 DataFrame에서 직접 Plotly 기반 네이티브 플로팅, 사용자 정의 Python 배치 및 스트리밍 커넥터를 지원하는 Python 데이터 소스 API, 동적 스키마 지원 및 더 큰 유연성을 위한 다형적 Python UDTF.
  • Structured Streaming 발전: Scala, Java 및 Python에서 transformWithState라는 새로운 임의 상태 처리 API를 사용하여 강력하고 내결함성이 뛰어난 사용자 정의 상태 로직을 구현하고, 상태 저장소 사용 편의성을 개선하고, 디버깅 및 가시성을 개선하기 위한 새 상태 저장소 데이터 소스를 제공합니다.

아래 섹션에서는 이러한 흥미로운 기능에 대한 자세한 내용을 공유하고, 마지막에는 더 자세히 알고 싶은 분들을 위해 관련 JIRA 작업 및 심층 분석 블로그 게시물 링크를 제공합니다. Spark 4.0은 Spark의 익숙함과 최신 데이터 엔지니어링 요구 사항을 충족하는 새로운 기능을 결합하여 대규모 데이터 처리를 위한 강력하고 미래 지향적인 플랫폼을 나타냅니다.

주요 Spark Connect 개선 사항

Spark 4.0의 가장 흥미로운 업데이트 중 하나는 전반적인 Spark Connect 개선, 특히 Scala 클라이언트입니다. Spark 4에서는 모든 Spark SQL 기능이 Spark Connect와 Classic 실행 모드 간에 거의 완벽하게 호환되며 사소한 차이만 남아 있습니다. Spark Connect는 사용자의 애플리케이션과 Spark 클러스터를 분리하는 Spark의 새로운 클라이언트-서버 아키텍처이며, 4.0에서는 그 어느 때보다 강력합니다.

  • 호환성 향상: Spark 4의 Spark Connect에 대한 주요 성과는 Python 및 Scala API의 호환성이 향상되어 Spark Classic과 Spark Connect 사용 간의 전환이 원활해졌다는 것입니다. 이는 대부분의 사용 사례에서 spark.api.modeconnect로 설정하여 애플리케이션에 Spark Connect를 활성화하기만 하면 된다는 의미입니다. Spark의 강력한 쿼리 최적화 및 실행 엔진을 최대한 활용하려면 Spark Connect를 활성화하여 새 작업 및 애플리케이션 개발을 시작하는 것이 좋습니다.
  • 다국어 지원: 4.0의 Spark Connect는 광범위한 언어 및 환경을 지원합니다. Python 및 Scala 클라이언트는 완벽하게 지원되며, Go, Swift 및 Rust용 새 커뮤니티 지원 커넥트 클라이언트를 사용할 수 있습니다. 이 폴리글랏 지원은 개발자가 Connect API를 통해 JVM 생태계 외부에서도 선호하는 언어로 Spark를 사용할 수 있음을 의미합니다. 예를 들어, Rust 데이터 엔지니어링 애플리케이션이나 Go 서비스는 이제 Spark 클러스터에 직접 연결하고 DataFrame 쿼리를 실행하여 Spark의 범위를 전통적인 사용자 기반을 넘어 확장할 수 있습니다.

SQL 언어 기능

Spark 4.0은 데이터 분석을 단순화하는 새로운 기능을 추가합니다.

  • SQL 사용자 정의 함수(UDF): Spark 4.0은 SQL UDF를 도입하여 사용자가 SQL에서 직접 재사용 가능한 사용자 정의 함수를 정의할 수 있도록 합니다. 이러한 함수는 복잡한 로직을 단순화하고 유지 관리성을 개선하며 Spark의 쿼리 최적화 프로그램과 원활하게 통합되어 기존 코드 기반 UDF에 비해 쿼리 성능을 향상시킵니다. SQL UDF는 임시 및 영구 정의를 지원하므로 팀이 여러 쿼리 및 애플리케이션에서 공통 로직을 쉽게 공유할 수 있습니다. [블로그 게시물 읽기]
  • 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 워크플로를 작성하는 것이 더 쉬워집니다. 이 개선 사항을 통해 데이터 엔지니어는 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와 같은 관찰 가능성 도구와의 통합을 단순화하여 로그를 훨씬 쉽게 파싱, 검색 및 분석할 수 있게 합니다. [더 알아보기]
기술 가이드 eBook

Databricks 앱을 위한 핸즈온 가이드

Python API 발전

Python 사용자는 Spark 4.0에서 많은 것을 기대할 수 있습니다. 이 릴리스는 Spark를 더욱 Pythonic하게 만들고 PySpark 워크로드의 성능을 향상시킵니다:

  • 네이티브 플로팅 지원: PySpark에서의 데이터 탐색이 더욱 쉬워졌습니다. Spark 4.0은 PySpark DataFrame에 네이티브 플로팅 기능을 추가했습니다. 이제 DataFrame에서 .plot() 메서드를 호출하거나 관련 API를 사용하여 데이터를 pandas로 수동으로 수집할 필요 없이 Spark 데이터에서 직접 차트를 생성할 수 있습니다. 내부적으로 Spark는 Plotly를 기본 시각화 백엔드로 사용하여 차트를 렌더링합니다. 이는 히스토그램 및 산점도와 같은 일반적인 플롯 유형을 PySpark DataFrame에서 한 줄의 코드로 생성할 수 있음을 의미하며, Spark는 노트북이나 GUI에서 플로팅할 데이터의 샘플 또는 집계를 가져오는 것을 처리합니다. 네이티브 플로팅을 지원함으로써 Spark 4.0은 탐색적 데이터 분석을 간소화합니다. 사용자는 Spark 컨텍스트를 벗어나거나 별도의 matplotlib/plotly 코드를 작성하지 않고도 데이터 세트의 분포 및 추세를 시각화할 수 있습니다. 이 기능은 EDA에 PySpark를 사용하는 데이터 과학자에게 생산성을 크게 향상시킵니다.
  • Python 데이터 소스 API: Spark 4.0은 개발자가 배치 및 스트리밍을 위한 사용자 지정 데이터 소스를 전적으로 Python으로 구현할 수 있는 새로운 Python 데이터 소스 API를 도입했습니다. 이전에는 새로운 파일 형식, 데이터베이스 또는 데이터 스트림에 대한 커넥터를 작성하려면 Java/Scala 지식이 필요했습니다. 이제 Python으로 리더와 라이터를 만들 수 있으며, 이는 Spark를 더 넓은 개발자 커뮤니티에 개방합니다. 예를 들어, 사용자 지정 데이터 형식이나 Python 클라이언트만 있는 API가 있는 경우 이 API를 사용하여 Spark DataFrame 소스/싱크로 래핑할 수 있습니다. 이 기능은 배치 및 스트리밍 컨텍스트 모두에서 PySpark의 확장성을 크게 향상시킵니다. Python으로 간단한 사용자 지정 데이터 소스를 구현하는 예제를 보려면 PySpark 심층 분석 게시물을 참조하거나 여기 예제 샘플을 확인하세요. [블로그 게시물 읽기]
  • 다형적 Python UDTF: SQL UDTF 기능을 기반으로 PySpark는 이제 입력에 따라 다른 스키마 모양을 반환할 수 있는 다형적 UDTF를 포함하여 Python에서 사용자 정의 테이블 함수를 지원합니다. 데코레이터를 사용하여 출력 행의 이터레이터를 생성하는 UDTF로 Python 클래스를 만들고, Spark SQL 또는 DataFrame API에서 호출할 수 있도록 등록할 수 있습니다. 강력한 측면은 동적 스키마 UDTF입니다. UDTF는 매개변수에 따라 즉석에서 스키마를 생성하는 analyze() 메서드를 정의할 수 있습니다. 예를 들어 구성 파일을 읽어 출력 열을 결정할 수 있습니다. 이 다형적 동작은 UDTF를 매우 유연하게 만들어 가변 JSON 스키마 처리 또는 가변 출력 세트로의 입력 분할과 같은 시나리오를 가능하게 합니다. PySpark UDTF는 Python 로직이 Spark 실행 엔진 내에서 호출당 전체 테이블 결과를 출력할 수 있도록 효과적으로 합니다. [문서 보기]

스트리밍 개선 사항

Apache Spark 4.0은 성능, 사용 편의성 및 관찰 가능성을 개선하기 위해 Structured Streaming을 계속해서 개선합니다:

  • 임의 상태 처리 v2: Spark 4.0은 transformWithState라는 새로운 임의 상태 처리 연산자를 도입했습니다. TransformWithState는 객체 지향 로직 정의, 복합 유형, 타이머 및 TTL 지원, 초기 상태 처리 지원, 상태 스키마 진화 및 기타 여러 기능을 지원하여 복잡한 운영 파이프라인을 구축할 수 있게 합니다. 이 새로운 API는 Scala, Java 및 Python에서 사용할 수 있으며 상태 데이터 소스 리더, 연산자 메타데이터 처리 등 다른 중요한 기능과 네이티브 통합을 제공합니다. [블로그 게시물 읽기]
  • 상태 데이터 소스 - 리더: Spark 4.0은 스트리밍 상태를 테이블로 쿼리하는 기능을 추가했습니다. 이 새로운 상태 저장소 데이터 소스는 상태 저장 스트리밍 집계(카운터, 세션 창 등), 조인 등에 사용되는 내부 상태를 읽을 수 있는 DataFrame으로 노출합니다. 추가 옵션을 통해 이 기능은 사용자가 세밀한 가시성을 위해 업데이트당 상태 변경을 추적할 수도 있습니다. 이 기능은 스트리밍 작업이 처리하는 상태를 이해하는 데 도움이 되며, 스트림의 상태 로직을 문제 해결 및 모니터링하고 기본 손상 또는 불변 위반을 감지하는 데 더욱 도움이 될 수 있습니다. [블로그 게시물 읽기]
  • 상태 저장소 개선 사항: Spark 4.0은 또한 향상된 정적 정렬 테이블(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의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요