데이터이야기

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

스톰 아키텍쳐

데이터 이야기
작성자
dataonair
작성일
2015-12-07 00:00
조회
4657


스톰 아키텍쳐



스톰의 클러스터는 마스터 노드(Nimbus)와 워커노드(Supervisor)로 구성되며, 주키퍼(Zookeeper)를 이용하여 관리합니다.

- 님버스(Nimbus) : 님버스라는 이름의 데몬이 마스터 노드 역할을 합니다. 여기서 마스터 노드는 하둡의 Jobtracker와 유사한 개념으로서 작업 할당과 실패 확인 등 관리 역할을 합니다.
- 수퍼바이저(Supervisor) : 수퍼바이저 데몬이 실제적으로 워커 프로세스의 시작과 종료, 실행 상태 모니터링 등을 수행하며, 하둡의 TaskTracker와 유사합니다.
- 주키퍼: 스톰에 포함된 모듈은 아니며, 아파치 프로젝트 중 하나입니다. 분산된 노드 간의 관리를 수행하고 시스템의 안정성을 유지하도록 관리해주는 역할을 합니다.

dbin_501.jpg

그림 1. 스톰 아키텍처

스톰에서는 Stream, Spout, Bolt, Task, Worker, Topology 등의 용어를 정의하고 있습니다.

- Stream: 스톰의 중요한 추상 개념입니다. 데이터가 끊임없이 연속적으로 들어올 때, 그 각각의 데이터를 병렬 분산해 Tuple이라는 형태로 관리합니다. Stream은 integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays 형태로 tuple을 지정할 수 있습니다. 또한 시리얼라이저하게 자신만의 타입을 구현할 수도 있습니다.

- Spout: Stream의 데이터 소스입니다. 하나의 Spout은 하나 이상의 stream을 발생시킬 수 있으며, Kestrel, RabbitMQ, Kafka 등을 통해 외부로부터 데이터를 받아 오는 역할을 합니다.

dbin_502.jpg

그림 2. Stream, Tuple, Spout

- Bolt: 실제로 데이터 처리를 수행합니다. 연속적인 연산을 하거나 DB에 기록하는 등의 작업을 합니다. 하나의 Bolt는 1개 이상의 input stream을 받을 수 있고, 1개 이상의 output stream을 발생시킬 수 있습니다.

dbin_503.jpg

그림 3. Bolt

- Topology: Stream의 그루핑에 의해 Spout와 Bolt 조합으로 이뤄진 네트워크입니다. Topology는 다양한 조합의 형태로 가능합니다. Spout는 Kafka, Flume 등과 연동해 데이터 스트림을 받고, Bolt 중 몇 개는 HDFS, HBase, RDBMS 등에 결과 데이터를 쓸 수 있습니다.

dbin_504.jpg

그림 4. 스톰 토폴로지



주키퍼 설치

아키텍쳐에서도 설명하였듯이 스톰은 주키퍼가 중요한 역할을 합니다. 그렇기 때문에 주키퍼가 꼭 실행이 되어 있어야 합니다.

아래와 같이 주키퍼를 다운받고 압축을 풀어줍니다.



wget http://apache.mirrors.lucidnetworks.net/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar xzvf zookeeper-3.4.6.tar.gz



주키퍼의 환경설정을 해줍니다.



cp conf/zoo_sample.cfg conf/zoo.cfg
vi conf/zoo.cfg
dataDir=/var/zookeeper
server.1=192.168.1.1:2888:3888 // 설치한 서버의 IP
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888



myid를 생성해줍니다.



mkdir /var/zookeeper
vi /var/zookeeper/myid
# 각 서버마다 conf/zoo.cfg에서 설정한 아이디를 할당
1



마지막으로 주키퍼를 실행해줍니다.



zookeeper/bin/zkServer.sh start



정상적으로 실행되었나 확인하기 위해서는 주키퍼의 클라이언트를 이용하거나 간단히 jps 명령을 통하여 아래와 같이 정상적으로 QuorumPeerMain이 뜨는지 확인합니다.



dbin_505.jpg

스톰 설치

보통 오픈소스들은 소스버전을 직접 빌드해서 설치하는 방법과 바이너리 버전을 설치하는 방법이 있습니다. 소스버전을 직접 빌드하는 경우 소스 수정이 가능하고 최신의 버전의 코드를 받을 수 있으나 처음 하는 경우 필요한 프로그램이나 빌드 프로그램인 maven에 익숙하지 않아서 어려워하는 경우도 있습니다.

이번 시간에서는 설치 자체가 목표가 아니기 대문에 바이너리 버전을 이용하여 설치하는 방법에 대해서 알아보겠습니다. 참고로 빌드를 하기 위하여 소스코드가 필요한 경우 https://github.com/apache/storm에서 받으시면 됩니다.

먼저 바이너리 버전을 다운받고 압축을 풀어줍니다.



wget http://mirror.apache-kr.org/storm/apache-storm-0.9.6/apache-storm-0.9.6.zip
unzip apache-storm-0.9.6.zip



그다음 conf/storm.yaml의 파일을 수정하여 스톰의 기본 설정을 해줍니다.



# 주기퍼 주소 기입
storm.zookeeper.servers:
- "111.111.111.111"
- "111.111.111.112"
- "111.111.111.113"# 스톰 프로그램을 위해 사용되는 jars, confs 파일 등을 저장하기 위한 폴더
storm.local.dir: "/mnt/storm"# 마스터 노드인 님버스를 실행시킬 주소를 지정한다. 님버스를 통해 jar와 confs를 다운 받는다.
nimbus.host: "111.222.333.44"# 슈퍼바이저를 실행시킬 때 아래 지정한 수 만큼 워커를 생성한다.
이 포트를 늘리면 자원을 더 많이 사용하게 된다.
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703



storm.local.dir 설정에 의해 각 서버의 로컬 디스크를 사용하기 되므로 다음과 같이 실행합니다.



sudo mkdir /mnt/storm
sudo chown hadoop:hadoop /mnt/storm



마지막으로 압축푼 디렉토리에 가서 아래 실행하면 스톰 실행이 완료 됩amp;
bin/storm supervisor &
bin/storm ui &



스톰이 정상적으로 실행되었는지 확인하기 위해서는 http://마스터서버IP:8080에 접속하여 아래와 같이 정상적으로 웹페이지가 뜨는지 확인하시면 됩니다.



dbin_506.jpg

스톰 UI 웹페이지

다음 시간에는 간단한 스톰 프로그램을 작성하고 실제로 구동시켜보도록 하겠습니다.



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

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