Contents
- RDD 의 생성 방법
- RDD의 동작 과정
Resilient Distributed Datasets (RDDs)
Spark 는 병렬로 동작할 수 있는 , 결함이 생겨도 복구가 가능한 컬렉션인 RDD 의 개념을 중심으로 한다.
RDD 를 생성하는 방법은 2가지가 있다.
1. driver 프로그램에서 기존 컬렉션을 병렬로 만들기
2. HDFS , HBase 같은 공유 파일 시스템에서 데이터셋을 참조 하기
- Parallelized Collections
1. 기존 컬렉션을 병렬로 만들기
기존 컬렉션을 RDD 로 만드는 방법은
JavaSparkContext의 parallelize 메소드를 이용해 생성한다.
컬렉션의 elements 는 병렬로 동작할 수 있는 분산 dataset 을 형성하기 위해 복사된다.
한번 생성되면, 분산된 dataSet 이 병렬로 운영 할 수 있다.
예를들면 distData.reduce((a, b) -> a + b) 를 실행하면 목록의 elements 를 추가할 수 있다.
병렬 수집을 하기 위해 중요한 파라미터는 dataset 을 잘라낼 파티션 의 수 다
스파크는 한 task 를 클러스터에 있는 각각의 파티션에 실행을 시킨다.
일반적으로 클러스터의 각 CPU가 2~4 파티션들을 사용한다.
보통은 스파크는 클러스터의 맞춰서 자동으로 파티션의 수를 정하지만 ,
원한다면 매개변수를 넣어서 파티션 수를 정할 수 있다.
ex) sc.parallelize(data, 10)
- External Datasets
Spark 는 Hadoop 에서 지원하는 모든 스토리지 소스에서 분산 데이터 셋 을 생성할 수 있다.
Text file RDD 는 SparkContext 의 textFile 메소드로 만들 수 있다.
이 메소드는 파일의 URI(hdfs://, s3a://, etc URI) 를 사용해서 행 집합으로 read 한다.
JavaRDD 파일이 일단 생성되면, dataset 작업들에 의해 동작 할 수 있다.
예를들면, map 과 reduce 메소드를 통해 모든 행들에 사이즈를 합칠 수 있다.
ex) distFile.map(s -> s.length()).reduce((a, b) -> a + b).
*파일을 읽을 때 참고사항
1. 디렉토리나 와일드 카드 를 사용해서 읽을 수 있다. ex) textFile("/my/directory"), textFile("/my/directory/*.txt"), textFile("/my/directory/*.gz")
2. HDFS 에서는 블록이 기본적으로 128mb 인데,
스파크는 기본적으로 파일의 각 블록에 대해 하나의 파티션을 생성하지만,
textFile 에 두번째 파라미터에 값을 넣어서 더 많은 수의 파티션을 요청 할 수 도 있다.
RDD Operations
RDD는 2가지 타입의 작업을 지원한다.
Transformation : 기존 dataset 에서새로운 dataSet 을 생성시킴
actions : dataSet 에 계산 을 실행 한 후 드라이버 프로그램에 값을 반환하는 동작
예를들어, Map 은 각 데이터 집합 요소를 함수를 통해 전달하고, 결과를 새로운 RDD 에 반환하는 Transformation 이다.
반면 reduce 는 RDD 의 모든 요소를 계산하고, 결과를 드라이버 프로그램에 반환하는 action 이다.
모든 스파크의 transformation 은 Lazy 하다.
transformation 은 오직 action 결과를 드라이버 프로그램에 return 할 때만 계산된다.
기본적으로 RDD 는 작업을 실행 할 때마다 다시 계산 할 수 있다.
그러나 캐시를 사용하여 메모리에 RDD 를 유지 할 수 도 있고 ,
이 경우엔 클러스터에 elements를 보관하게 된다.
'데이터처리 > spark' 카테고리의 다른 글
[spark definitive guide] - 스파크 간단히 살펴보기 (0) | 2021.02.02 |
---|---|
[Spark definitive guide] - 아파치 스파크란 (0) | 2021.02.02 |
[Trouble Shooting] spark- Java 버전 dependency (0) | 2020.05.14 |
[reference] spark - RDD programming (0) | 2020.05.11 |
[reference] spark - programming quick start (0) | 2020.05.08 |