데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

빅데이터 스트리밍을 위한 대표 오픈소스 Storm Spark

데이터 이야기
작성자
dataonair
작성일
2015-10-30 00:00
조회
5431


빅데이터 스트리밍을 위한 대표 오픈소스 Storm Spark



이전 시간까지는 실시간에 대한 개념과 포괄적인 의미에서의 실시간에 해당하는 오픈소스의 종류에 대해 설명하였습니다. 이번 시간부터는 스트리밍 오픈소스에 대해서 다뤄보도록 하겠습니다. 스트리밍 처리는 데이터가 끊임없이 연속적으로 들어오고 데이터를 모으지 않고 즉시 처리하는 것을 의미합니다. 데이터가 연속적으로 들어오고 즉시 처리하기 위해서는 몇 가지 특징이 필요합니다.

첫 번째로 장애에 강인해야 합니다. 데이터가 연속적으로 들어오고 있는 상황에서 10분의 장애는 배치와는 달리 10분간의 데이터를 유실한다는 것을 의미합니다. 두 번째로 속도가 빨라야 합니다. 명확한 기준을 잡기는 힘들지만 1분동안 생성된 데이터를 처리하는데 1분이상의 시간이 소요된다면 데이터 처리 지연되기 때문에 스트리밍 처리가 불가능합니다. 또한, 일시적인 장애까지 고려하면 훨씬 빠른 속도로 처리되야 장애시간동안 처리못한 데이터를 복구 할 수 있는 시간을 가질 수 있습니다. 세 번째로 데이터 유실이나 중복이 발생하면 안됩니다. 배치 처리의 경우 입력 데이터를 받은 후 체크섬 등 여러가지 방법을 통해 데이터의 유실과 중복을 체크할 수 있지만 스트리밍의 경우 기준점을 잡기도 힘들고 체크를 하기에 어려움이 있습니다. 그렇기 때문에 처음부터 데이터 유실과 중복이 발생하지 않도록 아키텍쳐가 잘 구성되어 있어야 합니다.

스트리밍 처리를 위한 빅데이터 오픈소스들은 여러가지가 있지만 위 3가지를 모두 완벽하게 만족하는 오픈소스는 존재하지 않습니다. 대신 각각의 특징과 장점들이 있고 비지니스 환경에 맞춰서 적절한 오픈소스를 선정하는 것이 중요합니다. 여러 오픈소스가 있지만 그 중에서 가장 많이 사용되는 먼저 storm과 spark가 무엇인지 간단하게 소개하고 각 항목에 대해서 비교하면서 핵심개념들과 실습 코드를 소개해드리도록 하겠습니다.



1. Storm 이란

Storm은 트위터로 합병된 BackType에서 최초 개발된 것으로 hadoop에서 처리하지 못하는 실시간 데이터를 대용량으로 처리 할 수 있는 실시간 처리/분석 시스템입니다. 트위터는 BackType을 합병후 트위터의 실시간 분석과 최적화, 안티 스팸 등에 활용하다가 storm이라는 이름의 프로젝트를 오픈소스로 공개했습니다. 2013년 9월, 아파치 인큐베이터 프로젝트에 등록됐으며 2014년 9월 아파치 톱 프로젝트로 올라섰습니다. 주로 자바와 클로저라는 언어로 구현돼 있고, 핵심 부분은 간결성을 위해 클로저로 구현되어 있습니다.

Storm은 Message Queue, Worker 등의 기능을 빌트인으로 제공해 실시간 계산 작업이 가능하도록 해줍니다. 이것을 이용해 지속적인 메시지를 처리하거나 실시간으로 계산 및 데이터베이스 업데이트를 하는 등 스트리밍 프로세싱과 지속적 처리(continuous computation)를 가능하게 합니다. 또한 고비용의 병렬 계산을 동적으로 수행하는 Distributed RPC에도 사용될 수 있습니다.

Storm의 주요 특징은 다음과 같습니다.
- 심플 프로그래밍 모델: mapreduce가 병렬처리 프로세싱 구현의 복잡도를 낮춰주는 것과 같이 storm 또한 분산 real-time 프로세싱 구현의 복잡도를 낮췄습니다.
- 어떤 언어로든 구현 가능: 어떤 언어든 사용자가 익숙한 언어를 이용해 구현할 수 있습니다. 클로저(Clojure), 자바, 루비, 파이썬을 기본으로 제공하며 그 밖에 언어도 storm의 communication protocol의 구현만으로도 사용이 가능합니다.
- 폴트톨러런트: storm은 worker process나 노드의 장애를 자동으로 관리해줍니다.
- Horizontally scalable: 멀티플 스레드, 프로세스, 서버를 이용해 병렬 처리가 가능하며, 추가 확장이 쉽습니다.
- Guaranteed message processing: 작업 실패 시에는 데이터의 시작 단계부터 다시 재처리해주는 replaying message system이 구현되어있기 때문에 hadoop과 같이 각 메시지가 유실되지 않습니다.
- 빠른 속도: Netty(혹은 ZeroMQ)를 사용해 메시지를 빠르게 처리할 수 있도록 설계되어 있습니다.
- 로컬 모드: Storm에서는 클러스터 모드와 로컬 모드를 지원합니다. 개발 시 클러스터 테스트가 어려울 경우 로컬 모드로 테스트해 번거로운 배포 작업을 피하면서 단위 테스트를 용이하게 할 수 있습니다.
- 쉬운 관리: Hadoop과는 달리 클러스터를 관리하는 작업이 매우 간단합니다. 복잡한 설정이나 관리 포인트가 없이 매우 단순하면서도 강인합니다.



2. Spark 란

Spark는 UC버클리대학 AMPLab에서 개발한 대용량 분산 처리?분석 오픈소스입니다. 가장 대표적인 hadoop의 mapreduce가 맵과 리듀스 두 종류로만 돼 있어서 한계가 있는 반면, spark는 여러 가지 오퍼레이터를 지원합니다. 또한 mapreduce와 같이 분석 엔진만 있는 것이 아니라, SQL?스트리밍?머신러닝 라이브러리가 하나의 프로젝트에 유기적으로 묶어서 관리할 수 있습니다. 물론 이 세 가지를 쉽게 조합해 하나의 프로그램으로 만들 수도 있습니다. 특히 메모리를 최대한 활용해 성능이 좋을 뿐만 아니라, iteration 작업을 통해 큰 성능 향상을 기대할 수 있습니다. 참고로 Iteration 작업은 머신러닝과 같이 복잡한 분석에서 자주 발생하기 때문에 분석 작업시 특히 도움이 됩니다.

위와 같은 장점 덕분에 다른 오픈소스에 비해 역사가 그렇게 길지 않음에도 지난 2014년 2월 아파치 톱 프로젝트가 됐고, 해외에서는 가장 ‘핫한’ 오픈소스 가운데 하나로 주목 받고 있습니다. 참고로 spark는 지난 2010년, 「Spark: Cluster Computing with Working Sets」이라는 논문 발표와 함께 본격적으로 발전하기 시작했습니다.



설계 목표

spark는 크게 3가지의 설계 목표를 가지고 시작을 했습니다.

1 Low latency (interactive) queries on historical data
과거 데이터들을 빠르게 처리해 대화형 질의가 가능하도록 합니다. 이것은 SQL-On-Hadoop 파트에서 언급된 내용으로, Low Latency가 가능해야 데이터 탐색 - 분석 - 탐색 - 분석의 반복 과정을 통해 제대로 된 데이터 분석을 할 수 있습니다.

2 Low latency queries on live data(streaming)
실시간으로 들어오는 데이터를 분석할 수 있어야 합니다. 이것은 storm을 소개할 때 언급했던 내용입니다. Spark는 실시간 스트리밍 처리/분석도 가능하도록 설계됐습니다.

3 Sophisticated data processing
복잡한 분석도 가능해야 합니다. Anomaly detection, Trend analysis 등 복잡한 분석도 가능해야 좀 더 나은 의사결정을 할 수 있다고 생각했습니다. Mahout이나 R과 같은 프로젝트의 목표와 비슷합니다.

위와 같은 3가지 설계 목표는 최근 이슈가 되고 있는 처리?분석 단계의 장점들을 수년 전부터 추구하고 있습니다. 또한 이 각각이 잘 동작하는 것과 중요하지만, 무엇보다 이 3가지가 하나의 오픈소스 안에서 처리됨에 따른 관리의 편의성과 프로그램의 확장성 측면에서 좋은 평가를 받고 있습니다.



dbin_500.jpg

위 그림은 spark의 전체 모듈을 표현한 것 입니다.

- Spark Core: Spark의 중심 부분으로 Spark 구동에 있어서 중요 기능들이 들어 있습니다. 상단에있도록 해줍니다.
- 클러스터 매니저: Spark 자체에 내장된 것 아닌, spark의 자원을 관리하기 위한 외부 모듈들입니다. 가장 이슈가 되고 있는 클러스터 매니저인 Yarn, Mesos, AWS를 모두 지원합니다.
- 데이터 소스: 외부의 데이터 저장소와 연계할 수 있음을 표현한 것으로 가장 일반적인 HDFS나 아마존의 S3, NoSQL인 Cassandra, SAP의 Hana를 지원합니다. 물론 로컬 파일도 가능합니다.
- 상단 모듈: 위에서 언급한 설계 목표에 부합되는 모듈들입니다. Interactive SQL, Streaming, Machine Learning, Graph Processing이 가능합니다. 아직 개발중이지만 R과 연동해 spark 엔진으로 분석이 가능하도록 한 SparkR과 약간의 정확도를 낮추는 대신 빠른 속도로 조회가 가능한 BlinkDB도 있습니다.
이번 시간에는 Storm과 Spark에 대해 간단히 소개해드렸습니다. 다음시간에는 storm의 구성요소와 아키텍쳐에 대해서 본격적으로 다뤄보겠습니다.



출처 : 한국데이터베이스진흥원

제공 : 데이터 전문가 지식포털 DBguide.net