Spark RDD

이상억·2024년 7월 10일

Spark

목록 보기
3/5

RDD 개념

Spark 는 in memory data 처리 HADOOP은 disk 기반의 데이터 처리

RDD ( Resilient Distributed Dataset)

  • 스파크에서 사용되는 기본 데이터 구조
  • 스파크에서 내부적으로 연산하는 데이터들을 모두 RDD 타입으로 처리

RDD 의 다른 말 Immutable, Partitioned Collections of Record

  • 여러 분산 노드에 나누어짐
  • 다수의 파티션으로 관리됨
  • 변경이 불가능한 데이터 셋

RDD의 생성

  • RDD를 처음 만 들 때 DISK에서 데이터를 가져옴. 모든 데이터는 DISK 에 들어 가 있음 ( HDFS ) 거기서 메모리로 가져옴 그때 RDD 가 생성 , 외부(DISK)로부터 데이터를 로딩할 때

  • 코드에서 데이터를 저장할 때 RDD를 생성할 수 있음

RDD의 연산

RDD를 제어하는 2개의 연산 타입

  • Transformation ( 변환 ) : RDD에서 새로운 RDD를 생성하는 함수

    • filter : 특정 데이터만 산출하는 연산자
    • map : 데이터를 분산 배치하는 연산자
  • Action ( 액션 ) : RDD에서 RDD가 아닌 다른 타입의 데이터로 변한하는 함수들

    • count() : 변환 연산 후 파티션의 데이터 요소 개수
    • collect() : 변환 연산 후 파티션의 데이터 요소 집합

RDD 분산 처리 방법

Immutable : 만들어진 뒤에는 변하지 않음

  • 어떻게 만들었는지 알면 또 만들 수 있음

Partitioned : 데이터 셋을 잘게 잘라서 분산

  • 가장 효율적으로 클러스터 노드에 분산시켜 볼 수 있음

partition

  • 하나의 RDD는 여러 개의 파티션으로 나뉘어짐
    • 성능에 유효한 영향을 줌
  • 파티션의 개수, 기본 파티셔너 ( Hash, Range ) 선택 가능
    • 기본 파티셔너 외에도 사용자가 정의한 파티셔너 사용 가능

Dependency 타입
Narrow Dependency

  • 변환 후 파티션이 하나의 파티션으로 매핑되는 경우
  • 하당 작업이 한 노드에서 처리 가능
  • 네트워크를 사용하지 않음
  • 파티션에 문제가 생겨도 복원 가능

Wide dependency

  • 변환 후의 파티션이 여러 파티션으로 매핑되는 경우
  • 파티션에 문제가 생기면 재계산 비용이 비쌈
  • 셔플이 일어나야 하는 작업들
  • 일반적으로 네트워크를 사용함

계보 (Lineage)

RDD 연산의 순서를 기록 DAG로 표현

  • DAG( Directed Acyclic Graph) : 직관적인 방향성 비순환 그래프로 표현한 것

1. Fault-tolerant 확보

  • 계보만 기록해두면 동일한 RDD를 생성할 수 있음
  • 일부 계산 비용이 큰 RDD는 디스크에 Check Pointing 함

2. Lazy Execution 가능

  • 변환 연산을 읽어 들일 때는 단순히 계보만 생성
  • 액션 연산을 읽어 들일 때 생성된 계보를 실행함

3. 작업 스케줄링에 활용

  • 현재 자원이 배치된 상황, 앞으로 배치될 상황, dependency 등 이런 것들을 미리 계산해서 적절한 작업을 할 수 있는 노드를 찾고 노드에게 작업을 실행 시킬 수 있음.
profile
이상억

0개의 댓글