string(27) "/blog/?uid=200&mod=document"

HOME

ABOUT US

Blog

Blog

Blog

[Ark Article] 스파크(Spark)란 무엇인가?

2021.10.25

 

스파크 정의

20211025142522_gsac9nq.jpg

아파치 스파크(Apache Spark)는 인메모리 기반의 대용량 데이터 고속 처리 엔진으로 범용 분산 오픈 소스 클러스터 컴퓨팅 프레임워크입니다.  암시적(Implicit Mode) 데이터 병렬성과 장애 허용과 더불어 완전한 클러스터를 프로그래밍하기 위한 인터페이스를 제공합니다.

또한 SQL, 스트리밍, 머신러닝 및 그래프 처리를 위한 기본 제공 모듈이 있는 대규모 데이터 처리용 통합 분석 엔진이며, 클라우드의 Apache Hadoop, Apache Mesos, Kubernetes에서 자체적으로 실행될 수 있고 다양한 데이터 소스에 대해 실행될 수 있습니다.

<참고> 암시적 모드(Implicit Mode)

암시적 컴퓨팅은 사용자에게 대부분의 상세한 설정을 숨긴다. 하드웨어 리소스를 어떻게 할당하는지, 작업량을 어떻게 분산하는지, 또 결과는 어떻게 수집되는지에 대하여 알 필요가 없습니다. 켬퓨팅은 현재 하드웨어 리소스에 따라 자동으로 시작됩니다.


스파크 특징

20211025142522_i4discc.jpg

1.     Speed

         - 인메모리(In-Memory) 기반의 빠른 처리

2.     Ease of Use

        - 다양한 언어 지원(Java, Scala, Python, R, SQL)을 통한 사용의 편이성

3.     Generality

        -  SQL, Streaming, 머신러닝, 그래프 연산 등 다양한 컴포넌트 제공

4.     Run Everywhere

        -  YARN, Mesos, Kubernetes 등 다양한 클러스터에서 동작 가능

        - HDFS, Casandra, HBase 등 다양한 파일 포맷 지원


주요 구성요소

20211025142522_g4by6i4.jpg

1.     Spark Core

-   범용 분산 데이터 처리 엔진이며 그 위에 SQL, 스트림 처리, 머신러닝, 그래프 계산을 위한 라이브러리가 있으며 애플리케이션에서 함께 사용할 수 있습니다.

-   전체 프로젝트의 기반으로서 분산된 작업 디스패치, 예약, 기본 I/O 기능을 제공합니다.

2.     Spark SQL

-   구조화된 데이터를 사용하는 작업을 위한 Spark 모듈이며 다양한 데이터 소스에 액세스하는 일반적인 방법을 지원합니다.

-   SQL이나 친숙한 DataFrame API를 사용하여 Spark 프로그램 내의 구조화된 데이터를 쿼리할 수 있습니다.

-   HiveQL 구문을 지원하며 기존 Apache Hive 웨어하우스에 대한 액세스를 허용합니다.

-   서버 모드에서는 자바 데이터베이스 연결 또는 개방형 데이터베이스 연결을 통해 표준 연결을 제공합니다.

3.     Spark Streaming

-   확장 가능하고 내결함성 있는 스트리밍 솔루션을 쉽게 빌드할 수 있게 해줍니다. 또한 스트림 처리에 Spark 언어 통합 API를 활용하므로 일괄 작업과 동일한 방식으로 스트리밍 작업을 작성할 수 있습니다.

-   자바, Scala, Python을 지원하며 즉시 사용 가능한 스테이트풀(Stateful), Exactly-Once(정확히 1회만 실행) 시맨틱스를 갖추고 있습니다.

4.     MLlib

-   실용적인 ML을 확장 가능하고 쉽게 만드는 도구를 갖춘 Spark 확장형 머신러닝 라이브러리입니다.

-   분류, 회귀분석, 추천 및 클러스터링 등 일반적인 학습 알고리즘이 많이 포함되어 있습니다. 또한 기능 변환, ML 파이프라인 구성, 모델 평가, 분산 선형 대수, 통계를 포함한 워크플로와 기타 유틸리티도 포함되어 있습니다.

5.     GraphX

-   그래프와 그래프 병렬 계산을 위한 Spark API로서 유연성이 뛰어나며 그래프와 컬렉션 모두에서 원활하게 작동합니다. 또한 추출/변환/로드와 탐색 분석, 그리고 반복적 그래프 계산이 한 시스템 내에 통합되어 있습니다.

-   매우 유연한 API 외에도 다양한 그래프 알고리즘이 포함되어 있습니다. 성능 면에서는 가장 빠른 그래프 시스템과 필적하는 동시에 Spark의 유연성, 내결함성, 사용 편의성도 유지합니다.


스파크의 장단점

20211025142522_tzz7ie8.jpg

장점:

 

1. 속도

     -  Hadoop 맵리듀스보다 100배 빠른 속도로 워크로드를 실행할 수 있습니다.

     -  최첨단 DAG(Directed Acyclic Graph) 스케줄러, 쿼리 최적화 도구, 물리적 실행 엔진을 사용하여 일괄 처리 데이터와 스트리밍 데   이터 모두에 대해 고성능을 달성합니다.

2.  사용 편의성

     -   병렬 앱을 쉽게 빌드할 수 있게 해주는 80개가 넘는 상위 수준 연산자를 제공합니다.

     -   Scala, Python, R, SQL 셸에서 대화형으로 Spark를 사용하여 애플리케이션을 빠르게 작성할 수 있습니다.

3. 보편성

     -    SQL, DataFrame, 머신러닝용 MLlib, GraphX, Spark Streaming을 비롯한 다양한 라이브러리를 지원하며 동일한 애플리케이션에  서 원활하게 결합할 수 있습니다.

4. 오픈소스 프레임워크 혁신

     -   독점적 솔루션을 사용하여 작업하는 내부 팀보다 더욱 빠르고 효과적으로 새로운 개념과 기능을 도입하기 위해 통합된 글로벌 커뮤니티의 지원을 받습니다.

    -   오픈소스 커뮤니티의 집단적 힘은 더 많은 아이디어와 더 빠른 개발은 물론이고 문제 발생 시 문제 해결도 지원하므로 TTM(time to market)이 단축됩니다.


단점:


1. 금액

 

- 메모리를 사용하기 때문에 상대적으로 비쌉니다. 데이터를 모두 메모리에서 처리하기 때문에 충분한 클러스터 메모리가 필요합니다.

2. 스트리밍 지원

- 엄밀한 의미에서의 스트리밍을 지원하지 않습니다. 스파크에도 Spark Streaming 이라는게 있어서 스트리밍 데이터 처리를 지원하지만 spark streaming은 micro batch로 구현됩니다.  즉 배치작업을 작게 하는 방식으로 스트리밍 처리를 구현하고 초단위의 분석을 요구하는 워크로드에는 다른 솔루션(flink 등)이 필요합니다.


기업에서 Spark를 사용하는 방식

▶  구조화 또는 구조화되지 않은 대량의 실시간 또는 아카이브 데이터를 처리 및 분석하는 까다롭고 계산 집약적인 태스크를 간소화하고 있습니다.

▶    머신러닝 및 그래프 알고리즘 등의 복잡한 관련 기능을 원활하게 통합할 수 있습니다.

▶    데이터 엔지니어는 더 많은 언어로 프로그래밍할 수 있는 옵션을 갖춘 Spark를 사용하여 데이터 처리 작업을 코딩하고 빌드합니다.

    데이터 과학자는 GPU와 함께 Spark를 사용하여 보다 뛰어난 분석 및 ML 환경을 이용할 수 있습니다. 익숙한 언어로 더 많은 양의 데이터를 더 빠르게 처리할 수 있으므로 혁신을 앞당길 수 있습니다.