람다 아키텍처란?
실시간 분석을 지원하는 빅데이터 아키텍쳐
대량의 데이터를 실시간으로 분석하기 어려우니 batch로 미리 만든 데이터와 실시간 데이터를 혼합해서 사용하는 방식이다.
<람다 아키텍처 구조: (참조: http://lambda-architecture.net)>
위 그림은 람다 아키텍쳐의 구성을 설명하고 있다.
데이터가 생성되면 데이터 저장소에 저장을 한다. 이 데이터는 batch로 일정주기마다 배치 뷰를 만들어 낸다.
그리고 동일한 데이터를 실시간 데이터 처릴 통헤 real-time 뷰를 만들다. 그리고 이 두개를 혼합해 분석을 빠르지만 실시간 데이터가 반영된 분석을 할 수 있다.
람다 아키텍쳐는 총 3개의 layer로 구성된다.
- batch layer: raw 데이터가 저장되어 있고, batch 처리하여 배치 뷰 생성
- serving layer: batch로 분석된 데이터가 저장되어 있고 batch 외에는 쓰기가 안됨
- speed layer: 실시간 데이터를 집계
여기서 batch layer에서 만든 배치 뷰 데이터와 speed layer에서 만든 실시간 뷰의 데이터가 중복되지 않게 관리하는 것이 중요하다.
이부분은 timestamp로 해결 가능하다. 그리고 batch로 데이터가 만들진 후에 실시간 뷰의 데이터를 주기적으로 지워주어야 한다.
각 레이어에서 사용되는 솔루션을 예를 들어설명하면 잘 이해가 된다.
batch layer인 Hadoop/HDFS, MR은 데이터를 저장하고 mapReduce로 데이터를 분석한다.
그리고 serving layer는 HBase로 mapReduce로 분석한 데이터를 저장하는 NoSql이다.
speed layer는 스트리밍 데이터를 처리하는 storm을 사용한다는 것인 빠른 데이터 처리가 필요하다는 뜻이다.
그리고 memory기반의 redis를 사용한다. 즉 빠른 속도가 필요한 솔류션을 사용했다.
<레이어별 솔루션 예제(참조: http://bcho.tistory.com/984)>
이 부분에서 batch 데이터와 real-time 뷰의 이 기종 데이터를 동시에 사용하는 어려움이 있을 수 있다.
그래서 이 두부분의 솔류션을 RDBMS를 사용하는 방법도 고려해볼 필요가 있다.
#레이어별 적용 시스템 리스트
람다 아키텍쳐는 데이터를 처리하는 구조를 설명하기 때문에 각각 레이어별 사용 시스템에 대한 정답이 있지 않다.
위에서 예를 든 HDFS, MR,HBase, Storm, Redis를 무조건 사용할 필요는 없다.
elasticsearch를 사용한 람다 아키텍쳐 구현 처럼 다른 솔류션을 사용한 예제가 많다.
아래 사용 가능한 솔루션 리스트들이다. 또한 여기 있는 리스트가 전부는 아니다. 참고만 하면 된다.
배치 레이어 컴포넌트
이름 | 사용언어 | 플랫폼 | 비고 |
---|---|---|---|
Hadoop MapReduce | Java | Hadoop | Very low-level, not re-usable[^1] |
Spark | Scala/Java/Python | Spark | In-memory |
Hive | HiveQL,Java | Hadoop | |
Spark SQL | SQL/Scala/Java/Python | Spark | |
Pig | Pig Latin/Java | Hadoop | |
Spork | Pig Latin/Java | Spark | |
Cascading/Scalding | Java/Scala | Hadoop | |
Cascalog | Clojure | Hadoop | |
Crunch/Scrunch | Java/Scala | Hadoop | |
Pangool | Java | Hadoop |
서빙 레이어 컴포넌트
이름 | 사용언어 | 비고 |
---|---|---|
ElephantDB | Clojure | |
SploutSQL | Java | |
Voldemort | Java | |
HBase | Java | |
Druid | Java |
스피드 레이어 컴포넌트
이름 | 사용언어 | 비고 |
---|---|---|
Apache Storm | Clojure | |
Apache Spark Streaming | Scala/Java/Python | AMPLab |
Apache Samza | Scala/Java | |
Apache S4 | Java | Yahoo! |
Spring XD | Java | Pivotal |
#참고자료