행위

RDD

DB CAFE

thumb_up 추천메뉴 바로가기


RDD[편집]

  1. 스파크는 RDD(Resilient Distributed Datasets, 탄력적 분산 데이터셋)이라고 불리는 이뮤터블(immutable) 자바 가상 머신(JVM) 객체들의 집합으로 구성됨
  2. 이 객체들은 잡들이 매우 빠르게 연산할 수 있도록 메모리상에서 캐시되고 저장되고 계산됨
    • 이러한 스키마는 하둡과 같은 다른 전형적인 분산 처리 시스템과 비교해 빠른 연산이 가능.
  3. map(), reduce(), filter()와 같은 트랜스포메이션(transformation)을 제공
  4. 다양한 연산을 수행하기 위해 하둡 플랫폼의 유연성과 확장성을 유지
  5. 병렬로 데이터에 트랜스포메이션을 적용하고 기록하는데, 이는 속도와 내구성을 향상시킴
  6. 트랜스포메이션별로 데이터의 흐름(data lineage)를 제공
    • 이로 인해 RDD는 데이터 유실을 막을 수 있으며, RDD 일부의 파티션이 없어지더라도 추가적인 데이터 복구를 하지 않고 유실된 파티션을 재생산해낼 수 있는 충분한 데이터를 가지고 있음
  7. RDD에서 병렬 연산은 포인터를 새로운 RDD에 리턴하는 트랜스포메이션(transformation)과 연산 후에 값을 리턴하는 액션(action) 이렇게 두종류가 있음.
    • RDD 트랜스포메이션은 연산을 즉시 하지 않는다는 점에서 게으른 연산이라 함
    • 트렌스포메이션은 액션이 실행되고 결과가 드라이버에 리턴되어야 할때만 수행됨
  8. 실행을 지연시키려면 성능 측면에서 더욱 정교화된 쿼리를 수행할 수 있음
  9. 최적화는 아파치 스파크 DAG 스케줄러(스테이지를 이용해 변형하는 스테이지 기반의 스케줄러)에서 시작
  10. RDD는 트랜스포메이션과 액션이 분리되어 DAG 스케줄러의 경우 최적화를 쿼리상에서 수행할 수 있으며, 또한 데이터를 섞는 것 같은 상당한 리소스가 소모되는 작업을 피할 수 있음
  11. 테이블 조인 효율화 같은 처리를 사용자가 직접 제어 해야 했기 때문에 최적화에 어려움
// RDD 예제 
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)
distData.map(x => if(x >= 3) x else 0).reduce((x, y) => x + y)