플랫폼 개발팀 기술 블로그

[스파크(Spark)] #1. 개요 본문

Spark

[스파크(Spark)] #1. 개요

피랑이 2019. 4. 4. 17:37

[스파크(Spark)] #1. 개요

[스파크(Spark)] #2. 용어 및 개념

[스파크(Spark)] #3. 구조적 API 개요 및 기본 연산

 

빅데이터 처리 분야에서 아파치 스파크(Spark)가 빠르게 확장되고 거의 표준이 되어가고 있다. 

앞으로 대용량 데이터의 가공이나 실시간 처리 및 분석에 필요하다고 판단되어 알아보게 되었다. 

스파크 관련 책 및 공식 문서를 보고 진행하기로 한다. 

등장배경

이전에 CPU 등 하드웨어 성능은 해를 거듭할수록 수치적으로나 체감으로도 눈에 띄게 발전하였다. 보통 2년마다 데스크탑을 조립해서 바꿨을 정도였다. 하지만 2005년쯤부터는 물리적인 한계로 인하여 성능향상은 점점 둔화하게 된다. 이때부터 하드웨어 엔지니어들은 모든 코어가 같은 속도로 동작하는 병렬 CPU 코어를 추가하는 방향으로 선회하였다. 

반면 데이터를 저장하는 비용은 1년마다 약 절반씩 줄고 있고, 웹캠이나 센서 등등 데이터 수집하는 장비 비용도 점점 저렴해지고 있다. 결과적으로 데이터 수집 및 저장 비용은 극히 저렴해졌지만, 데이터를 처리해야 하는 양은 점점 거대화되어 간다.

전통적인 처리 방법으로는 처리가 늦어지고 점점 불가능해짐으로써 새로운 처리 엔진과 프로그래밍 모델이 필요했다. 

이런 문제를 해결하기 위하여 아파치 스파크가 탄생하게 되었다. 

아파치 스파크란?

여러가지 명칭이 있지만 통합 컴퓨팅 엔진으로 정리하면 될 듯 하다. 

  • 클러스터 환경에서 데이터를 병렬 처리하는 라이브러리 집합
  • 분산 클러스터 컴퓨팅 프레임웍
  • 대용량 데이터를 처리하는 인메모리 기반 고속 처리 엔진

철학

철학은 통합과 컴퓨팅 엔진으로 구분된다. 

통합

 

"빅데이터 애플리케이션 개발에 필요한 통합 플랫폼을 제공하자." 가 핵심 목표이다. 

데이터 읽기, SQL 처리, 스트림 처리, 머신러닝까지 다양한 작업을 같은 연산 엔진과 일관성 있는 API로 수행할 수 있도록 설계되었다. 

즉  "스파크 하나로 모든 처리를 마무리하자!" 이런 철학이 스파크의 큰 장점이다.

컴퓨팅 엔진

 

스파크는 영구 저장소 역활은 수행하지 않고 데이터를 연산하는 역활 수행한다. 

즉 "처리에만 집중하자!"

대신 클라우드 스토리지 및 파일시스템(HDFS), Key-Value Store(카산드라), 메시징 서비스(Kafka) 등 다양한 스토리지를 지원한다. 

 

역사

2009년 UC버클리 대학교에서 Spark : Cluster Computing with Working Sets 내용으로 연구가 시작되었고, 2010년 논문 발표로 알려진다. 

  • 2013년 스파크 1.0 발표, 아파치 프로젝트 선정
  • 2014년 스파크 2.0 발표, 아파치 최상위 프로젝트 선정
  • 2019년 스파크 2.3.3 released

1.0 과 2.0 사이에서는 연산처리 성능 개선과 DataSet과 DataFrame API 병합으로 인한 ETL이 주요 초점이었다.

라이브러리

오픈소스 기반이기 때문에 자체 라이브러리 포함 외부라이브러리 지원한다. 

아래 4종류의 자체 라이브러리를 가지고 있고, 자세한 부분은 차차 알아보도록 한다. 

  • Spark SQL
  • Spark Streaming
  • MLlib
  • GraphX 

지원언어

프로그래밍을 지원하는 언어는 Scala, Java, Python, R이다. 

익숙한 Java로 스파크 공부를 진행하려 했으나 코드가 다른 언어보다 길어 Python으로 진행하기로 한다. 

실행환경

실행할 수 있는 환경은 하나의 노드부터, 수천 대의 서버 클러스터까지 가능하다. 

스파크는 인 메모리 기반의 병렬 처리가 특기이므로 클러스터 환경에서 실행하는 것이 유리하다. 

 

아키텍처

 

스파크 아키텍처를 논리적으로 도식화 해보았다. 

  • Storage : 스파크가 연산을 실행해야 할 데이터 저장소 연결
  • Management : 클러스터 실행 환경 관리
  • Engine : RDD, DataFrame, DataSet에 연산을 명령하여 데이터를 처리하는 작업을 수행
  • Library : 스파크 자체 라이브러리
  • Programing : 지원언어

사례

넷플릭스 (Netflix), 야후 (Yahoo), 이베이 (eBay)와 같은 회사에서 8,000개 이상의 노드 클러스터에서 여러 페타바이트의 데이터를 종합적으로 처리하면서 대규모로 스파크를 사용하고 있다. 

마치며

스파크의 기본적인 개요에 대해서 알아보았다. 

다음에는 스파크가 기본 기능에 대해서 살펴본다. 

 

 

Comments