본문 바로가기

IT105

Spark - RDD Dependency RDD의 내부 구성을 잠깐 생각해보자. RDD는 Spark에서 추상화 데이터 모델이다. 때문에 분산 처리된 데이터의 집합이기도 하다.그러므로 위와 같이 표현될 수 있다. 즉, RDD는 각 노드의 파티션에 분산되어 있다. (예를 들어, groupByKey 메소드의 결과는 Shuffling된 Pair RDD가 될 것이며, Pair RDD는 각 노드의 파티션에 골고루 분산되어 있다.) 여기서 Lineage에서 처럼 A -> B의 관계를 RDD -> RDD로 위의 그림을 좀 더 확장하면, 아래와 같다.사전에 작업된 RDD를 부모 RDD, 이를 바탕으로 작업된 RDD를 자식 RDD로 정의하며 자식 RDD를 만들게한 map 메소드를 Dependency라 한다.개념적으로 이제 짚고 넘어가는 것이긴한데, 그 동안 사용.. 2020. 2. 5.
Spark - Partitioning Spark에서 파티셔닝(Partitioning)은 RDD의 데이터를 여러개의 파티션에 나누는 것이다. 파티셔닝에 이해를 위해 간단한 예를 들어보자.val purchasesPerCost = purchasesRdd .map(p => (p.customerId, p.price)) .groupByKey()map에서 Pair RDD가 만들어진 후, groupByKey에 의해 RDD는 shuffling 된다.그런데 shuffling된 RDD는 어떤 노드에 전달될지 어떻게 결정하는 것일까?바로, p = k.hashCode() % numPartitions에 의해 p를 호스팅하는 노드에 전달된다. (Hash Partitioning 기법을 사용할 때) 이렇듯 파티셔닝을 통해 각 데이터들이 어떤 노드에 저장될지 결정된다.Sp.. 2020. 2. 4.
Spark - Shuffling Shuffling은 분산 시스템 환경에서 데이터가 움직이는 것(A Node -> B Node)을 의미한다. 간단한 예시 하나를 확인해보자.case class CFFPurchase(customer: Int, destination: String, price: Double) val purchasesRDD = sc.parallelize(List(CFFPurchase(100, "Geneva", 22.25), | CFFPurchase(300, "Zurich", 42.10), | CFFPurchase(100, "Fribourg", 12.40), | CFFPurchase(200, "st. Gallen", 8.20), | CFFPurchase(100, "Lucerne", 31.60), | CFFPurchase(300, .. 2020. 2. 3.
Spark - Pair RDD Pair RDD는 key-value 형태의 RDD 묶음(?)이다.Spark에서 pair RDD가 중요한 이유는 일반적으로 대용량 데이터 처리는 key-value 형태에서 수행하기 때문이다.그런데 익숙하게도 key-value 형태는 여러 언어에서 사용하고 있다. (아래 Scala, Python 참조)Scala Python def val collection = Map( "A" -> 1, "B" -> 2, "C" -> 3 ) collection = { "A" : 1, "B" : 2, "C" : 3 } 이 때문인지는 모르겠지만, 대용량 데이터 처리를 위한 분산 시스템 환경에서는 key-value 형태가 매우 중요하다.그도 그럴 것이 분산 데이터 처리의 기반을 닦은 Google의 MapReduce가 key-val.. 2020. 2. 1.