본문 바로가기

데이터분석

Spark 기본 설명

Spark


Spark는 UC Buckly에서 만든 분산처리를 위한 프로그램입니다. 기존에는 하둡이 많이 쓰였었는데, Spark가 개발되고 하둡보다 빠른 속도를 장점으로 많은 기업에서 사용하고 있습니다. 

 

하둡과 대표적인 차이라면 In-Memory Computing 입니다. 

하둡이 하드디스크에 보관하면서 처리했던 것과 다르게 Spark에서는 Memory에서 처리하기 때문에 10~100배 정도의 성능 향상이 있습니다. 

하둡과 비교 In Memory 

 

실제로 이런 장점을 바탕으로 넷플릭스, 우버, 핀터레스트에서 사용하는 중 입니다. 

위 기업보다 스케일이 더 큰 구글과 링크드인은 자기들이 직접 만들어서 사용한다고 합니다.  


4 가지 기술 스택

Spark Core 위에 4가지 기술 스택이 있어서 사용자에게 편리성을 제공해줍니다. 대표적인 4가지 라이브러리라고 생각하면 될 것 같습니다. 

 

Spark SQL, Mlib 추가예정

 

데이터를 처리할 때, 두 가지로 분류를 나눌 수 있습니다. 시작과 끝이 명확한 Batch와 시간에 따라서 데이터가 지속적으로 쌓이는 Streaming이 있습니다. Spark에서는 실시간 데이터처리를 위한 Spark Streaming real-time 기술이 있습니다. 

Streaming Data의 경우, 시간 단위, 예를 들어서 5분 간격으로 뽑아서 사용하기 때문에 Micro Batch라고 부르기도 합니다. 여기서 사용한 5분 간격으로 뽑는 것은 Windowing 이라는 방법입니다.

 

Batch vs Streaming 
Batch  : 시작과 끝이 명확하게 구분 
Streaming : 시간에 따라서 데이터가 계속 쌓인다.  

 

GraphX는 데이터 간의 관계를 Graph를 활용해서 처리하고 나타내는데 특화된 라이브러리 입니다. 

대표적인 예로, 광고를 추천해줄 때, 지인이 산 물건을 추천해줄 수 있습니다. 그렇다면 인간관계에 대한 Graph를 바탕으로 데이터를 처리해야 합니다. 앞으로 빅데이터가 발달하면서 더욱 활성화될 것 같은 분야입니다. 


Execution Flow

 

SparkContext(SC)를 활용해서 사용자는 Driver Program에서 작업을 명령할 수 있습니다. 


RDD(Resilient Distributed Dataset)

 

RDD를 처리하는데는 2가지 유형의 Operation이 있습니다.

 

Transformation vs Actions

Transformatino: RDD의 값의 변화에 대한 함수

Action: 실제로 값을 변화시킨다. 

 

전체 Operations

RDD 객체는 Read-only입니다. 따라서 값을 임의의 값을 바꿀 수 없습니다. 대신 Transformation을 통해서 새로운 RDD객체를 만들 수 있습니다. RDD를 Transformation하면 새로운 RDD가 생성되는데, 이 때 실제로 메모리를 할당하면서 새로운 객체가 만들어지진 않습니다. Lazy Operation으로 처리합니다. 

 

 

Transformation의 종류는 2가지로 나뉠 수가 있습니다. 

Narrow는 Node내부에서 처리를 하는 방식이고 Wide는node를 넘어서 외부와 결합하여 처리하는 방식입니다. 

Wide 방식을 사용하면 더욱 다양하게 데이터를 처리할 수 있지만, Concurrency로 인해서 처리속도가 제한 됩니다. 

또한 노드가 멀리 떨어져 있을수록 처리속도는 당연히 느립니다. 

 


추가적인 특징

 

Spark는 Scalar로 작성된 프로그램. 파이썬으로 하면 효율을 100% 끌어낼 수는 없다. 

'데이터분석' 카테고리의 다른 글

Biased Estimation, Unbiased Estimation  (0) 2020.08.04
Frequentist vs Bayesian  (0) 2020.08.03
[Warehouse] Pandas Skills  (0) 2020.07.18
[Word Cloud] Mask를 이용한 Word Cloud + Python  (0) 2020.07.17
[차트] 원형 차트 시각화 🤖  (0) 2020.07.14