Apache Spark
Apache Spark는 머신 러닝 및 AI 애플리케이션을 위한 초고속 오픈 소스 데이터 처리 엔진으로, 빅데이터 분야에서 가장 큰 오픈 소스 커뮤니티의 지원을 받습니다.
검은색과 파란색의 추상 이미지
Apache Spark란?

Apache Spark는 머신 러닝 및 AI 애플리케이션을 위한 초고속 오픈 소스 데이터 처리 엔진으로, 빅데이터 분야에서 가장 큰 오픈 소스 커뮤니티의 지원을 받습니다.

Apache Spark(Spark)는 대규모 데이터 세트를 위한 오픈 소스 데이터 처리 엔진입니다. 특히 스트리밍 데이터, 그래프 데이터, 머신 러닝, 인공 지능(AI) 애플리케이션을 위한 빅데이터에 필요한 컴퓨팅 속도, 확장성 및 프로그래밍 기능을 제공하도록 설계되었습니다.

Spark의 분석 엔진은 다른 엔진보다 10~100배 더 빠르게 데이터를 처리합니다. 기본 제공된 병렬 처리 및 내결함성을 바탕으로 처리 작업을 대규모 컴퓨터 클러스터에 분산시켜 확장할 수 있습니다. 여기에는 Scala, Java, Python, R을 포함하여 데이터 분석가와 데이터 사이언티스트 사이에서 인기 있는 프로그래밍 언어용 API도 포함됩니다.

Spark는 Apache Hadoop, 특히 Hadoop의 기본 데이터 처리 구성요소인 MapReduce와 비교되는 경우가 많습니다. Spark와 MapReduce의 가장 큰 차이점은, Spark는 후속 단계를 위한 데이터를 처리하고 디스크에 쓰거나 디스크에서 읽는 대신 메모리에 보관하므로 처리 속도가 훨씬 빠르다는 것입니다. (이 문서의 다른 부분에서 Spark가 Hadoop과 어떻게 비교되고 Hadoop을 어떻게 보완하는지 자세히 알아볼 수 있습니다.)

Spark는 2009년 UC Berkeley에서 개발되었습니다. 현재는 Apache Software Foundation에서 유지 관리하고 있으며 1,000명이 넘는 기여자를 보유한 빅데이터 분야에서 가장 큰 오픈 소스 커뮤니티를 자랑합니다. 또한 여러 상용 빅데이터 오퍼링의 핵심 구성요소로도 포함되어 있습니다.

최고의 데이터 레이크를 구축한다는 것은 적합한 오브젝트 스토리지를 선택한다는 의미이며, Apache Spark가 상당히 도움이 될 수 있는 영역입니다.

eBook읽기(909KB)

Apache Spark 작동 방식

Apache Spark에는 계층적 마스터/슬레이브 아키텍처가 있습니다. Spark 드라이버는 작업자(슬레이브) 노드를 관리하고 데이터 결과를 애플리케이션 클라이언트에 전달하는, 클러스터 관리자를 제어하는 마스터 노드입니다.

Spark 드라이버는 애플리케이션 코드를 기반으로 클러스터 관리자(Spark의 독립형 클러스터 관리자 또는 Hadoop YARN, Kubernetes, Mesos와 같은 다른 클러스터 관리자)와 연동하는 SparkContext를 생성하여 노드 전체에서 실행하고 이를 모니터링합니다. 또한 Spark의 놀라운 처리 속도의 핵심인 탄력적 분산 데이터 세트(RDD)를 생성합니다.

탄력적 분산 데이터 세트(RDD)

 

탄력적 분산 데이터 세트(RDD)는 클러스터의 여러 노드에 분산되어 병렬로 처리할 수 있는 내결함성 요소의 모음입니다. RDD는 Apache Spark의 기본 구조입니다.

Spark는 데이터 소스를 참조하거나 SparkContext 병렬 처리 메소드로 기존의 콜렉션을 처리할 RDD로 병렬 처리함으로써 데이터를 로드합니다. 데이터가 RDD에 로드되면 Spark는 메모리의 RDD에서 변환 및 작업을 수행하는데, 이것이 바로 Spark 속도의 핵심입니다. 또한 Spark는 시스템의 메모리가 부족하거나 사용자가 영구 보관을 위해 데이터를 디스크에 쓰기로 결정하는 경우를 제외하고 데이터를 메모리에 저장합니다.

RDD의 각 데이터 세트는 클러스터의 서로 다른 노드에서 계산되는 논리적 파티션으로 나뉩니다. 또한 사용자는 두 가지 유형의 연산, 즉 변환과 작업을 수행할 수 있습니다변환은 새로운 RDD를 생성하는 데 적용되는 연산입니다작업은 Apache Spark가 계산을 적용하고 결과를 드라이버에 다시 전달하도록 지시하는 데 사용됩니다.

Spark는 RDD의 다양한 작업과 변환을 지원합니다. 이 분산은 Spark에서 수행되므로 사용자는 올바른 분산 컴퓨팅에 대해 걱정할 필요가 없습니다.

방향성 비순환 그래프(DAG)

 

MapReduce의 2단계 실행 프로세스와 달리 Spark는 방향성 비순환 그래프(DAG)를 생성하여 태스크, 그리고 클러스터 전반의 작업자 노드에 대한 오케스트레이션을 예약합니다. Spark가 태스크 실행 프로세스에서 데이터를 사용하고 변환할 때 DAG 스케줄러는 클러스터 전반의 작업자 노드를 오케스트레이션하여 효율성을 높입니다. 이 태스크 추적은 기록된 연산을 이전 상태의 데이터에 다시 적용하는 방식으로 내결함성을 실현합니다.

DataFrame 및 데이터 세트

 

RDD 외에도, Spark는 DataFrame 및 데이터 세트라는 두 가지 다른 데이터 유형을 처리합니다.

DataFrame은 가장 일반적인 구조화된 애플리케이션 프로그래밍 인터페이스(API)이며 행과 열이 있는 데이터 테이블을 나타냅니다. 한때 RDD는 Spark의 핵심 기능이었지만 현재는 유지보수 모드에 있습니다. Spark의 머신 러닝 라이브러리(MLlib)의 인기로 인해 DataFrame은 MLlib의 기본 API로서 주도권을 잡았습니다. MLlib API를 사용할 때 이러한 사실에 주목해야 하는 이유는 DataFrame이 Scala, Java, Python, R 등의 다양한 언어에 균일성을 제공하기 때문입니다.

데이터 세트는 DataFrame을 확장한 것으로, 안전한 형식의 오브젝트 지향 프로그래밍 인터페이스를 제공합니다. 데이터 세트는 기본적으로 DataFrame과 달리 강력하게 유형화된 JVM 오브젝트의 모음입니다.

Spark SQL을 사용하면 DataFrame와 SQL 데이터 저장소(예: Apache Hive)에서 데이터를 쿼리할 수 있습니다. Spark SQL 쿼리는 다른 언어에서 실행될 때 DataFrame 또는 데이터 세트를 반환합니다.

Spark Core

 

Spark Core는 모든 병렬 데이터 처리의 기반으로, 스케줄링, 최적화, RDD 및 데이터 추상화를 처리합니다. Spark Core는 Spark 라이브러리, Spark SQL, Spark Streaming, MLlib 머신 러닝 라이브러리 및 GraphX 그래프 데이터 처리를 위한 기능적 기반을 제공합니다. Spark Core와 클러스터 관리자는 Spark 클러스터 전반에 데이터를 분산하고 추상화합니다. 이러한 분산 및 추상화 덕분에 빅데이터를 매우 빠르고 사용자 친화적으로 처리할 수 있습니다.

Spark API

 

Spark에는 다양한 애플리케이션 프로그래밍 인터페이스(API)가 포함되어 있어 Spark의 강력한 기능을 광범위한 사용자에게 제공할 수 있습니다. Spark SQL은 관계형 방식으로 RDD 데이터와의 상호작용을 허용합니다. Spark에는 Scala, Java, Python, R용으로 제대로 문서화된 API도 있습니다. Spark의 각 언어별 API는 데이터를 처리하는 방식에 미묘한 차이가 있습니다. RDD, DataFrame 및 데이터 세트는 각 언어 API에서 사용할 수 있습니다. 이처럼 다양한 언어에 대한 API를 통해 Spark는 개발, 데이터 사이언스 및 통계에 대한 배경 지식을 가진 보다 다양한 그룹의 사람들이 빅데이터를 처리할 수 있도록 합니다.

주요 제품

Analytics Engine

Apache Spark 및 머신 러닝

Spark에는 머신 러닝, 인공 지능(AI) 및 스트림 처리 기능을 확장하는 다양한 라이브러리가 있습니다.

Apache Spark MLlib

 

Apache Spark의 중요한 기능 중 하나는 Spark MLlib에서 사용할 수 있는 머신 러닝 기능입니다. Apache Spark MLlib는 분류 및 회귀, 협업 필터링, 클러스터링, 분산 선형 대수, 결정 트리, 랜덤 포레스트, 그래디언트 부스티드 트리, 빈발 패턴 마이닝, 평가 메트릭 및 통계에 즉시 사용 가능한 솔루션을 제공합니다. Spark가 처리할 수 있는 다양한 데이터 유형과 결합된 MLlib의 기능 덕분에 Apache Spark는 빅데이터에 필수적인 도구가 되었습니다.

Spark GraphX

 

API 기능 외에도 Spark에는 그래프 문제를 해결하도록 설계되어 새롭게 추가된 Spark GraphX가 있습니다. GraphX는 그래프 및 그래프 병렬 컴퓨팅을 위해 RDD를 확장하는 그래프 추상화입니다. Spark GraphX는 상호 연결 정보 또는 소셜 네트워크와 같이 얽혀 있는 연결 정보를 저장하는 그래프 데이터베이스와 통합됩니다.

Spark Streaming

 

Spark Streaming은 라이브 데이터 스트림의 확장 가능한 내결함성 처리를 지원하는 핵심 Spark API를 확장한 것입니다. Spark Streaming은 데이터를 처리할 때 Spark의 머신 러닝 및 그래프 처리 알고리즘을 사용하여 실시간 스트리밍 분석을 위한 파일 시스템, 데이터베이스 및 라이브 대시보드에 데이터를 제공합니다. Spark SQL 엔진을 기반으로 구축된 Spark Streaming은 스트리밍 데이터를 더 빠르게 처리하는 증분 배치 처리도 허용합니다.

관련 링크

하둡

빅데이터 분석

Spark와 Apache Hadoop 및 MapReduce

"Spark와 Hadoop"은 웹에서 자주 검색되는 용어이지만, 위에서 언급했듯이 Spark는 Hadoop, 구체적으로는 Hadoop의 기본 데이터 처리 구성요소인 MapReduce의 기능을 개선한 것에 가깝습니다. 실제로 Spark는 MapReduce 프레임워크를 기반으로 구축되었으며, 현재 대부분의 Hadoop 배포에는 Spark가 포함되어 있습니다.

Spark와 마찬가지로, MapReduce를 통해 프로그래머는 대규모 컴퓨팅 클러스터에서 데이터 세트의 일부를 병렬로 처리하여 대규모 데이터 세트를 처리하는 애플리케이션을 개발할 수 있습니다. 그러나 MapReduce가 디스크에서 데이터를 처리하여 읽기 및 쓰기 시간을 추가하면 처리 속도가 저하되는 반면, Spark는 메모리에서 계산을 수행하므로 처리 속도가 훨씬 더 빠릅니다. 결과적으로 Spark는 MapReduce보다 최대 100배 더 빠르게 데이터를 처리할 수 있습니다. 

Spark에서 기본 제공하는 여러 언어의 API는 프로그래밍하기 어렵다는 평판을 얻은 MapReduce보다 더 실용적이므로 개발자가 접근하기 쉽습니다. MapRedue와 달리, Spark는 Hadoop의 리소스 관리 및 작업 스케줄링 프레임워크인 YARN을 사용하여 Hadoop 클러스터에서 스트림 처리 애플리케이션을 실행할 수 있습니다. 위에서 언급했듯이 Spark는 MLlib, GraphX 및 SparkSQL의 기능을 추가합니다. 그리고 Spark는 Apache Kafka를 포함하여 Hadoop 애플리케이션 외부의 다른 데이터 소스에서 데이터를 처리할 수 있습니다.

이외에도 Spark는 Hadoop과 호환되며 Hadoop을 보완합니다. 또한 HDFS(Hadoop 분산 파일 시스템), HBas(HDFS에서 실행되는 비관계형 데이터베이스), Apache Cassandra(HDFS의 NoSQL 대안), Hive(Hadoop 기반 데이터 웨어하우스)의 데이터를 포함한 Hadoop 데이터를 처리할 수 있습니다.

관련 솔루션
AIOps

IT 운영을 더욱 효율적이고 효과적으로 수행하기 위해 분석, 인공지능, 기타 기술을 활용하는 영역인 AIOps에 대해 알아보세요.

AIOps 살펴보기
IBM Spectrum Conductor

온프레미스와 클라우드 모두에서 멀티테넌트 엔터프라이즈 환경을 위한 IBM Spectrum Conductor 및 기타 서비스를 자신 있게 배치할 수 있습니다.

IBM Spectrum Conductor 살펴보기
IBM Analytics Engine

Analytics Engine은 분석 애플리케이션 작성에 사용되는 Apache Spark와 Apache Hadoop이 결합된 서비스입니다.

IBM Analytics Engine 살펴보기
다음 단계

Spark는 빅데이터 분석을 지원하기 위해 엔터프라이즈 데이터 솔루션에 추가할 수 있는 강력한 툴이며, 기존 IBM 빅데이터 솔루션과도 잘 결합됩니다.
 IBM Spectrum Conductor는 리소스의 공통 공유 클러스터에 Apache Spark 및 기타 애플리케이션 프레임워크를 배포하고 관리하기 위한 멀티테넌트 플랫폼입니다. Spectrum Conductor는 워크로드 관리, 모니터링, 경보, 보고 및 진단 기능을 제공하며 현재 및 다른 여러 버전의 Spark와 기타 프레임워크를 동시에 실행할 수 있습니다. 사용자는 통합 Spark 배포를 통해 Apache Spark를 쉽게 배포하고 유지 관리할 수 있습니다.


지금 IBM Spectrum Conductor 살펴보기