본문 바로가기
Programming

[Apache Spark] RDD

by Deafhong 2019. 3. 18.
반응형
p.s> 개인적인 공부 및 내용 정리를 위해 파파고 및 구글을 통해 번역을 한 것이므로, 틀린 번역 내용이 있을 수도 있습니다.
이점을 감안하시고, 읽어봐주세요.


탄력 분산 데이터 세트

RDD(Rilient Distributed Datasets)는 스파크의 기본 데이터 구조다. 그것은 불변의 사물의 분포된 집합체다. RDD의 각 데이터 세트는 논리 파티션으로 나뉘는데, 이는 클러스터의 서로 다른 노드에서 계산될 수 있다. RDD는 사용자 정의 클래스를 포함하여 모든 종류의 Python, Java 또는 Scala 객체를 포함할 수 있다.
형식적으로, RDD는 읽기 전용으로 분할된 레코드의 모음입니다. RDD는 안정적인 저장장치나 다른 RDD의 데이터에 대한 결정론적 작동을 통해 생성될 수 있다. RDD는 병렬로 작동할 수 있는 내결함성 요소의 집합이다.
RDD를 만드는 방법에는 두 가지가 있다. 즉, 드라이버 프로그램에서 기존 컬렉션을 병렬화하거나, 공유 파일 시스템, HDFS, HBase 또는 Hadoop 입력 포맷을 제공하는 데이터 소스와 같은 외부 스토리지 시스템의 데이터셋을 참조하는 방법이다.
스파크는 보다 빠르고 효율적인 MapReduce 작동을 달성하기 위해 RDD의 개념을 이용한다. 먼저 어떻게 MapReduce가 운영되는지 그리고 왜 그것들이 그렇게 효율적이지 않은지 토론해보자.

MapReduce에서는 데이터 공유 속도가 느리다.

MapReduce는 클러스터에서 병렬 분산 알고리즘으로 대용량 데이터셋을 처리하고 생성하기 위해 널리 채택된다. 그것은 사용자가 작업 분배와 내결함성을 걱정할 필요 없이 일련의 높은 수준의 연산자를 사용하여 병렬 연산을 작성할 수 있게 한다.
불행하게도, 대부분의 현재 프레임워크에서, 연산들 사이에 있는 데이터를 재사용하는 유일한 방법은 그것을 외부의 안정적인 저장 시스템 (Ex - HDFS)에 쓰는 것이다. 이 프레임워크는 클러스터의 계산 자원에 접근하기 위한 수많은 추상화를 제공하지만, 사용자들은 여전히 더 많은 것을 원한다.
반복적 애플리케이션과 대화형 애플리케이션 모두 병렬 작업 간에 더 빠른 데이터 공유를 요구한다. 복제, 직렬화, 디스크 IO 등으로 인해 MapReduce에서는 데이터 공유 속도가 느리다. 대부분의 Hadoop 애플리케이션인 스토리지 시스템에 대해서는 HDFS 읽기-쓰기 작업을 하는 데 90% 이상을 소비한다.

MapReduce에 대한 반복 작업

다단계 어플리케이션에서 중간 결과를 복수의 연산에 걸쳐 재사용한다. 다음 그림은 MapReduce에서 반복적인 작업을 수행하는 동안 현재 프레임워크의 작동 방식을 설명한다. 이는 데이터 복제, 디스크 I/O, 직렬화 등으로 인해 상당한 오버헤드가 발생하므로 시스템이 느려진다.


MapReduce에 대한 인터랙티브 작업

사용자는 데이터의 동일한 하위 집합에서 임시 쿼리를 실행한다. 각 쿼리는 애플리케이션 실행 시간을 좌우할 수 있는 안정적인 스토리지에서 디스크 I/O를 수행한다.
다음 그림에서는 MapReduce에서 대화형 쿼리를 수행하는 동안 현재 프레임워크의 작동 방식을 설명한다.


스파크 RDD를 이용한 데이터 공유

복제, 직렬화, 디스크 IO 등으로 인해 MapReduce에서는 데이터 공유 속도가 느리다. 대부분의 Hadoop 애플리케이션은 HDFS 읽기-쓰기 작업을 하는데 90% 이상을 소비한다.
이 문제를 인식한 연구자들은 아파치 스파크라는 특수 프레임워크를 개발했다. 스파크의 핵심 아이디어는 RDD(Resilient Distributed Datasets)이며, 메모리 내 처리 연산을 지원한다. 이것은 기억의 상태를 작업 전반에 걸쳐 개체로 저장한다는 것을 의미하며, 그 개체는 그 작업들 사이에서 공유될 수 있다. 메모리에서 데이터 공유는 네트워크나 디스크보다 10~100배 빠르다.
이제 스파크 RDD에서 반복적이고 상호작용적인 작업이 어떻게 이루어지는지 알아보도록 하자.


스파크 RDD에 대한 반복작업

아래 그림에는 스파크 RDD에 대한 반복 작업이 나와 있다. 중간 결과를 안정적 저장장치(디스크) 대신 분산 메모리에 저장해 시스템 속도를 높일 것이다.
참고 - 분산 메모리(RAM)가 중간 결과(JOB의 상태)를 저장하기에 충분하지 않으면 디스크에 그 결과를 저장한다.


스파크 RDD에 대한 인터랙티브 작업

이 그림은 스파크 RDD에 대한 쌍방향 작동을 보여준다. 만약 다른 쿼리가 동일한 데이터 세트에서 반복적으로 실행된다면, 이 특정 데이터는 더 나은 실행 시간을 위해 메모리에 보존될 수 있다.

 
기본적으로, 각각의 변형된 RDD는 당신이 그것에 대해 조치를 실행할 때마다 반박될 수 있다. 그러나, 당신은 또한 메모리에 RDD를 지속할 수 있으며, 이 경우 스파크는 다음에 당신이 그것을 쿼리할 때 훨씬 더 빠른 접근을 위해 그 요소들을 클러스터 상에 둘 것이다. 또한 디스크에 RDD를 지속하거나 여러 노드에 걸쳐 복제하는 지원도 있다.

반응형

'Programming' 카테고리의 다른 글

[Apache Spark] Advanced Spark Programming  (1) 2019.03.18
[Apache Spark] Deployment  (1) 2019.03.18
[Apache Spark] Core Programming  (0) 2019.03.18
[Apache Spark] Installation  (0) 2019.03.18
[Apache Spark] - Home  (0) 2019.03.18