.__.

[Spark 개요] 01. 소개, 특징, RDD 본문

HadoopEco/Spark

[Spark 개요] 01. 소개, 특징, RDD

yesjiyoung 2022. 9. 25. 22:15
- 01.1 Apache Spark가 도대체 뭘까?
- 01.2 Apache Spark 특징은 ?
- 01.3 RDD가 뭔데?

01.1 Apache Spark 가 도대체 뭘까? 


최근 실무에서, 스파크 환경 세팅을 하느라 시스템엔지니어링팀과 짧게 회의를 했다. (방화벽, 네트워크 관련해서...) 

그때, 해당 팀 팀원분이 "아 근데, 스파크가 뭐에요?" 라고 하셨다. 

나는 "아.. 스파크는요~ 대규모 데이터를 처리하는 분산 처리 API라고 생각해주시면 됩니다 :)" 라고 (얼버무려) 대답했다.ㅋㅋㅋ

취준 시절에는 데이터를 다룰 때 Pandas, Numpy, TF만 사용했었는데.. 어쩌다보니 지금은 Spark 와 MR 만 사용하게 됐다.  (그럴수밖에 없는게, 실무에서는 데이터사이즈가 워낙 크니깐..., 아 그리고 간간히 시각화를 위해 Pandas 사용하고 있다.)

아무튼, 어쩌다 쓰고 있는 Spark, MR 에 대해 좀 더 공부하고자 동기들 + 몇몇 마음 맞는 팀원들과 스파크 스터디를 하게되었다. 

원리부터 제대로 공부하여, 다음번 질문을 받을 때에는 제대로 설명할 수 있는 사람이 되고자한다.

 

자, 그래서

Apache Spark는

"빅데이터를 다수의 서버로 구성된 *클러스터에서 분산,병렬 처리하기 위한 오픈소스 엔진" 

이다.

*클러스터 : 여러 대의 컴퓨터들이 모여 하나의 시스템처럼 동작하는 컴퓨터들의 집합. (여러 서버들을 연결한 시스템이라고 생각해도 무관.)

 

좀 더 구체적으로는 아래의 의미를 가진다. 

✏️Apache Spark는 대용량 데이터 프로세싱을 위한 빠르고, 범용적인 메모리 기반 클러스터 컴퓨팅 엔진
✏️분산 메모리 기반의 빠른 분산 병렬 처리
✏️배치, 대화형 쿼리, 스트리밍, 머신러닝과 같은 다양한 작업 타입을 지원하는 범용 엔진으로 Apache Hadoop과 호환
✏️Scala, Java, Python, R 로 spark job 작업 가능 
✏️클러스터 매니저가 존재하는데, 이 매니저가 리소스 관리를 담당하고 있음.

이렇게들 책 or 강의에서 설명을 해주는데.. 결론은 Apache  Spark은 클러스터에서 분산 병렬 처리를 하는 컴퓨팅 엔진. 그 자체라고 생각하면된다. (혹여 저장소(?)라고 착각할 수 있는데, 아니다. 컴퓨팅 엔진이다.)

 

01.2 Apache Spark 특징은? 


특징을 설명하기 전에, Hadoop의 MR과 Apache Spark는 많이 비교가 된다. (MR job vs Spark job)

(갑분, MR 등장.. 근데 갑자기 등장할만큼 중요함.) 

이에 대해서는 천천히 뒤에서 공부할 예정이다.

근데 그냥 여기서 조금 짚고 넘어가고 싶어 구글링해본다. 

 

일단, 스파크가 나오기 전에 Hadoop이라는 것이 구글에서 소개되었다.
문맥상, Hadoop도 그럼 스파크와 비슷한 기능을 할 것이라고 예상이된다. 맞다. Hadoop은 대용량 데이터를 분산 처리할 수 있는 (자바 기반의) 오픈 소스 컴퓨팅 엔진이다. 얼핏보면 스파크랑 똑같아 보이는데.. 사실 데이터 분산 처리 로직이 아예 다른 시스템이다. 

하둡의 분산 처리 방식은 MapReduce 이다. 

Spark의 분산 처리 방식은 다양하다. Map, Filter, FlatMap, GroupBy, Union ... 등등  

위의 사진이 MR이다. map의 결과가 디스크에 저장되고, 그걸 다시 reduce함수가 읽어온다. 이는 논문 공개 당시에는 각광받았을지언정.. 지금은 성능상의 손실이 너무크다. 라고 비난(?)받을 여지가 충분한 로직이다.

map함수가 모두 종료해야 reduce함수가 실행되고, map 단계에서의 데이터가 디스크에 잔류한다는 것이다. (여러 번의 디스크 입출력이 발생되어, 성능이 저하됨)

암튼 이러한 하둡이 가지는 약점을 개선한 것이 스파크이고.! 이 스파크에 대한 특징을 살펴보자.

 

스파크 특징 

✏️In-Memory 컴퓨팅 (물론 Disk 기반도 가능) 
더보기

하드웨어 관점에서 보았을 때, 데이터 분석 시스템은 아래 세 가지 구성요소로 이루어짐.

1. 연산을 수행하는 프로세서

2. 처리의 대상인 데이터가 저장되는 저장장치

3. 그리고 이 둘 사이에 데이터를 전송하는 전송 시스템 

데이터 분석 시스템의 병목이라는 것을 정의하자면, 가장 느린 구성요소 자체를 의미한다. 자 여기 세 가지 요소 중에 데이터 분석 시스템의 병목은 어딜까? 당연 저장장치이다! 더 정확하게는 대용량 저장장치로 사용되는 하드디스크 시스템이 전체 시스템의 성능을 저하하는 병목이라는 것. 

이러한 병목 현상을 극복하기 위해 오랫동안 사용된 방법은 캐시-메모리-하드디스크로 구성되는 메모리 계층 구조를 사용하는 것.

그치만 CPU 성능이 급격하게 발전하여, 하드디스크의 속도 차이가 점점 증가하고, 빅데이터 시대에 처리해야할 데이터의 양이 점차 증가하면서 기존의 캐시 시스템으로 지원하기에는 너무 급속하게 증가함에 따라 다른 방법으로 "인메모리 컴퓨팅" 방식이 등장함. 

 

간단히, 인메모리 컴퓨팅은 기존의 디스크 기반 컴퓨팅과는 달리 데이터를 하드디스크에 저장하고 관리하는 것이 아니라, 전체 데이터를 메로리에 적재하여 사용하는 것. 기존 디스크 기반 컴퓨팅에서는 데이터를 하드디스크에 보관 처리하고, 빈번하게 사용되는 일부 데이터를 메모리에 캐싱하는 구조라고 하면, 인메모리 컴퓨팅은 데이터를 메모리에 보관 연산하고 하드디스크를 데이터의 안전한 보관하기 위한 용도로 쓴다.

 

출처 : https://slownews.kr/75315#footnote-1-

✏️RDD 데이터 모델
더보기

RDD는 Resilient Distributed Dataset 의 줄임말로 스파크의 기본 데이터 구조이다. 

분산 변경 불가능한 객체 모음이며, 스파크의 모든 작업운 새로운 RDD를 만들거나, 기존의 RDD를 변형한다.

스파크의 핵심 아이디어는 RDD이며, 메모리 내 처리 연산ㅇ르 지원한다. 메모리에서 데이터 공유는 네트워크나 디스크보다 10~100배빠르다. 다만 데이터를 램에 올린 이후에 fault-tolerant가 발생해도 문제가 없도록 memory내용을 갱신하지 않고 read-only로 사용한 것이 RDD임. 

 

출처 : https://bomwo.cc/posts/spark-rdd/

✏️다양한 개발 언어 지원
더보기

Scala, Java, Python, R, SQL 등 사용 가능 

✏️Hadoop과의 유연한 연계
더보기

하둠의 HDFS, HBase, Yarn 등 사용이 가능하다. 

spark 도 하둡시스템의 역사를 이어가고 있는 것은 사실임! 왜냐, 대용량 데이터를 분산, 병렬 처리하는 것이 목적을 보면 둘 다 동일하니깐! (처리 로직이 다를 뿐, 스파크가 더 개선된 것 뿐)

✏️대화형 질의를 위한 Interative Shell
더보기

Scala, Python, R interpreter 등이 존재.

✏️실시간(Real-time) Stream Processing 
더보기

스파크 스트리밍은 다양한 데이터 소스로부터 데이터를 받아서 실시간 스트리밍 가능하다.
스파크 스트리밍은 스파크 API를 확장해, 내장된 머신러닝 알고리즘을 수행하거나 추가 분석이 가능하다. 
✏️하나의 어플리케이션에서 배치, SQL 쿼리, 스트리밍, 머신러닝과 같은 다양한 작업을 하나의 워크플로우로 결합 가능

 

 

01.3 RDD가 뭔데?


RDD는 Resilient Distributed Dataset의 약자이다.

: Resilient(실패에 강한)
  클러스터의 한 노드가 실패하더라도 다른 노드가 작업 처리한다는 뜻

: Distributed(분산저장하는)

  RDD에 있는 데이터는 클러스터에 자종 분배 및 병렬 연산 수행

: Dataset

  메모리나 디스크에 분산 저장된 변경 불가능한 데이터 객체들의 모음 

 

그렇다고 한다. 

 

RDD의 특징은 다음과 같다.

✏️Immutable하다는 것! (RDD자체는 수정이 안됨, 변형을 통해 새로운 RDD를 생성)
✏️Operation APIs로 다음과 같은 것들이 있음.
- Transformations (데이터 변형, e.g map, filter, groupBy, join)
- Actions (결과연산 리턴/저장, e.g count, collect, save)
✏️Lazy Evaluation이다. (Action 실행 되기전까지는 수행 x)
✏️Controllable Persistence : Cache in RAM/DISK 가능 (반복 연산에 유리)