SparkContext와 SparkSession의 차이점은 스파크 사용자들 사이에서 자주 논의되는 주제입니다.
둘 다 스파크의 엔트리 포인트(entry points)로 사용 가능하지만, 몇 가지 차이점이 있습니다. 이제 차이점에 대해 알아보겠습니다.
엔트리 포인트(entry point)?
프로그래밍 언어에서 엔트리 포인트는 프로그램 실행이 시작되는 함수나 메서드입니다. 예를 들면 main() 함수가 전형적인 엔트리 포인트입니다.
스파크와 같은 프레임워크에서의 엔트리 포인트는 해당 라이브러리나 프레임워크의 기능을 초기화하고 접근하기 위한 API나 함수를 말합니다. 예를 들어, 스파크에서 SparkContext, SparkSession은 애플리케이션이 스파크 기능을 사용하기 위해 초기에 접근해야 하는 엔트리 포인트입니다.
SparkContext
SparkContext는 스파크 프로그램에서 RDD를 사용하기 위한 주요 엔트리 포인트입니다. 스파크 클러스터와의 연결을 관리하며 RDDs, accumulators, 그리고 broadcast variables와 같은 기본적인 스파크 작업을 생성할 수 있게 해줍니다. 또한, SparkContext를 통해 스파크 작업을 실행하고, SQLContext나 HiveContext 같은 추가 기능을 사용하여 구조화되거나 반구조화된 데이터를 처리할 수 있습니다.
SparkSession
SparkSession은 spark 2.0에서 도입되었으며, RDD보다 높은 수준의 추상화인 DataFrames와 Datasets을 다루는데 더 적합한 엔트리 포인트로 자리잡았습니다. SparkSession은 다양한 데이터 소스나 포맷(ex. Parquet, ORC, JSON, CSV, JDBC, Hive)에 접근할 수 있는 통합된 인터페이스를 제공합니다. 더불어 SparkSession은 다양한 스파크 라이브러리(Spark Streaming, MLlib GraphX)를 하나로 통합하는 역할을 합니다.
내부적으로 SparkSession은 SparkContext object를 생성하기 때문에, SparkSession을 사용해도 SparkContext의 모든 함수나 특징을 이용할 수 있습니다. 또한, SparkSession은 SparkContext에 비해 몇 가지 추가적인 이점을 제공합니다.
아래는 SparkSession 의 이점 4가지입니다.
- 간결성 : SparkSession은 코드가 더 간단하고 모든 스파크 기능에 단일 entry point를 제공함으로써 boilerplate 코드를 줄일 수 있음
- 데이터 소스 접근성 : SparkSession은 다양한 소스에서 바로 DataFrame과 Dataset을 생성할 수 있게 지원해줌
- 최적화 기능 : SparkSession은 Spark SQL 엔진을 활용하여 predicate pushdown, column pruning, 코드 생성 및 적응형 쿼리 실행과 같은 다양한 최적화를 수행할 수 있음
- 데이터 조작 용이성 : SparkSession은 SQL 쿼리와 표현식을 사용하여 데이터를 조작할 수 있도록 지원함. 이는 RDD를 직접 조작하는 것보다 더 명확하고 간결한 방법을 제공함
조건자 하향 (Predicate Pushdown)?
Predicate (조건자): 데이터베이스 쿼리에서 특정 조건을 정의하는 논리적 표현으로 데이터를 필터링하는 데 사용됩니다. 예를 들어, WHERE 절에서 사용되는 조건이 여기에 해당하며, 조건자는 쿼리가 요구하는 데이터를 좁히기 위해 사용됩니다.
Pushdown (하향): 데이터 처리를 데이터가 저장된 위치(즉, 데이터 소스 또는 데이터베이스)에 가까운 곳으로 "내리는" 작업을 의미합니다. 즉, 데이터를 처리하는 로직이나 연산을 가능한 한 소스에 가까운 곳에서 실행하여 불필요한 데이터 전송을 줄이고 전체적인 처리 효율을 높이는 기법입니다.
조건자 하향은 쿼리의 필터링 조건을 가능한 한 데이터 소스에 가깝게 이동시키는 최적화 기술입니다. 이 기술의 목적은 처리해야 할 데이터의 양을 줄임으로써 전체 쿼리 실행 시간을 단축시키는 것입니다. 예를 들어, 데이터베이스에서 특정 조건을 만족하는 행만 조회하는 쿼리가 있다면, 조건자 하향을 통해 스토리지 레벨에서 불필요한 데이터를 미리 필터링함으로써 네트워크 전송량을 줄이고, 메모리 사용량을 최적화할 수 있습니다.
컬럼 가지치기 (Column Pruning)?
컬럼 가지치기는 쿼리에서 필요하지 않은 컬럼 데이터를 불러오지 않는 최적화 기법입니다. 이 방식은 특히 컬럼 기반 저장 포맷(예: Parquet, ORC 등)을 사용할 때 효과적입니다. 쿼리가 특정 컬럼들만 요구하는 경우, 컬럼 가지치기를 통해 필요한 컬럼 데이터만 읽어들여 처리량을 줄이고, I/O 비용을 절감할 수 있습니다. 이는 전체 쿼리 처리 속도를 향상시키는 데 도움이 됩니다.
결론
위와 같은 차이점을 이해함으로써 사용자는 자신의 스파크 애플리케이션에 가장 적합한 엔트리 포인트를 선택할 수 있습니다.
References
'데이터 엔지니어링' 카테고리의 다른 글
Apache Spark : Join strategy (0) | 2024.03.21 |
---|---|
Apache Spark : RDD, Transformation, Action, Persist (0) | 2024.02.27 |
Apache Spark : Spark 소개 및 구조 (0) | 2024.02.06 |
SingleStore DB에 대해 알아보자 (0) | 2024.01.13 |
HyperLogLog에 대해 알아보자 (1) | 2023.09.16 |
댓글