BigData/Spark

Apache Spark란?

Jonghee Jeon 2020. 4. 4. 16:23

아파치 스파크(Apache Spark)는 아래 공식 홈페이지에 소개된 것처럼 대용량 데이터를 처리하기 위한 통합 분산 엔진이다.

 

기존 하둡(Hadoop)이라는 플랫폼을 대체 했다기 보다는 완벽히 조화를 이루었다고 보는게 맞을거 같다. 

아파치 스파크는 2009년 U.C. 버클리의 AMP랩(AMPLab)에서 시작되었으며, 지금은 빅데이터 분야에서 가장 중요한 빅데이터 분산 처리 프레임워크이다. 

 

https://www.taygan.co/blog/2018/09/04/getting-started-with-apache-spark

또한, 아파치 스파크는 다양한 데이터 소스, 개발환경, 작업등을 통합 분석 할 수 있는 엔진으로 개발되고 발전하고 있으며, 최근에는 딥러닝(Deeplearning)과 파이썬(Python)의 Pandas패키지등 인공지능과 데이터분석에도 적극적으로 지원하고 있다.

기존 Disk 기반으로 처리되는 MapReduce의 처리 한계를 극복하고자 연구하여 개발되었으며, 자바(Java) / 스칼라(Scala) / 파이썬(Python) / R 프로그래밍 언어를 지원하고 SQL과 스트리밍 데이터, 머신러닝, 그래프 프로세싱을 지원한다.

아파치 스파크의 구성 요소는 크게 드라이버(Driver)와 익스큐터(executor)로 구성되어 있다. 드라이버는 사용자의 스파크 어플리케이션을 여러 노드로 분산하여 처리 할 수 있게 변환하고, 익스큐터는 그 작업을 노드에서 실행한다.

이 둘을 관리하고 자원을 분배하기 위해 클러스터 관리자도 필요하다. 기본적으로 스파크 스탠드얼론을 실행 할 수 있으며, 보통 하둡 얀(Yarn)과 아파치 메소스(Mesos) 등이 있다.

 

스파크 구성요소

RDD(Resilient Distributed Dataset) - 탄력적 분산 데이터 집합이라 불리며, 스파크의 가장 중요한 핵심 요소이면서 스파크 클러스터 전역에 분산되고 변경되지 않는 불변성의 객체를 말한다.

현재는 RDD를 직접 사용하여 개발하기 보다는 DataFrame 형태의 구조적인 데이터 처리 형태를 가장 많이 사용하고 있다.

Spark SQL - 처음에는 샤크(Shark)라는 네임으로 개발되었다가 Spark SQL로 명명되었고, R과 파이썬의 판다스(Pandas)에서 사용되는 데이터프레임 구조를 처리 할 수 있는 구조적 데이터 처리에 중점을 두고 있다.

 

Spark Streaming - 스파크 스트리밍은 스트림 데이터를 연속적인 마이크로배치 형태로 쪼개어 처리하는 방식으로 사용한다. 현재는 구조적 스트리밍(Structured Streaming)이 갖는 더 높은 수준의 API는 개발자가 무한 스트리밍 데이터프레임을 만들 수 있게 사용 할 수 있고 현재 스파크 스트리밍의 미래이기 때문에 사용을 권장한다.

 

Spark Mllib - Spark에서 지원하는 머신러닝 라이브러리이며, Spark MLlib과 Spark ML의 차이점은 MLlib은 RDD기반으로 낮은 수준의 스파크 머신러닝 환경이고, Spark ML은 구조적 방식(DataFrame)으로 높은 수준의 스파크 머신러닝 환경이다. 일반적인 데이터 분석이 익숙하다면 Spark ML을 권장한다.

 

Spark Deeplearning - 사실 스파크에서는 딥러닝 자체는 지원하고 있지 않으며, BigDL, H2O, Spark Deeplearning이라는 라이브러리 등과 함께 사용하여야 하며 현재 Databricks에서 개발되고 있는 Spark Deeplearning은 딥러닝 파이프라인과 Transfer Learning을 통해 딥러닝을 지원하고 사용 할 수 있다.

 

https://github.com/databricks/spark-deep-learning

 

databricks/spark-deep-learning

Deep Learning Pipelines for Apache Spark. Contribute to databricks/spark-deep-learning development by creating an account on GitHub.

github.com