Spark 개요
Apache Spark란?

Apache Spark
아파치 스파크는 통합 컴퓨팅 엔진이며 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합입니다. 스파크는 병렬 처리 오픈소스 엔진으로 네 가지 언어(python, java, scala, R)를 지원하며 SQL, 스트리밍, 머신러닝 등 넓은 범위의 라이브러리를 제공합니다. 단일 노트북 환경부터 수천 대의 서버로 구성된 클러스터까지 다양한 환경에서 실행할 수 있기 때문에 빅데이터 처리에 적합한 기술입니다.

아파치 스파크의 철학
통합 (Unified)
스파크의 핵심 목표는 빅데이터 애플리케이션 개발에 필요한 통합 플랫폼을 제공하는 것입니다. 데이터에서부터 SQL 처리, 머신러닝, 스트리밍 처리에 이르기까지 다양한 데이터분석 작업을 같은 연산 엔진과 일관성 있는 API로 수행할 수 있도록 설계되었습니다. 스파크의 등장 이전에는 통합 엔진을 제공하는 병렬 데이터 처리용 오픈소스가 없었기에, 사용자가 다양한 API와 시스템을 직접 조합해서 애플리케이션을 작성해야 했습니다.
컴퓨팅 엔진
스파크의 기능은 통합이라는 관점 하에 저장소 시스템의 데이터를 연산하는 역할만 수행하는 컴퓨팅 엔진에 국한되어 있습니다. 일정 규모 이상의 연산 클러스터는 네트워크 포화 현상이 발생하는 등 네트워크 자원에 많은 영향을 받기 때문에 데이터 이동을 통한 내부 데이터 저장 방식을 사용하지 않도록 설계한 것이죠.
스파크는 내부의 영구 저장소 대신 클라우드 기반 Azure Storage, Amazon S3, 분산 파일 시스템 Apache Hadoop, 키/값 저장소인 Apache Cassandra, 메시지 전달 서비스인 Apache Kafka 등의 저장소를 지원합니다. 또한, 사용자 API를 통해 서로 다른 저장소 시스템을 유사하게 볼 수 있도록 하여 애플리케이션은 데이터 저장 위치를 고려하지 않아도 되도록 설계되었습니다.
Apache Hadoop은 범용 클러스터 환경에서 저비용 저장 장치를 사용하도록 설계된 HDFS(하둡 파일 시스템)와 MapReduce(컴퓨팅 시스템)를 가지고 있고, 하나의 시스템을 단독으로 사용하기 어렵습니다. 이에 반하여 스파크는 하둡 저장소와 호환되며, 공개형 클라우드 환경이나 스트리밍 애플리케이션 환경 등 하둡 아키텍처를 사용할 수 없는 경우에도 많이 사용된다는 특징을 가집니다.
라이브러리
스파크 컴포넌트는 데이터 분석 작업에 필요한 통합 API를 제공하는 통합 엔진 기반의 자체 라이브러리입니다. 엔진에서 제공하는 표준 라이브러리와 오픈소스 커뮤니티에서 서드파티 패키지 형태로 제공하는 다양한 외부 라이브러리로 구성되어 있습니다. 대표적으로 Sprak SQL, MLlib, Spark Streaming, GraphX가 있으며, 저장소 시스템을 위한 connector, ML Algorithm과 같은 외부 오픈소스 라이브러리도 존재합니다. (https://spark-packages.org/)
스파크의 등장 배경
역사적으로 컴퓨터 성능 향상은 프로세서의 성능 향상과 함께 가속화되었습니다. 대규모 애플리케이션은 이러한 하드웨어 특성에 맞춰 제작되었고, 대부분의 시스템은 단일 프로세서에서만 실행되도록 설계되었습니다. 그러나 2005년경, 물리적 한계로 인해 이러한 방식의 하드웨어 성능 향상이 중단되었고, 컴퓨터 성능 향상은 병렬 CPU 코어를 추가하는 방향으로 선회했습니다. 애플리케이션의 성능 향상을 위해 병렬 처리가 도입되기 시작한 것이죠.

측정 기술이 발전함에 따라 사람들은 대량의 데이터를 저렴하게 저장하고, 센서, 카메라, 공개 데이터 등을 통해 더욱 정밀한 데이터를 저렴한 비용으로 수집할 수 있게 되었습니다. 데이터의 저장과 수집 비용은 저렴해지고 있는 동시에, 데이터의 양은 클러스터에서 처리해야 할 만큼 거대해졌습니다. 그리고 대규모 데이터를 다룰 새로운 프로그래밍 모델로 아파치 스파크가 탄생했습니다.
스파크의 탄생과 발전
2009년 당시 Hadoop MapReduce는 수천개의 노드로 구성된 클러스터에서 병렬로 데이터를 처리하는 최초의 오픈소스 시스템이자 클러스터 환경용 병렬 프로그래밍 엔진의 대표주자였습니다. 그런데 하둡의 컴퓨팅 시스템인 MapReduce를 사용하여 데이터를 10-20회 처리하는 전통적인 머신러닝 알고리즘을 수행하기 위해서는 매번 클러스터 단위의 잡에서 데이터를 처음부터 반복하여 읽어야했습니다. 한계를 개선하기 위해 스파크 팀은 여러 단계로 이루어진 애플리케이션을 간결하게 개발할 수 있는 함수형 프로그래밍 기반의 API를 설계하였습니다. 그리고 연산 단계 사이에서 메모리에 저장된 데이터를 효율적으로 공유할 수 있는 새로운 엔진 기반의 API를 구현했습니다. 이렇게 스파크 팀에서 제작한 뛰어난 호환성을 가진 API로 인해 스파크는 여러 처리 유형을 결합한 빅데이터 애플리케이션으로 자리매김하게 되었습니다. 스파크 초기 버전은 함수형 연산 관점 API를 정의했고, 스파크 1.0부터는 구조화된 데이터를 기반으로 동작하는 신규 API인 Spark SQL이 추가되었습니다. 이후, DataFrame, 머신러닝 파이프라인, 자동 최적화를 수행하는 구조적 스트리밍 등 구조체 기반의 신규 API가 추가되었습니다.
Last updated