Big Data Analysis with Scala and Spark



  Coursera mooc 중 Functional Programming in Scala 의 4번째 코스이다. Scala 언어로 작성된 Big Data Analysis 를 하기 위한 툴인 Spark 의 원리 및 사용 방법 등을 알려준다. Spark의 장점이나 Hadoop 과의 차이점 등은 이 과정에서 따로 설명하지 않고, 오직 Scala와 연관된 부분만 설명하고 있다.

  week1에서는 일반적인 Parallel Programming과 Distributed Programming의 차이점 및 특징 등을 설명해준다. Distributed System에서는 Cluster들이 Network를 통해 연결되기 때문에 Network Latency가 발생한다. 이를 고려하여 실시간 데이터 분석을 지원하는 것이 바로 Spark라고 언급한다. 이 외에 Spark에서 사용하는 기본 데이터 Collection인 RDD(Resilient Distributed DataSet)및 기본적인 RDD 사용법을 소개한다.  


  week2에서는 RDD를 가지고 Reduction Operation 작업을 어떻게 하는지 설명한다. 또, Pair RDD 및 이를 활용한 데이터 조작 방법 등을 설명한다. RDD에서 Transformation 작업을 수행할 때마다 해당 작업을 실행하는 것이 아닌, Lazy Evaluation을 활용하여 작업을 뒤로 미룬다. 그러다가 특정 순간에 Action 작업을 수행하면 뒤로 미뤄진 작업들과 함께 한꺼번에 작업을 수행하여 결과물을 내놓는다. 마지막으로 여러 RDD들을 하나로 합치는 Join 동작도 설명한다. Spark에서 사용하는 명령어들은 SQL에서 사용하는 명령어와 비슷한 명령어를 가지고 있다.


  week3에서는 다행스럽게도(?) 과제가 없다. 대신에 아주 중요한 개념인 Shuffling을 설명한다. Shuffling은 Cluster간에 데이터들이 네트워크를 통하여 이동한다는 개념이다. 예를 들어 key를 가진 Pair RDD에서 join()과 같은 작업을 수행하면 Cluster 안에서 기준없이 섞인 key, data 셋들이 특정한 key로 구분된 Partition들로 각 Cluster에서의 데이터들이 이동한다는 개념이다. 그래서, Shuffling 작업이 수행되기 전에, 불필요한 작업들을 모두 수행하고(reduce작업 등을 통한 데이터 축소) 필요할 때에 Shuffling 작업을 수행하라는 것이 week3 의 전반적인 내용이다. 또 Partition을 효율적으로 나누는 여러가지 방법 등을 소개한다.


  week4는 마지막 주차인데, 내가 생각하기에는 두 주 분량의 강의를 하나로 합친 것과 같은 중요함과 강의 량을 보여주고 있다. 우선 Structured vs Unstructured Data를 설명하면서 Structured data나 semi-structured data에서는 Spark SQL 및 DataFrames를 사용하라고 주장한다. DataFrame는 csv, json 등 기존에 알려진 데이터 형식을 이용하여 Query를 작성했을 때, RDD 및 Scala Higher-order Function을 직접 사용하는 것처럼 번거로운 작업을 하지 않고도 아주 최적화된 함수들을 제공한다. 프로그래밍을 할 때, 데이터를 다루는 일을 하다보면 DataBase에서 등장하는 Query나 각종 이론들이 계속 등장한다. DB에 관한 개념이 부족하다면, 나처럼 DataFrame을 다룰 때 오히려 RDD를 다룰 때보다 더 애를 먹을 수 있다. 마지막으로, DataSets에 대하여 설명한다. DataSet은 Spark 2.0 이후에 등장한 개념으로, RDD와 DataFrame를 합쳐 놓은 것이라고 간단하게 생각할 수 있다. RDD의 Higher-Order Function 및 DataFrame의 Query 등을 함께 사용할 수 있다.

+ Recent posts