탐비의 개발 낙서장

스파크(Spark)란? 본문

프로그래밍/데이터베이스

스파크(Spark)란?

탐비_ 2019. 12. 7. 03:19

1. 아파치 스파크(Apache Spark)란?




- 빅데이터 처리를 위한 오픈소스 병렬 분산 처리 플랫폼

- 인메모리 기반의 대용량 데이터 고속 처리 엔진

- 범용 분산 클러스터 컴퓨팅 프레임워크

- 빅데이터에 관심있는 여러 개발자와 데이터 과학자에게 표준 도구가 되어가는 중





2. 스파크의 특징


A. 인메모리 기반의 빠른 처리


  맵리듀스를 활용한 데이터 처리 과정의 경우에는 중간 결과도 저장소에 보관하므로 데이터 크기가 커져도 문제없이 작동하며, 복구도 비교적 쉬우나, 특정 데이터의 부분 집합에 대해 반복해서 쿼리를 발생하는 등의 연속해 이루어지는 데이터의 분석 처리 시 디스크와 네트워크 I/O 발생으로 작업 속도에 제약이 있습니다.

 반면 스파크의 경우에는 연속으로 이루어지는 처리 전체를 검토한 뒤에 그에 맞는 최적화 처리를 끼워넣는 방식으로 설계 되었습니다. 인메모리 기반의 처리가 이루어지기 때문에 맵리듀스 작업처리에 비해 디스크는 10배, 메모리 작업은 100배 빠른 속도를 가집니다.



B. 다양한 언어 지원


 Java, Scala, Python, R 인터페이스 등 다양한 언어를 지원하기 때문에 개발자에게 작업의 편의성을 제공합니다. 스파크가 Scala로 작성되었기 때문에 Scala 기반 API가 가장 높은 성능을 제공합니다.



C. 다양한 파일 포맷 지원 및 Hbase, Hive 등과 연동 가능


 또한 스파크는 TXT, Json, ORC(Optimized Row Columnar), Parquet 등의 다양한 파일 포맷을 지원합니다. 스파크 자체로 영구 저장소 역할을 수행하지는 않기 때문에 S3, HDFS 등의 파일 시스템 및 HBase, Hive 등의 분산 데이터베이스 구조들과도 연동이 가능합니다.




3. 스파크의 컴포넌트 구성



- Spark Core

 스케줄링, 메모리 관리, 장애 복구와 같은 기본적인 기능과 RDD, DataFrame, DataSet을 이용한 스파크 연산 처리를 담당합니다.


- Spark SQL

 RDD, DataSet, DataFrame 작업을 생성하고 처리하며, 하이브 메타스토어와 연결하여 하이브의 메타 정보를 이용하여 SQL 작업을 처리할 수 있습니다.


- Spark Streaming

 실시간 데이터 스트림을 처리하는 컴포넌트입니다.


- MLlib

 분류(classification), 회귀(regression), 클러스터링(clustering), 협업 필터링(collaborative filtering) 및 모델 평가 등이 가능한 머신 러닝 라이브러리 입니다.


- GraphX

페이지 랭크와 같은 분산형 그래프 프로세싱을 지원하는 컴포넌트입니다.




4. 스파크의 기본 구조



 스파크 애플리케이션은 마스터-슬레이브 구조로 실행됩니다. 사용자가 클러스터 매니저에 스파크 애플리케이션을 제출하고, 클러스터 매니저로부터 받은 자원을 이용하여 작업을 처리합니다. 이때, 드라이버와 익스큐터는 단순한 프로세스이므로 같은 머신 또는 다른 머신에서 실행이 가능합니다.


- 드라이버 프로세스 : Master


 스파크 응용을 위한 SparkSession을 관리하는 JVM 프로세스로 DAG(Directed Acyclic Graph) 기반 태스크 스케줄링을 수행합니다. 사용자 프로그램을 태스크라고 불리는 실제 수행 단위로 변환하고, 익스큐터 프로세스의 작업과 관련된 분석 및 관리를 담당합니다.



- 익스큐터(executor) : Slave


 마스터인 드라이버 프로세스가 할당한 작업을 수행 및 결과를 반환하며, YARN의 컨테이너와 유사합니다.




5. 스파크 API



스파크 API는 데이터를 다루기 위한 저수준의 비 구조적 API인 RDD와 최적화를 자동으로 수행하는 고수준의 구조적 API로 나눌 수 있습니다.


- 데이터 모델 API


RDD 

인메모리 데이터 처리를 통하여 처리속도를 높인 데이터 모델입니다. 최적화가 어렵고, 데이터의 형태(스키마)를 표현할 수 없습니다.


DataFrame(Spark 1.3에서 추가)

데이터를 스키마 형태로 추상화 하여 테이블처럼 다룰 수 있으며, 카탈리스트 옵티마이저가 쿼리를 효율화 하여 처리합니다. 파이썬 pandas의 dataframe이나 매트랩의 배열과 유사합니다.


DataSet(Spark 1.6에서 추가)

스파크 2.0부터 스파크 SQL의 메인 API로 지정되었으며, 데이터의 타입체크, 데이터 직렬화를 위한 인코더, 카탈리스트 옵티마이저를 지원하여 데이터 처리 속도를 더욱 증가시켰습니다.

'프로그래밍 > 데이터베이스' 카테고리의 다른 글

[SQL] SQL 구조와 문법  (0) 2021.08.11