관리 메뉴

HAMA 블로그

IoT 빅데이터 분석 솔루션을 만들기위한 도구들 본문

IoT

IoT 빅데이터 분석 솔루션을 만들기위한 도구들

[하마] 이승현 (wowlsh93@gmail.com) 2015. 9. 3. 11:23

http://www.infoworld.com/article/2876247/application-development/building-an-iot-analytics-solution-with-big-data-tools.html  요약 번역




데이터 얻고 저장하기


ad  IoT 디바이스들로부터의 이벤트(데이터)를 받을수있는 무수한 프로토콜중에 (특별히 로우레벨에서) 우리의 목적에 부합하기위해 디바이스가 블루투스,스마트폰,WI-FI 또는 하드웨어 커넥션인지는 중요하지 않다. 다만 정해진 프로토콜을 사용하는는 어떤 종류의 브로커에게 메세지를 보낼수있는지가 중요하다. 

이에 IoT 에서 사용하는 가장 유명한 프로토콜중에 하나는 MQTT (Message Queue Telemetry Transport) 이다. 이것은 잘 알려진 많은 오픈소스 클라이언트/브로커와 활용되는데 특별한 다른 이유가 있지 않다면  Mosquitto  는 가장 잘 알려지고 널리 쓰이는 오픈소스 MQTT 브로커를 사용하면 된다.  모스키토는 오픈소스이기때문에 예산이 부족한 당신이 낭비를 피하면서 당신의 분석 컨셉을 미리 실험 해볼수도 있다.

일단 모스키토같은 브로커에 메세지가 오면, 당신은 분석 시스템으로 메세지를 건네줄수있게된다. 가 장 좋은 방법중 하나는  분석을 위해 전처리/변경되야하기전에 오리지널 데이터는 따로 저장하는것이다. 그렇게 되면 디버깅이슈때나 다시 리플레이 할때나 이전 기록을 테스팅을 다시 해볼수있다는것이다. 

데이터를 저장하기위한 여러가지 옵션이 있는데, 많은 프로젝트들이 Hadoop 과 Hive 를 사용하는데, 최근에 나는 문서기반 NoSQL 의 하나인 Couchbase  ( 역주: 다른 문서기반 NoSQL 몽고DB 가있으며 http://www.infoworld.com/article/2613970/nosql/nosql-showdown--mongodb-vs--couchbase.html  비교해놓았다.)  은 를 사용했는데 매우 만족하였다. Couchbase 는 높은 처리율과 낮은 지연률을 꽤 훌륭히 컴비네이션한  특성을 가지고있다. 그것은 또한 스키마가 없는 문서형 데이타베이스라서 쉽게 새로운 이벤트타입을 추가할수있다. HDFS (역주: 하둡의 분산파일 저장시스템, 저장하기위한 시스템이고 저장된 데이터를 분석하기위한 유명한것으로 맵리듀스가 있다)  에 직접적으로 데이터를 쓰는것은 실용적인 옵션이다. 그렇게 하면 나중에 Hadoop 을 이용하여 배치기반의 분석도 사용할수있게 된다. 

영구저장소에 소스데이터를 쓰기위해 커스텀코드를 메세지브로커에 붙히거나  (예를들어 , 모스키토 브로커) 또는 아파치 카프카 같은 중간 메세지브로커에 메세지를 전달할수있다. (당신의 시스템의 다른 부분에 메세지를 이동하기위해 카프카 컨슈머를 사용하거나) 

결국 하나의 입증된 패턴은 카프카에 메세지를 넣는것과 2개의 컨슈머 그룹이 있다는것이다. 하나는 당신의 영구저장소에 로우데이터를 쓰기위한 것이고, 나머지 하나는 실시간 분석도구(아파치 스톰같은) 로 데이터를 넘겨주는 역할을 한다. 

만약 당신이 MQTT 와 모스키토 및 여러가지를 묶어서  편한길을 가려면  MQTT 스파우트 (역주: 스파우트는 아파치 스톰의 개념으로 스파우트를 통해서 데이터를 모아서 볼트를 통해서 분석작업을 하게된다.)  를 사용해서 아파치 스톰에 직접적으로 전달하는것이다. 


전처리 및 데이터 변환 

로우 형태를  가진 디바이스로부터의 데이터는 분석하기엔 적절하지 않은 경우가 많다. 데이타를 읽어버릴수도있고, 좀 더 많은 정보를 가진것으로  요구되기도 한다. 값을 표현하기위ㅐ 변경이 필요할수도있다. ( 데이타에 시간필드를 추가한다던가 하는)  

이런것을 하기위해 전처리 / 변환 과정이 필요하며 다양한 방법이 있다. 내가 경험했던 가장 좋은 방법은  위에 언급했듯이 일단 로우 소스 데이터와 함께 변경된 데이터를 저장할 필요가 있다는것이다.

지금 이렇게 생각할수도있을것이다 " 내가 항상 그것을 다시 변경할수있는데 왜 해야하지? " 하지만 이것은 매우 큰 비용을 들이게 된다. 

데이터 변환을 하는것은 여러가지 방법이 있다. 만약 배치모드에 촛점을 맞춘다면 HDFS 로 데이터를 쓰고 ( 피그 등을 통해 분석할수있을것이다. 피그는 시간은 오래걸리며 워크플로우에 지연도 길다.) 실시간 분석을 하기위해서는 아파치 스톰을 사용할수있다.   (역주: 스톰으로 분석하고 결과 데이터는 HDFS 에 쓸수도있고, Couchbase 에 쓸수도있고 그렇다) 


비지니스 혜안을 얻기위한 분석

일단 데이터가 적합한 상태로 변환이 되고 저장이 되면 , 이제 분석을 위해 그것들을 다룰수있게 된다. 아파치 스톰은 연속된 데이터 흐름을 분석하기위해 고안되었다. 그것은 정확히 IoT 시스템이 생성하는 데이터 흐름을 다루기에 적합하다.  이벤트 상관관계(event correlation), rolling metric calculations, and 집합통계(aggregate statistics) 같은것을 수행할수있게된다. 물론 상황에 적절한 여러가지 알고리즘을 직접 넣을수 있다. 

우리가 경험한바로는 스톰은 스트리밍 IoT 데이터 처리에 매우 잘 맞는 옷이었고, 어떻게 당신의 분석파이프라인의 중요요소로 작동하는지 살펴보자.

스톰에서는 기본적으로 토폴로지들이 영구히 동작하는데 , 당신의 끊임없는 메세지를 처리할수있다. 토폴로지는 어떤 개수와 프로세싱스텝으로도 구성될수있으며 , 일명 "볼트" 라고 불리는 처리단위가 클러스터의 노드에 분산되어 있다. 

볼트에서 처리된 데이터들은 버려질수도있으며, 재 가공되어 넘겨질수도있고, 결과 데이터들은 영구저장소에 저장되거나 , 뷰어에 의해 디스플레이되어 사용자에게 보여질수도있다.

위의 그림을 설명해 보면 

1.엣지디바이스/센서로부터 데이터가 생성되어 약속된 프로토콜인  MQTT (모스키토) 로 보내지고, 

2. 그 데이터들은 카프카에 모인후 카프카에서는 

      2-1. 로우데이터 자체를  Couchbase 로 보내서 저장하고 

      2-2. 데이터 분석을 위한 다른 컨슈머는 스톰에게 보내고 

           2-2-1.  실시간 분석중에 위험요소 발견하면 즉시 디바이스에 통보하고

           2-2.2.  실시간 데이터를 타임스탬프와 함께 사용자에게 그래프 등으로 보여주고

           2-2.3.  분석하기위해 필터링된  데이터를 Couchbase 로 저장하며

           2-2.4.  분석 결과 데이터는  Couchbase 와 HDFS 에 저장됩니다.


3. HDFS 에 저장된 데이터는 추후에 배치분석에 사용될수있으며

4. Couchbase 에 저장된 데이터는 사용자가 쿼링하여 살펴볼수있게됩니다.


Comments