[컴] RDD, Resilient Distributed Datasets

rdd / spark rdd / apache spark / 아파치 스파크 rdd 란? / rdd 의 의미

RDD, Resilient Distributed Datasets

ref. 1 의 내용을 정리했다.

RDD

Spark의 핵심 아이디어는 RDD (Resilient Distributed Datasets) 이다. Spark는 RDD 개념을 사용하여 더 빠르고 효율적인 MapReduce 작업을 수행한다.

  • RDD (Resilient Distributed Dataset)는 Spark의 기본 ‘자료구조’(data structure)다.
  • 변하지 않는 분산 된 객체 모음 이다.(immutable distributed collection of objects)
  • RDD의 각 데이터 세트는 ’클러스터의 다른 노드에서 계산 될 수있는 논리 파티션’으로 나뉜다.
  • RDD는 사용자 정의 클래스를 포함하여 모든 유형의 Python, Java 또는 Scala 객체를 담을 수 있다.


RDD 생성방법

RDD를 생성하는 방법은 다음 2가지가 있다.

  1. 드라이버 프로그램의 기존 컬렉션을 병렬화
  2. 외부 스토리지 시스템의 dataset 를 참조(referencing)
    • 외부 스토리지 시스템
      • 공유 파일 시스템
      • HDFS
      • HBase
      • Hadoop Input Format 을 제공하는 모든 데이터 소스

기존의 framework 에서 MapReduce

MapReduce는 클러스터에서 병렬 분산 알고리즘을 사용하여 대규모 데이터 세트를 처리하고 생성하는 데 널리 채택된다. 이를 통해 사용자는 작업 분산(work distribution) 과 fault tolerance에 대해 걱정할 필요없이 high-level 연산자 set (set of high-level operators)을 사용하여 병렬 계산(write parallel computations)을 write 할 수 있다.

  • 대부분의 현재 프레임 워크에서 계산들 사이에서 (Ex-두 MapReduce 작업 사이) 데이터를 재사용하는 유일한 방법은 외부의 stable storage system (ex: HDFS)에 데이터를 write 하는 것이다.
  • 반복(iterative) 및 대화형(interactive) 애플리케이션 모두 병렬 작업을 할 때 더 빠른 데이터 공유가 필요하다.
  • 복제(replication), 직렬화(serialization), 디스크 IO(disk IO)로 인해 MapReduce에서 데이터 공유는 속도가 느리다.
  • 스토리지 시스템과 관련하여 대부분의 Hadoop 애플리케이션은 HDFS read-write operation에서 시간의 90 % 이상이 소요된다.

MapReduce 에서 반복적인 작업(iterative operations)

다음 그림은 현재 framework 들이 동작하는 방식을 보여준다. 다음 3개의 동작으로 인해 상당한 overhead 가 발생하고, 그로인해 시스템 속도가 느려진다.

  • data replication
  • disk I/O
  • serialization
from: https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm

MapReduce 에서 대화형 작업(interactive operations)

사용자는 ’같은 data 의 하위집합(subset)’에서 여러 query 들을 실행하게 된다. 그런데 이 query 를 실행할 때마다 data 를 HDFS 에서 읽어온다. 즉 disk I/O 가 발생한다. 그래서 이것이 시간을 잡아먹는다.

from: https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm

Apache Spark RDD

Apache Spark 는 그래서 in-memory processing computation(메모리내 처리 계산) 을 지원한다. Spark 는 작업전반에 걸쳐 ‘현재 메모리 상태’(state of memory) 를 object 로 저장한다 그리고 이 object 는를 작업들(jobs) 사이에서 공유가 가능하다(sharable). 메모리에 있는 data 를 공유하는 것은 ‘네트워크' 와 'disk’ 보다 10~100배는 빠르다.

Spark RDD에서 반복적인 작업(iterative operations)

  • 중간결과를 stable storage 에 계산하는 대신 ‘분산 메모리(distributed memory)’ 에 저장한다.
  • 메모리가 부족하면 disk 에 적는다.
from: https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm

Spark RDD에서 대화형 작업(interactive operations)

  • 만약에 여러개의 다른 query 들이 '같은 data set' 에서 실행되면, 이 특정 data 는 메모리에 저장된다. 그래서 실행속도가 빨라지게 된다.
  • 기본적으로 RDD는 실행할 때마다 새롭게 만들어지지만, 유저가 RDD 를 memory 에 유지시킬 것이다.(persist) 이 때에는 다음 query 시점에서 더 빠른 access 를 가능하게 하기위해, Spark 가 cluster 주위의 요소들을 유지할 수 있다.
  • 유지하려는 RDD(persisting RDDs) 를 disk 에 저장하거나, 여러 노드들에 복사하는 방법도 가능하다.
from: https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm

See Also

  1. 쿠…sal: [컴] Apache Spark
  2. Using Apache Spark and MySQL for Data Analysis, 2015-10-07
    • 압축된 big data 를 spark 를 이용해서 바로 query 를 적용하는 내용
  3. RDD Programming Guide - Spark 3.1.2 Documentation
  4. 쿠...sal: [컴] RDD programming

Reference

  1. Apache Spark - RDD - Tutorialspoint

댓글 없음:

댓글 쓰기