본문 바로가기

전체 글114

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.
Spark - Reduction In Parallel 먼저 Reduction은 값을 더 작은 값으로 변형한다는 의미이다.보다 쉬운 이해를 위해 아래에 Scala에서 reduction 관련 예시를 추가하였다. 그렇지만 언어를 떠나서 reduction은 입력받은 값을 최종적으로 단일 값으로 변경한다는 것이다.val collection = List(1, 3, 2, 5, 4, 7, 6) val res = collection.reduce((x, y) => x max y)val collection = List(1, 3, 2, 5, 4, 7, 6) val res = collection.fold(11)((x, y) => x max y)그런데 모든 Scala의 reduction 메소드가 Spark에서 동작하는 것은 아니다. 그 이유는 바로 Parallelizable 때문이.. 2020. 2. 1.
Spark - RDDs Resilient Distributed Datasets 즉, RDD는 변경할 수 없는(immutable) elements 집합이다. 간단히 RDD의 특징을 살펴보면- Partitioning- Persistence- Fault Tolerance- Lazy Evalution- ...이 밖에도 많이 있지만, 자세한 것은 처음 접할 때 어려울 수 있으니 차근차근 알아보도록 하겠다.다만, 이와 같은 특징들은 Spark가 데이터를 효과적으로 처리할 수 있도록 한다.*RDD의 원천부터 알고 싶다면, "https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf" 관련 Paper를 읽어보는 것을 추천한다. 위에서 언급했듯이, RDD는 여러가지 데이.. 2020. 1. 24.
SOLID Principle SRP (Single Responsibility Principle)단일 책임 원칙은 쉽게 접할 수 있는 원칙이다.그렇지만 반대로 쉽게 접할 수 있다고 해서 쉽게 적용 할 수 있는 부분도 아니다. 그 이유는 바로 "책임" 이라는 의미가 엄청 모호하다는 것이다. 상황, 시점 등등에 따라 사람이든 다른 무엇이든 해야하는 것이 다르기 때문이다.그렇다면 소프트웨어 설계 관점에서 책임은 무엇일까. 고민해보면 역시 소프트웨어 요구사항을 생각할 수 밖에 없는 것 같다.즉, 소프트웨어 자체가 요구 사항에 기반하여 객체, 메소드가 만들어 지기 때문에 시나리오를 책정하고 그에 따라 구분되는 각 구성 요소의 역할들이 "책임" 이지 않나 싶다. 하지만 SRP의 더 큰 문제라 할 수 있는 지점은 나름대로 책임을 구분하여 분리하였.. 2019. 11. 17.