Data Engineering/Spark

Data Engineering/Spark

[Spark] Apache Spark 개념

Apache Spark 개념Apache Spark는 대규모 데이터를 빠르게 처리하고 분석하기 위해 만들어진 오픈 소스 분산 컴퓨팅 프레임워크임.탄탄한 메모리 기반의 처리 성능과 유연한 API로 빅데이터 생태계에서 핵심적인 위치를 차지하고 있음. Apache Spark 탄생 배경과 특징1. 탄생 배경초기 빅데이터 처리는 주로 Hadoop MapReduce가 담당했으나, 반복 연산이나 실시간·대화형 분석에 상대적으로 부적합했음(디스크 기반 처리, 반복 작업 시 I/O 부담 등이 크기 때문).Spark는 UC Berkeley AMP Lab에서 메모리에 최적화된 고속 분산 처리 엔진을 구현하기 위해 시작된 프로젝트로, 이후 Apache Software Foundation에 기여되어 활발하게 발전해 왔음. 2. ..

Data Engineering/Spark

[Spark] Pyspark에서 repartition(), coalesce() 사용

repartition()와 coalesce()의 역할과 차이점repartition()과 coalesce()는 Spark에서 데이터 파티셔닝 개수(=파티션 수)를 재조정하는 함수임.파티션은 Spark의 분산 처리 단위로, 적절한 파티션 수를 유지하면 클러스터 자원을 효율적으로 사용할 수 있음.두 함수의 특징은 아래와 같음. 1. repartition(n)데이터셋을 지정한 n개의 파티션으로 새롭게 분산.파티션 수를 늘리거나 줄이는 모든 경우에 사용 가능.셔플(Shuffle)이 항상 발생하기 때문에 비용이 높은 연산.파티션을 분산시킬 때 무작위 랜덤 샘플링 방식으로 데이터를 재분배하므로 전체 데이터를 고르게 분산하려는 경우 유용.예) df.repartition(10): DataFrame의 파티션을 10개로 만..

Data Engineering/Spark

[Spark] Disk Spill

Disk SpillApache Spark에서 디스크 스필(Disk Spill)이란, 메모리 내에서 처리하기 어려울 정도로 데이터가 많아졌을 때 데이터를 디스크(주로 임시 디렉터리)에 임시로 저장(“스필”)하여 처리를 이어가는 과정을 말함.이는 Spark가 분산 환경에서 대용량 데이터를 다룰 때 발생할 수 있는 정상적인 현상이며, 메모리를 효율적으로 활용하기 위해 설계된 핵심 매커니즘 중 하나임. 디스크 스필의 작동 원리1. 메모리 기반 연산의 한계Spark는 RDD(Resilient Distributed Dataset)나 Dataset/DataFrame 연산 시 최대한 메모리에서 데이터를 처리하여 빠른 속도를 추구함.그러나 다음과 같은 상황에서 메모리만으로는 처리가 어려워짐. 1-1. 작업(Task)에서..

Data Engineering/Spark

[Spark] SparkSQL의 Window함수 종류

SparkSQL의 Window함수 종류아파치 스파크(Spark)에서 윈도우 함수(Window Function)는 SQL 표준에서 정의된 윈도우 함수와 유사한 기능을 제공하며, 데이터 분석 및 처리 시 그룹 내에서의 순위, 이전/다음 행과의 비교, 누적값 계산 등 다양한 패턴을 효율적으로 구현할 수 있음.윈도우 함수는 GROUP BY 기반의 집계 함수로는 해결하기 어려운, 세분화된 계산 로직이 필요한 경우 자주 사용됨. 윈도우 스펙윈도우 함수를 사용하기 위해서는 먼저 윈도우 스펙(Window Specification)을 정의해야 함.윈도우 스펙은 다음 세 가지 요소로 구성됨. 1. PARTITION BY: 행을 어떤 기준으로 파티션(그룹) 지을 것인지 정의함.2. ORDER BY: 파티션 내에서의 정렬 순..

Data Engineering/Spark

[Spark] Apache Spark 구조

Apache Spark 구조Apache Spark는 분산 컴퓨팅 환경에서 대규모 데이터를 빠르게 처리할 수 있도록 설계된 클러스터 컴퓨팅 프레임워크임.Spark의 구조(아키텍처)를 이해하려면 먼저 Spark가 어떻게 동작하는지, 어떤 컴포넌트로 구성되어 있는지, 그리고 내부에서 어떤 메커니즘으로 최적화가 이루어지는지를 살펴볼 필요가 있음. 핵심 컴포넌트 개요Apache Spark에는 크게 다음과 같은 핵심 컴포넌트들이 존재함. 1. Driver (스파크 드라이버)2. Cluster Manager (클러스터 매니저)3. Executors (실행기)4. SparkSession / SparkContext (애플리케이션 진입점)5. RDD / Dataset / DataFrame (데이터 추상화)6. Cataly..

Data Engineering/Spark

[Spark] Apache Iceberg

Apache IcebergApache Iceberg는 아파치 재단의 오픈 소스 테이블 포맷(table format) 프로젝트임.대규모 데이터 레이크에서 테이블 단위의 관리와 ACID(원자성, 일관성, 격리성, 내구성) 트랜잭션을 안정적으로 지원하기 위해 설계됨.Iceberg는 기존에 많이 쓰이던 Hadoop/Hive 테이블 포맷이 갖는 문제점(예: 수많은 작은 파일이 생기는 문제, 스키마 진화와 파티셔닝의 유연성 부족, 트랜잭션 동시성 문제 등)을 해결하고자 도입됨.특히 Spark, Trino, Flink, Presto 등 다양한 엔진과의 연동이 활발하며, 데이터 레이크 상에서 DW(데이터 웨어하우스)에 준하는 기능을 제공하는 것을 목표로 하고 있음. Iceberg의 핵심 설계 목표1. 정확한 스냅샷/버..

Data Engineering/Spark

[Spark] Apache ORC 파일 구조

Apache ORC 파일 구조Apache ORC(Optimized Row Columnar) 파일은 빅데이터 환경에서 효율적인 컬럼 지향 분석 쿼리를 지원하기 위해 설계된 파일 포맷임.주로 Apache Hive, Apache Spark, Presto, Trino 등 다양한 분산 SQL 엔진 및 Hadoop 에코시스템에서 사용되며, 대규모 데이터 집합을 더 빠르고 더 적은 자원을 사용하여 처리할 수 있도록 여러 최적화를 내장하고 있음. 전체 파일 구조ORC 파일은 크게 다음과 같은 구성 요소로 이루어짐. 1. Postscript2. Footer3. Stripes (파일에서 실제 데이터가 저장되는 단위) [스트라이프들] [Footer] [Postscript]파일의 끝 부분에 Postscript와 Footer가..

Data Engineering/Spark

[Spark] Apache Parquet 파일 구조

Apache Parquet 파일 구조Apache Parquet는 컬럼 지향형(columnar) 저장 형식을 채택한 고성능 분석용 파일 포맷임.분산 시스템(예: Hadoop, Spark)에서 효율적인 저장 및 분석 작업을 하기 위해 설계되었으며, 적절한 인덱싱과 압축, 인코딩 방식을 결합함으로써 높은 성능을 제공함.내부 구조는 크게 File Header, File Footer, 그리고 그 사이를 구성하는 Row Group(안에는 여러 column chunk 및 page가 존재)으로 나눌 수 있음. 전체적인 파일 구조Parquet 파일은 논리적으로 다음과 같은 구성을 가짐.+-------------------+--------------------------+-----------------+| File ..

Data Engineering/Spark

[Spark] Spark Application 실행 과정

Spark Application 실행 과정아파치 스파크(Apache Spark)는 대규모 데이터 처리를 위해 설계된 분산 컴퓨팅 프레임워크임.스파크 애플리케이션은 “드라이버(Driver)”와 “익스큐터(Executor)”가 상호작용하며 작업을 수행하는 구조로 동작함.이때 기본적으로 스파크 애플리케이션이 생성되고 실행되는 과정을 이해하면, 내부 아키텍처나 최적화 전략을 수립하는 데 큰 도움이 됨. 스파크 애플리케이션의 구성 요소1. Driver Program(드라이버)사용자 코드(예: 스칼라, 파이썬, 자바 등)에서 SparkSession 또는 SparkContext를 초기화하면, 드라이버가 생성됨.드라이버는 스파크 애플리케이션의 메인 진입점으로, 전체 실행 계획(DAG)을 관리하고, 스케줄링하고, 작업(..

Data Engineering/Spark

[Spark] Adaptive Query Execution

Adaptive Query ExecutionApache Spark 3.0부터 본격적으로 도입된 Adaptive Query Execution(AQE)는 런타임에 실행 계획을 동적으로 최적화함으로써, 기존의 정적(Static) 최적화가 갖는 한계를 보완하고 Spark SQL 성능을 크게 향상시키는 기술임.일반적으로 Spark SQL은 쿼리를 제출할 때 Catalyst 옵티마이저를 통해 논리적/물리적 계획을 최적화하지만, 쿼리 실행 이전에 추정된 통계 정보(Statistics) 를 기반으로 계획이 결정됨.그러나 빅데이터 환경에서는 데이터 분포가 매우 다양하여 사전에 추정된 통계가 실제와 많이 다를 수 있기 때문에, 기존 정적 최적화만으로는 완벽한 성능을 보장하기 어려움.이 문제를 해결하기 위해 AQE는 실행 ..