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 source codes: spark/RDD.scala at master · apache/spark · GitHub
RDD 생성방법
RDD를 생성하는 방법은 다음 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
- 쿠…sal: [컴] Apache Spark
- Using Apache Spark and MySQL for Data Analysis, 2015-10-07
- 압축된 big data 를 spark 를 이용해서 바로 query 를 적용하는 내용
- RDD Programming Guide - Spark 3.1.2 Documentation
- 쿠...sal: [컴] RDD programming
댓글 없음:
댓글 쓰기