이제 Databricks Runtime 7.0에서 사용할 수 있습니다.
작성자: Matei Zaharia, Reynold Xin, Xiao Li, Wenchen Fan , Yin Huai
및 기타 최적화 덕분에 Spark 2.4에 비해 TPC-DS 성능이
Apache SparkTM 3.0.0 릴리스가 새로운 Databricks Runtime 7.0의 일부로 Databricks에서 제공됩니다. 3.0.0 릴리스에는 3,400개 이상의 패치가 포함되어 있으며 오픈 소스 커뮤니티의 엄청난 기여가 집대성된 결과물입니다. 또한 Python 및 SQL 기능이 크게 발전했으며 탐색 및 프로덕션 환경 모두에서 사용 편의성에 중점을 두었습니다. 이러한 이니셔티브는 더 많은 사용 사례와 더 넓은 사용자층을 만족시키기 위해 프로젝트가 어떻게 발전해 왔는지를 보여주며, 올해는 오픈 소스 프로젝트로서 10주년을 맞이합니다.
Spark 3.0의 주요 새로운 기능은 다음과 같습니다.

이 버전의 Apache Spark를 도입하는 데 주요 코드 변경은 필요하지 않습니다. 자세한 정보는 마이그레이션 가이드를 확인하세요.
Spark 개발과 진화 10주년
Spark는 데이터 집약적 컴퓨팅에 중점을 둔 연구실인 UC Berkeley의 AMPlab에서 시작되었습니다. AMPlab 연구원들은 대규모 인터넷 기업들과 함께 데이터 및 AI 문제를 해결하고 있었지만, 이와 동일한 문제가 대규모의 증가하는 데이터를 보유한 모든 기업에도 닥칠 것이라는 점을 알게 되었습니다. 팀은 이러한 새로운 워크로드를 처리하고 동시에 개발자들이 빅데이터 작업을 위한 API에 훨씬 더 쉽게 접근할 수 있도록 새로운 엔진을 개발했습니다.
커뮤니티의 기여를 통해 스트리밍, Python, SQL 관련 새로운 기능들이 빠르게 추가되어 Spark가 다양한 영역으로 확장되었으며, 이제 이러한 패턴들은 Spark의 주요 사용 사례 중 일부가 되었습니다. 이러한 지속적인 투자를 통해 Spark는 오늘날 데이터 처리, Data Science, machine learning 및 데이터 분석 워크로드를 위한 사실상의 표준 엔진으로 자리매김했습니다. Apache Spark 3.0은 현재 Spark에서 가장 널리 사용되는 두 언어인 SQL과 Python에 대한 지원을 크게 개선하고 Spark의 나머지 부분 전반에 걸쳐 성능 및 운영성을 최적화함으로써 이러한 추세를 이어가고 있습니다.
Spark SQL 엔진 개선
Spark SQL은 대부분의 Spark 애플리케이션을 지원하는 엔진입니다. 예를 들어 Databricks에서는 Spark API 호출의 90% 이상 이 SQL 옵티마이저에 의해 최적화된 다른 라이브러리와 함께 DataFrame, 데이터세트 및 SQL API를 사용하는 것으로 나타났습니다. 이는 Python 및 Scala 개발자조차도 작업의 상당 부분을 Spark SQL 엔진을 통해 처리한다는 것을 의미합니다. Spark 3.0 릴리스에서는 기여한 모든 패치의 46% 가 SQL용이었으며 성능과 ANSI 호환성을 모두 개선했습니다. 아래 그림과 같이 Spark 3.0은 총 런타임에서 Spark 2.4보다 약 2배 더 나은 성능을 보였습니다. 다음으로 Spark SQL 엔진의 네 가지 새로운 기능을 설명하겠습니다.

새로운 적응형 쿼리 실행 (AQE) 프레임워크는 데이터 통계가 없거나 부정확하고 비용이 잘못 추정되어 초기 계획이 최적이 아니더라도 런타임에 더 나은 실행 계획을 생성하여 성능을 개선하고 튜닝을 단순화합니다. Spark는 스토리지와 컴퓨팅이 분리되어 있어 데이터 도착을 예측하기 어려울 수 있습니다. 이러한 모든 이유로 Spark에서는 기존 시스템보다 런타임 적응성이 더욱 중요해집니다. 이번 릴리스에서는 세 가지 주요 적응형 최적화를 소개합니다.
3TB TPC-DS 벤치마크를 기준으로, AQE를 사용하지 않았을 때와 비교했을 때 AQE를 사용하는 Spark는 2개의 쿼리에서 1.5배 이상, 다른 37개의 쿼리에서 1.1배 이상의 성능 향상을 보였습니다.


동적 파티션 정리 는 옵티마이저가 컴파일 시간에 건너뛸 수 있는 파티션을 식별할 수 없을 때 적용됩니다. 이는 하나 이상의 팩트 테이블이 임의 개수의 차원 테이블을 참조하는 스타 스키마에서 드문 일이 아닙니다. 이러한 조인 운영에서는 차원 테이블 필터링으로 생성된 파티션을 식별하여 조인이 팩트 테이블에서 읽어들이는 파티션을 정리할 수 있습니다. TPC-DS 벤치마크에서 102개 쿼리 중 60개가 2배에서 18배 사이의 상당한 속도 향상을 보였습니다.
ANSI SQL 규정 준수 는 다른 SQL 엔진에서 Spark SQL로 워크로드를 마이그레이션하는 데 매우 중요합니다. 규정 준수를 개선하기 위해 이번 릴리스에서는 그레고리력을 사용하도록 전환했으며, 사용자가 ANSI SQL의 예약어를 식별자로 사용하지 못하도록 설정할 수 있는 기능도 추가했습니다. 또한 숫자 연산의 런타임 오버플로 검사와 미리 정의된 스키마가 있는 테이블에 데이터를 삽입할 때의 컴파일 타임 유형 강제 적용 기능을 도입했습니다. 이러한 새로운 유효성 검사 기능은 데이터 품질을 향상시킵니다.
조인 힌트: 컴파일러를 계속 개선하고는 있지만, 조인 알고리즘 선택은 통계 및 휴리스틱을 기반으로 하므로 컴파일러가 모든 상황에서 항상 최적의 결정을 내릴 것이라고 보장할 수는 없습니다. 컴파일러가 최상의 선택을 할 수 없는 경우, 사용자는 조인 힌트를 사용하여 옵티마이저가 더 나은 계획을 선택하도록 영향을 줄 수 있습니다. 이번 릴리스는 새로운 힌트인 SHUFFLE_MERGE, SHUFFLE_HASH, SHUFFLE_REPLICATE_NL을 추가하여 기존 조인 힌트를 확장합니다.

많은 Python 개발자가 데이터 구조 및 데이터 분석에 pandas API를 사용하지만, 이는 단일 노드 처리로 제한됩니다. 또한 Apache Spark 기반의 pandas API 구현인 Koalas를 지속적으로 개발하여 데이터 과학자들이 분산 환경에서 빅데이터로 작업할 때 생산성을 높일 수 있도록 지원하고 있습니다. Koalas는 클러스터 전반에서 효율적인 성능을 달성하기 위해 PySpark에 많은 함수(예: 플로팅 지원)를 빌드할 필요를 없애줍니다.
1년 이상의 개발 끝에 pandas용 Koalas API 커버리지는 80%에 육박했습니다. Koalas의 월간 PyPI 다운로드 수는 850,000건으로 빠르게 증가했으며, Koalas는 2주 릴리스 주기로 빠르게 발전하고 있습니다. Koalas가 단일 노드 pandas 코드에서 마이그레이션하는 가장 쉬운 방법일 수 있지만, 많은 분들이 여전히 인기가 높아지고 있는 PySpark API를 사용하고 있 습니다.

Spark 3.0은 PySpark API에 다음과 같은 몇 가지 향상된 기능을 제공합니다.
Spark에서 Python 지원 및 사용성을 개선하는 것은 계속해서 저희의 최우선 과제 중 하나입니다.
Hydrogen, 스트리밍 및 확장성
Spark 3.0을 통해 Project Hydrogen의 주요 구성 요소를 완성했으며, 스트리밍과 확장성을 개선하기 위한 새로운 기능도 도입했습니다.

Spark 3.0의 기타 업데이트
Spark 3.0은 3,400개 이상의 Jira 티켓이 해결된 커뮤니티의 주요 릴리스입니다. 이는 Databricks, Google, Microsoft, Intel, IBM, Alibaba, Facebook, Nvidia, Netflix, Adobe 등과 같은 기업은 물론 개인을 포함한 440명 이상의 기여자들이 참여한 결과입니다. 이 블로그 게시물에서는 Spark의 주요 SQL, Python 및 스트리밍 발전 사항을 중점적으로 다루었지만, 이번 3.0 마일스톤에는 여기서 다루지 않은 다른 많은 기능이 있습니다.