들어가며
대용량 처리 기술의 Base Engine인 Spark 학습을 진행하며 기술 내용을 정리한다.
Spark 기반 리소스 활용을 위해 보다 개념적인 학습 및 코드 학습을 학습 범위로 한다.
대용량 데이터 처리를 위한 아키텍처들은 대부분 Spark 엔진을 베이스로 구성되어있다. Ex. Databricks, HD
Spark가 지원하는 데이터 구조는 다음과 같다.
- RDD (Resilient Distributed Dataset) : 스파크에서 가장 기본적인 데이터 구조로, 불변하며 분산된 객체의 컬렉션입니다. RDD는 여러 개의 파티션으로 분할되어 클러스터의 여러 노드에서 처리됩니다.
- DataFrame : RDD의 확장된 버전으로, 스파크에서 구조화된 데이터 처리를 위해 사용되는 API입니다. DataFrame은 행과 열이 있는 구조화된 데이터를 나타내며, 스키마를 사용하여 데이터의 구조를 정의합니다. DataFrame은 분산된 클러스터에서 처리되며, SQL쿼리와 유사한 구문을 사용하여 데이터를 처리할 수 있습니다.
- Dataset : 스파크 1.6 이후에 도입된 구조로, DataFrame의 타입 안정성을 보장하기 위해 만들어졌습니다. Dataset은 DataFrame의 기능과 타입 안정성을 모두 가지며, JVM의 타입 시스템을 사용하여 타입 안정성을 보장합니다.
그 중 Pyspark에서 지원하는 Dataframe은 최근 많은 사용자들에게 인기가 높아지고 있으며 아래와 같은 장점이 있다.
- Dataframe은 내부적으로 Optimizer를 탑재하고 있어 Logical 최적화를 수행합니다.
RDD보다 뛰어난 Logical 최적화를 제공한다는 뜻은 아니지만, RDD를 활용하여 스크립트를 작성할 때에는 개발자가 내부 로직을 모두 이해하고 최적화를 감안하여 스크립트를 작성해야 합니다.
반면, Dataframe은 내부적으로 Logical 최적화를 수행하므로 개발자가 이러한 작업을 하지 않아도 됩니다. - 실행 과정을 확인할 수 있습니다.
Dataframe을 사용하면 Spark 실행 과정을 가시적으로 확인할 수 있습니다. RDD를 사용할 경우 해당 스크립트를 순차적으로 실행하기에 스크립트 자체가 실행 과정이라고 볼 수 있다. 이는 1번의 사유와 유사하게도 스크립트를 작성하는 개발자에 많은 것이 좌우된다는 것을 의미합니다.