Data Engineering/Spark

[Linux/Spark] Apache Spark에 대해 알아보자

seoraroong 2024. 8. 22. 00:00

Apache Spark

 

Aparche Spark는 디스크 기반의 MapReduce와 달리 메모리 기반의 처리 방식을 사용해 높은 성능을 제공한다.

Hadoop은 매번 중간 결과를 디스크 (하드웨어)에 저장한다.

-> 데이터 처리 속도가 대폭 개선되었다

-> 고성능, Functional programming Interface

 

메모리 가격이 하락하며 메모리 시장이 호황을 누리던 2012년 등장했다.

-> 여러 단계 연산, 반복 연산은 중간 메모리에 저장하여 처리하는 것이 효율적

 

메모리에 데이터를 캐시하여 반복적인 데이터 액세스와 변환 작업을 빠르게 수행할 수 있다.

 

Machine Learning과 같은 알고리즘처럼 반복 계산이 많은 경우 좋은 성능을 보인다.

 

 

 

Apache Spark의 핵심인 RDD (Resilient Distributed Dataset)

RDD는 Apache Spark의 핵심 데이터 구조라고 할 수 있으며, 대규모 데이터 처리를 위한 분산 데이터 집합을 표현한다.

다음과 같은 주요한 특징을 가지고 있다.

 

내결함성 (Fault Tolerance)

: RDD는 내결함성을 제공해 클러스터의 일부 노드가 실패하더라도 데이터 손실 없이 계속해서 처리를 할 수 있다.

이것은 RDD가 작업 실행 계획을 기록하는 lineage 정보를 유지하기 때문에 가능한 일이다.

 

불변성 (Immutability)

RDD는 불변 데이터 구조이다. 다시 말해 RDD를 생성한 이후에는 데이터를 변경할 수 없고, 데이터 변형이 필요한 경우에는 새로운 RDD를 생성해야 한다.

이 특성은 데이터 처리를 더욱 간단히 하고 병렬 처리를 안전하게 지원한다.

 

분산 처리 (Distributed Processing)

RDD는 클러스터의 여러 노드에 분산되어 저장되고, 병렬로 작업을 수행할 수 있다.

대규모 데이터 셋을 분산 처리하므로 성능이 향상되고 효율적인 데이터 처리와 분석이 가능하다.

 

변환과 액션 (Transformation and Action)

 

  • 변환(Transformation): RDD에 적용되는 연산으로, 새로운 RDD를 생성한다.
    • map, filter, flatMap 등이 있다.
  • 액션(Action): RDD의 데이터를 계산하고 결과를 반환하는 연산이다.
    • count, collect, saveAsTextFile 등이 있다.

 

 

RDD의 기본 연산

변환 연산 (Transformations)

- map(func): RDD의 각 요소에 대해 주어진 함수를 적용해 새로운 RDD를 생성한다.

- filter(func): 주어진 조건을 만족하는 요소만 포함된 새로운 RDD를 생성한다.

- flatMap(func): 각 입력 요소에 대해 0개 이상의 출력 요소를 생성해 새로운 RDD를 생성한다.

- reduceByKey(func): 키가 같은 값을 집계해 새로운 RDD를 생성한다.

- groupByKey(func): 키에 따라 값을 그룹화해 새로운 RDD를 생성한다.

 

액션 연산 (Actions)

- count(): RDD의 요소 개수를 계산해 반환한다.

- collect(): RDD의 모든 데이터를 드라이버 프로그램으로 수집해 반환한다.

- take(n): RDD의 처음 n개 요소를 가져온다.

- saveAsTextFile(path): RDD의 데이터를 텍스트 파일로 저장한다.

 

Apache Spark의 Scala Interface

scala는 간결한 표현이 가능한 모던 프로그래밍 언어이다.

Functional Programming -> 파이썬과 유사하며 데이터 변환을 효과적으로 할 수 있다.

- > 함수를 정의해 전체 셀을 실행하지 않고도 기능만 가져올 수 있다.

 

 

Apache Spark 확장 프로젝트

Spark를 엔진으로 하는 확장 프로젝트들이 함께 제공된다.

 

Spark Core

Spark의 기본 엔진으로, 데이터 처리, 메모리 관리, 작업 스케줄링, 클러스터 관리를 담당한다.

 

Spark SQL

SQL 쿼리를 실행하고 데이터 프레임 API를 통해 구조화된 데이터를 처리한다.

 

Spark Streaming

데이터 스트림을 작은 배치로 나누어 처리하고 실시간 데이터 분석을 지원한다.

 

MLlib

분류, 회귀, 군집화, 차원 축소 등의 다양한 기계 학습 알고리즘과 도구를 제공한다.

 

GraphX

그래프 데이터 처리와 분석을 위한 API를 제공한다.

 

 

Apache Spark Streaming

Apache Spark의 모듈 중 하나인 Apache Spark Streaming은 실시간 데이터 스트림을 처리하는 기능을 제공한다.

 

- Micro-Batch Processing

Spark Streaming은 실시간 데이터를 작은 배치 (batch)로 나누어 처리한다. 데이터를 짧은 시간 간격으로 나누어 처리해 배치 처리의 장점을 살리며 실시간 처리를 가능하게 한다.

각 배치는 Spark의 RDD로 변환 되어 Spark의 분산 처리 엔진에서 처리된다.

 

 

 

Apache Spark Streaming의 주요 구성 요소

- DStream (Discretized Stream)

DStream은 Spark Streaming의 기본 데이터 구조이다.

실시간 데이터 스트림을 나타내며 DStream은 시간 간격으로 나누어진 RDD의 연속체라고 할 수 있다.

-> DStream은 RDD의 흐름을 나타내며 각 RDD는 특정 시간 간격에 수집된 데이터를 포함한다.

 

- Transformations

변환 : DStream에 적용할 수 있는 변환 연산은 RDD의 변환 연산과 유사하다.

          map, filter, reduceByKey, window 등의 연산을 지원한다.

 

- Actions

DStream에서 데이터를 집계하거나 결과를 저장하는 연산을 지원한다.

count 액션을 사용해 특정 시간 간격의 데이터 개수를 계산하거나 saveTextFile 액션을 사용해 결과를 HDFS에 저장할 수 있다.

 

- Windowing

Windowing은 특정 시간 간격의 데이터 집합을 생성해 처리하는 기능이다. 이 기능은 데이터 스트림의 일부를 윈도우 단위로 묶어 분석할 수 있게 한다.