검수요청.png검수요청.png

아파치 스파크

해시넷
이동: 둘러보기, 검색
아파치 스파크(Spark)
아파치 스파크(Spark)

아파치 스파크(Apache Spark)는 빅데이터 처리를 위한 오픈소스 병렬분산처리 플랫폼이다. 간략히 스파크(Spark)라고 한다. 영어로 "spark"는 불꽃이 튀기는 것을 말하는데, 대용량 데이터를 마치 불꽃이 튀기는 것처럼 순식간에 처리한다는 것을 강조하기 위해 붙인 이름이다. 스파크는 디스크에 저장되어 있는 데이터메모리로 읽어와서 처리하기 때문에 디스크 기반으로 작동하는 하둡(Hadoop)에 비해 데이터 처리 속도가 최소 10배에서 100배 정도 빠르다. 대용량 데이터를 분산 처리하기 위해 여러 개의 메모리를 묶어서 마치 하나의 메모리인 것처럼 사용할 수 있다. 머신러닝을 위한 빅데이터 처리에 주로 사용된다. SK㈜ C&C는 한국의 '스파크 사용자 모임'을 후원하고 있다.

역사[편집]

구조[편집]

스파크의 메모리 구조[편집]

예약된 메모리(Reserved Memory)[편집]

  • 300MB
  • Excutor 실행을 위한 메모리

사용자 메모리(User Memory)[편집]

  • (Java Heap-300MB)X0.4
  • 아파치 스파크의 유저 자료구조와 메타데이터를 저장
  • 비정상적으로 큰 레코드의 크기 측정

스파크 메모리(Spark Memory)[편집]

  • Execution Memory : Spark Memory X 0.5
  1. 자바의 객체를 저장
  2. 실행에 필요한 데이터들을 저장
  • Storage Memory : Spark Memory X 0.5
  1. Persistence가 된 RDD를 저장[1]

스파크 구조[편집]

Spark Core[편집]

  • 스파크 잡과 다른 스파크 컴포넌트에 필요한 기본 기능을 제공
  • 특히 분산 데이터 컬렉션(데이터셋)을 추상화한 객체인 RDD(Resilent Distributed Dataset)로 다양한 연산 및 변환 메소드를 제공
  • RDD 는 노드에 장애가 발생해도 데이터셋을 재구성할 수 있는 복원성
  • 스파크 코어는 HDFS, GlusterFS, 아마존 S3 등 다양한 파일 시스템에 접근
  • 공유 변수(broadcast variable)와 누적 변수(accumulator)를 사용해 컴퓨팅 노드 간 정보 공유
  • 스파크 코어에는 네트워킹, 보안, 스케쥴링 및 데이터 셔플링(shuffling) 등 기본 기능을 제공

Spark SQL[편집]

  • 스파크와 하이브 SQL 이 지원하는 SQL 을 사용해 대규모 분산 정형 데이터를 다룰 수 있다.
  • JSON 파일, Parquet 파일, RDB 테이블, 하이브 테이블 등 다양한 정형 데이터를 읽고 쓸 수 있다.
  • DataFraem 과 Dataset 에 적용된 연산을 일정 시점에 RDD 연산으로 변환해 일반 스파크 잡으로 실행

Spark Streaming[편집]

  • 실시간 스트리밍 데이터를 처리하는 프레임워크
  • HDFS, 아파치 카프카(Kafka), 아파치 플럼(Flume), 트위터, ZeroMQ 와 더불어 커스텀 리소스도 사용할 수 있다.
  • 이산 스트림(Discretized Stream, DStream) 방식으로 스트리밍 데이터를 표현하는데, 가장 마지막 타임 윈도 안에 유입된 데이터를 RDD 로 구성해 주기적으로 생성
  • 다른 스파크 컴포넌트와 함께 사용할 수 있어 실시간 데이터 처리를 머신 러닝 작업, SQL 작업, 그래프 연산 등을 통합할 수 있다.

Spark MLlib[편집]

  • 머신 러닝 알고리즘 라이브러리
  • RDD 또는 DataFrame 의 데이터셋을 변환하는 머신 러닝 모델을 구현할 수 있다.

Spark GraphX[편집]

  • 그래프는 정점과 두 정점을 잇는 간선으로 구성된 데이터 구조
  • 그래프 RDD(EdgeRDD 및 VertexRDD) 형태의 그래프 구조를 만들 수 있는 기능을 제공 [2]

Data Source[편집]

  • HDFS, Hive, HBase, MySQL 등등

Cluster Manager[편집]

  • 한개의 노드에서 여러가지 노드까지 효과적으로 성능을 확장
  • 이 작업을 수행 하기 위해 스파크에서 지원하는 가벼운 구현의 단독 스케줄러 동작 가능

특징[편집]

스파크는 여러가지의 기술과 특징이 있다. 스파크는 데이터를 읽으면서 변형, 합계 등 작업을 여러가지로 할수 있으며 통계모델을 쉽게 학습하고 배포할 수 있다. 그리고 유연성맵리듀스에 대한 확장성을 훨씬 빠른 속도로 제공한다. 스파크 API자바, 스칼라, 파이썬, R, SQL을 이용해 접근할 수 있다. 애플리케이션을 빌드하는데 쓰일 수 있고, 여러 애플리케이션을 라이브러리로 묶어서 클러스터에 배포할 수도 있으며 파이썬 노트북을 통해 대화식으로 빠른 분석을 수행할 수 있다.[1] 스파크는 여러 애플리케이션을 쓸 수 있다. 이를 통해 과학자나 연구원들에게 많고 좋은 라이브러리를 제공한다. 스파크에 익숙한 사람들은 좋은 라이브러리를 통해 애플리케이션을 쓸 때 더 좋은 방식으로 접근을 할 수 있다. 스파크는 과학자 연구원뿐만 아니라 일반 사용자들이 어려운 작업을 할 때도 쉬운 방식으로 작업을 원활히 수행이 가능하다. 마지막으로 스파크는 데이터 작업을 할 경우에 다양한 소스를 읽고 쓰기가 가능하다. 하둡(Hadoop)이랑 스파크랑 같이 사용을 할 시에 작업 수행이 더 쉽고 빠르게 할 수 있다.

다양한 라이브러리를 제공[편집]

서로 다른 형태의 애플리케이션을 하나의 환경에서 통합적으로 다룰 수 있다.

개발의 편의성[편집]

풍부한 연산과 라이브러리를 제공해 적은 코드로 알고리즘 구현이 가능하며 Java, Scala, Python, R 등 다양한 개발 언어를 제공한다.

데이터를 메모리에 Load, Store 시킴[편집]

Map-Reduce 방식보다 디스크 상에서 10배, 메모리 상에서 100배 이상 빠른 성능을 보인다.

다양한 Cluster Management 지원[편집]

YARN, Mesos, Standalone 등 다양한 모드에서 실행 가능하다.

대화형 분석[편집]

Spark Shell을 통해 대화형 분석이 가능하다.

반복적인 작업[편집]

머신러닝과 같은 반복되는 작업 수행이 가능하다.

실시간 데이터 처리, 배치 처리 모두 가능[편집]

Map-Reduce는 배치 처리만 가능하다.

RDD라는 추상화된 고유 데이터 셋 이용[편집]

병렬 연산 적용 [3]

속도[편집]

Spark는 하둡(Hadoop) 클러스터에서 애플리케이션을 실행할 수 있도록 도와주고, Work Load 실행속도가 100배나 향상이 된다. 스파크는 디스크로 읽기,쓰기 작업 수를 줄임으로써 가능하고, 중간 처리 데이터를 메모리에 저장하고 최첨단 DAG스케줄러, 쿼리 최적화 프로그램 및 물리적 실행엔진을 사용하여 배치 및 스트리밍 데이터에 대해 높은 성능을 가진다.

여러 언어 지원[편집]

스파크는 Java, Scala 또는 Python에 내장된 API를 제공하고, 다른 언어로 응용 프로그램을 작성 가능하며 대화식 쿼리를 위해 80 개의 고급 연산자를 제공한다.[4]

일반성[편집]

SQL, 스트리밍 및 복잡한 분석을 결합하여 SQL과 DataFrames, 기계 학습을 위한 MLlib, GraphX 및 스파크 스트리밍을 포함한 여러 라이브러리에 전력을 공급한다. 라이브러리는 동일한 응용 프로그램에서 원활하게 결합한다.

모든 범위에서 실행[편집]

하둡(Hadoop), ApacheMesos, Kubernetes, 독립 실행형 또는 클라우드에서 실행하고, 다양한 데이터 소스에 액세스를 실행하며 EC2, HadoopYarn, Mesos또는 Kubernetes에서 독립 실행형 클러스터 모드를 사용하여 실행하고, HDFS, Alluxio, Apache카산드라, ApacheHBase, Apache하이브 및 기타 수백개의 데이터 소스에 액세스한다. [5]

버전[편집]

스파크의 버전은 다음과 같다.[6]

  • 2012-10-15 : 스파크 버전 0.6.0
  • 2013-02-27 : 스파크 버전 0.7.0
  • 2013-06-02 : 스파크 버전 0.7.2
  • 2013-07-16 : 스파크 버전 0.7.3
  • 2013-09-25 : 스파크 버전 0.8.0
  • 2013-12-19 : 스파크 버전 0.8.1
  • 2014-02-09 : 스파크 버전 0.9.0
  • 2014-04-09 : 스파크 버전 0.9.1
  • 2014-07-23 : 스파크 버전 0.9.2
  • 2014-05-30 : 스파크 버전 1.0.0
  • 2014-07-11 : 스파크 버전 1.0.1
  • 2014-08-05 : 스파크 버전 1.0.2
  • 2014-09-11 : 스파크 버전 1.1.0
  • 2014-11-26 : 스파크 버전 1.1.1
  • 2014-12-18 : 스파크 버전 1.2.0
  • 2015-02-09 : 스파크 버전 1.2.1
  • 2015-04-17 : 스파크 버전 1.2.2
  • 2015-03-13 : 스파크 버전 1.3.0
  • 2015-04-17 : 스파크 버전 1.3.1
  • 2015-06-11 : 스파크 버전 1.4.0
  • 2015-07-15 : 스파크 버전 1.4.1
  • 2015-09-09 : 스파크 버전 1.5.0
  • 2015-10-02 : 스파크 버전 1.5.1
  • 2015-11-09 : 스파크 버전 1.5.2
  • 2016-01-14 : 스파크 버전 1.6.0
  • 2016-03-09 : 스파크 버전 1.6.1
  • 2016-06-15 : 스파크 버전 1.6.2
  • 2016-11-17 : 스파크 버전 1.6.3
  • 2016-07-26 : 스파크 버전 2.0.0
  • 2016-10-03 : 스파크 버전 2.0.1
  • 2016-11-14 : 스파크 버전 2.0.2
  • 2016-12-28 : 스파크 버전 2.1.0
  • 2017-05-02 : 스파크 버전 2.1.1
  • 2017-10-09 : 스파크 버전 2.1.2
  • 2018-06-29 : 스파크 버전 2.1.3
  • 2017-07-11 : 스파크 버전 2.2.0
  • 2017-12-01 : 스파크 버전 2.2.1
  • 2018-07-02 : 스파크 버전 2.2.2
  • 2019-01-11 : 스파크 버전 2.2.3
  • 2018-02-28 : 스파크 버전 2.3.0
  • 2018-06-08 : 스파크 버전 2.3.1
  • 2018-02-28 : 스파크 버전 2.3.2
  • 2019-02-15 : 스파크 버전 2.3.3
  • 2018-11-02 : 스파크 버전 2.4.0
  • 2019-03-31 : 스파크 버전 2.4.1
  • 2019-04-23 : 스파크 버전 2.4.2
  • 2019-05-08 : 스파크 버전 2.4.3

장점[편집]

메모리 기반 → 속도[편집]

  • 특히 Spark 은 메모리 하둡 이라고도 불리는데, 기존의 하둡이 MapReduce 작업을 디스크 기반으로 수행하기 때문에 느려지는 성능을 메모리 기반으로 옮겨서 고속화 하고자 하는데서 출발했다.

속도 비교[편집]

  • 스파크의 메모리 내 데이터 엔진은 다중 스테이지 작업(스테이지 간에 다시 디스크에 상태를 써야하는)과 비교할 때 맵리듀스에 비해 최대 100배 더 빠르다.
  • 데이터가 메모리 내에 완전히 들어갈 수 없는 아파치 스파크 작업도 맵리듀스에 비해 약 10배 더 빠르다.
  • 서버에 메모리를 다는 경우가 많아지면서, 굳이 디스크를 사용하지 않고 인메모리 상에서 스트림처리, 병렬처리를 쉽게 하는 Spark가 인기를 얻게 되었다.

개발자 친화적인 Spark API[편집]

  • 아파치 스파크는 파이썬, R과 같은 데이터 분석용으로 인기 있는 언어와 기업 친화적인 자바, 스칼라에 대한 바인딩을 제공함으로써

애플리케이션 개발자부터 데이터 사이언티스트까지 그 확장성과 속도를 편리하게 이용할 수 있다.

  • 분산 처리 엔진의 복잡성 대부분을 간단한 메소드 호출 뒤로 숨긴다. → 간단해지는 코드
  • 예시 : 고전적인 예는 문서의 단어 수를 세는 50줄에 가까운 맵리듀스 코드를 겨우 몇 줄의 아파치 스파크로 줄이는 코드이다.

DB 호환[편집]

  • Spark는 하둡의 HDFS뿐 아니라 많은 DB와 호환이 된다.
  • Hive, HBase, PostgreSQL, MySQL, MariaDB, CSV 등의 DB 및 파일을 읽을 수 있다.[7]

단점[편집]

데이터 셋이 적어서 단일 노드로 충분한 애플리케이션에서 스파크는 분산 아키텍처로 인해 오히려 성능이 떨어집니다. 또한 대량의 트랜잭션을 빠르게 처리해야 하는 애플리케이션은 스파크가 온라인 트랜잭션 처리를 염두에 두고 설계되지 않았기 때문에 유용하지 않다. [2]

각주[편집]

  1. 1.0 1.1 kimsy1800, 〈https://kimsy1800.blog.me/221408518867〉, 《네이버 블로그》, 2018-11-29
  2. 2.0 2.1 Eric Han's IT Blog Powered by Hexo, 〈https://futurecreator.github.io/2018/08/14/apache-spark-basic/〉, 《IT BLOG》, 2018-08-14
  3. Jacob, 〈https://blog.naver.com/topchae91/221574921909〉, 《네이버 블로그》, 20189-07-01
  4. 데프홍, 〈https://deafjwhong.tistory.com/84〉, 《티스토리》, 2019-03-18
  5. 아파치 스파크 공식홈페이지 - https://spark.apache.org/
  6. 아파치 스타크 공식홈페이지 뉴스 -http://spark.apache.org/news/
  7. 왈왈이, 〈https://real-programmer.tistory.com/10〉, 《티스토리》, 2019-01-07

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 아파치 스파크 문서는 솔루션에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.