공개 SW 솔루션설치 & 활용가이드 미들웨어 > 분산시스템 SW 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 Apache Storm 은트위터의실시간분석과최적화, 안티스팸등에활용하다가오픈소스로공개했으며실시간으로대용량데이터를분석할수있게해주는서비스 지속적인메시지를처리하거나실시간으로계산및 DB 업데이트등스트리밍프로세싱과지속적처리가능 대분류 미들웨어 라이선스형태 Apache License 2.0 사전설치솔루션 소분류 분산시스템 SW Java 1.6 이상 Python 2.6.6 이상 Zookeeper, ZeroMQ, JZMQ 운영체제 Cross-platform 버전 1.2.2 (2018 년 10 월기준 ) 특징 보안취약점 다양한프로그래밍언어지원 ( 클로저, 자바, 루비, 파이썬, Storm communication protoccol) 데이터처리보장 장애를자동으로관리 집중적인쿼리를병렬처리 취약점 ID : CVE-2018-1332 심각도 : 6.5 MEDIUM(V3) 취약점설명 : 사용자가일부 Storm 데몬과통신할때다른사용자로가장할수있는취약점을노출 대응방안 : 1.2.2 이상으로업그레이드 참고경로 : https://lists.apache.org/thread.html/50f1d6a7af27f49d2e498a9ab2975685302cd8ca47000b7c3 8f339a4@%3Cdev.storm.apache.org%3E 개발회사 BackTpye 공식홈페이지 https://storm.apache.org
- 4-2. 기능요약 Fault-tolerant - Storm은노드의장애를자동관리 다양한프로그래밍언어지원 - Storm은기본적으로 JVM(Java Virtual Machine) 위에서동작하지만 Twitter의 Thrift 프로토콜을기반으로하기때문에다양한언어로구현가능 Scalable - 멀티플스레드, 프로세스, 서버를이용해병렬처리가가능하며추가확장쉬움 Guarantees no data loss - Storm은모든메시지가처리될것을보장하며, 유실없이최소한한번메세지가처리될수있게지원
- 5-3. 실행환경 설치요구사항 - Linux 또는 Mac - JAVA 1.6 이상 - Python 2.6.6 이상 - Zookeeper, ZeroMQ, JZMQ * Storm을직접빌드하기위해서는 gcc, maven 등각종라이브러리가추가필요
- 6-4. 설치및실행 세부목차 4.1 Storm 개발환경설치 4.1.1 JDK 설치및환경변수설정 4.1.2 Zookeeper 설치 4.1.3 Maven 설치 4.2 Apache Storm 설치및기동
- 7-4. 설치및실행 4.1.1 JDK 설치및환경변수설정 JDK 설치 - # yum install java-1.8.0-openjdk-devel.x86_64 JDK 환경변수설정 javac 위치확인 - # which javac - # readlink -f /usr/bin/javac - /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 가 JAVA_HOME 될경로 - vi /etc/profile 파일하단에아래내용을추가한뒤저장 - export JAVA_HOME= /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64 - export PATH=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64/bin - export CLASSPATH=". - # source /etc/profile
- 8-4. 설치및실행 4.1.2 Zookeeper 설치 Zookeeper 설치및실행 - # wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz - # tar -xvzf zookeeper-3.4.13.tar.gz 환경변수설정파일을생성, 샘플파일을편집하여사용가능 - # cd zookeeper-3.4.13/conf - # cp zoo_sample.cfg zoo.cfg - # vi zoo.cfg Zookeeper 실행스크립트를이용하여 Zookeeper 실행 - # cd../bin - #./zkserver.sh start
- 9-4. 설치및실행 4.1.3 Maven 설치 Maven 설치 - # wget http://mirror.apache-kr.org/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz - # tar -xvzf apache-maven-3.5.4-bin.tar.gz - #cd ~ - # vi /etc/profile 아래내용저장 - export MAVEN_HOME=/home/tuser/apache-maven-3.5.4 - export PATH=$PATH:/home/tuser/apache-maven-3.5.4/bin - # source /etc/profile 설치확인 - # mvn version
4. 설치및실행 4.2 Apache Storm 설치및기동 Apache Storm 설치및기동 - # wget https://archive.apache.org/dist/storm/apache-storm-1.2.2/apache-storm-1.2.2.tar.gz - # tar -xvzf apache-storm-1.2.2.tar.gz - # cd ~ - # vi /etc/profile 아래내용저장 - export STORM_HOME=/home/tuser/apache-storm-1.2.2 - export PATH=$PATH:/home/tuser/apache-storm-1.2.2/bin - # source /etc/profile - # cd /home/tuser/apache-storm-1.2.2 마스터노드실행 - # bin/storm nimbus - # bin/storm ui 워커노드실행 - # bin/storm supervisor Localhost:8080 으로접속확인가능 - 10 -
- 11-5. 기능소개 세부목차 5.1 storm의동작방식 5.2 storm의컴포넌트 5.3 스트림그룹핑 5.4 메시지처리방식
- 12-5. 기능소개 5.1 storm 의동작방식 Storm의아키텍처는 Hadoop과매우유사하며, Hadoop에서는 MR(Map-Reduce) 작업을실행하는반면 Storm에서는토폴로지작업을수행하는것이다름 MR 작업과토폴로지의차이 - MR 작업은정해진데이터세트를처리한후완료되지만토폴로지는계속해서메시지를처리한다는점다름 Storm의클러스터는마스터노드 (Nimbus) 와워커노드 (Supervisor) 로구성되며 Zookeeper 이용관리 - Nimbus( 마스터노드 ) : Hadoop의 JobTracker와유사한개념으로클러스터주변에코드를배포하고작업을컴퓨터에할당하며실패모니터링 - Supervisor( 워커노드 ) : 실제적으로워커프로세스의시작과종료, 실행상태모니터링등수행 - Zookeeper : 분산된노드간의관리를수행하고시스템의안정성을유지하도록관리역할 Supervisor Nimbus Zookeeper Zookeeper Zookeeper Supervisor Supervisor Supervisor
- 13-5. 기능소개 5.2 storm 의컴포넌트 (1/3) Stream : storm의중요한추상개념, 데이터가끊임없이연속적으로들어올때각각의데이터를병렬분산해튜플이라는형태로관리 * 튜플 : 정렬된목록 Spout : 스파우트는데이터가스톰토폴로지로들어가는입구이며, 어댑터로써동작하는데데이터소스와연결을맺고데이터를튜플로변환하여스트림으로튜플을내보내는일을하며, 스파우트의 4가지중요한메소드 - open() : Spout가처음초기화될때한번만호출되는메소드로데이터소스로부터의연결을초기화등의역할수행 - nexttuple() : 데이터스트림하나를읽고나서다음데이터스트림을읽을때호출되는메소드 - ack(object msgld) : 데이터스트림이성공적으로처리되었을때호출되는데성공처리된메세지를지우는등성공처리에대한후처리구현 - fail(object msgld) : 해당데이터스트림이 Storm Topology를수행하던중에에러가발생하거나타임아웃등이발생했을때호출되는데이때사용자가에러데대한에러처리로직명시
- 14-5. 기능소개 5.2 storm 의컴포넌트 (2/3) Bolt : 볼트는실시간연산의연산자나함수로생각할수있으며, 다수의스트림을입력받아데이터를처리하고선택적으로하나이상의스트림으로내보내며, 볼트가처리하는일반적인기능은튜플필터링, 조인과집계, 연산, 데이터베이스읽기 / 쓰기 - execute(tuple input) : 가장필수적인메소드로 Bolt에들어온메세지를처리하는로직을갖고, 종단 Bolt가아닌경우에는다음 Bolt로메세지전달
- 15-5. 기능소개 5.2 storm 의컴포넌트 (3/3) Topology : 토폴로지라고부르는스톰의분산연산구조는데이터스트림, 스파우트, 볼트로구성되며, 스톰토폴로지는하둡과같은배치처리시스템의잡과거의비슷하지만배치잡은연산의처음과끝지점이명확하게정의되어있는반면스톰토폴로지는죽이거나언디플로이 (undeploy) 할때까지계속동작함 데이터소스 Spout Bolt Bolt 데이터소스 Spout Bolt Bolt
- 16-5. 기능소개 5.3 스트림그룹핑 (1/6) 스트림그룹핑은스트림의튜플들이다수의볼트로어떻게분산되는지에대해정의한것이며, 스톰은 7 가지의스트림그룹핑제공 Bolt A Bolt B Spout Bolt C < 스트림의전달경로 >
- 17-5. 기능소개 5.3 스트림그룹핑 (2/6) 셔플그룹핑 (Shuffle grouping) : 튜플을무작위로동일한비율로나눠서볼트의 task 에 할당하며, 기본적인분산처리방식임
- 18-5. 기능소개 5.3 스트림그룹핑 (3/6) 필드그룹핑 (Field grouping) : 그룹핑에서정의한필드의값에따라튜플이전달될볼트가 정해짐 Field = X Field = Y Field = Z
- 19-5. 기능소개 5.3 스트림그룹핑 (4/6) 올그룹핑 (All grouping) : 튜플스트림의복사본들이모든볼트작업단위로전달되며, 각각의 작업단위는튜플의복사본을받음
- 20-5. 기능소개 5.3 스트림그룹핑 (5/6) 글로벌그룹핑 (Global grouping) : 스트림의모든튜플을단일작업단위로전달하며, 이때작업단위아이디값이가장작은작업단위로전달 - 글로벌그룹핑을사용하는볼트의병렬화지수를늘리거나작업단위의수를늘리는것은아무런의미없는행동임
- 21-5. 기능소개 5.3 스트림그룹핑 (6/6) 넌그룹핑 (None grouping) : 넌그룹핑은기능적으로셔플그룹핑과동일함 다이렉트그룹핑 (Direct grouping) : 소스스트림이 emitdirect() 메소드를호출하여튜플을 내보내고싶은컴포넌트를직접지정가능하며, 다이렉트스트림으로선언된스트림에서만 사용가능 로컬또는셔플그룹핑 (Local or shuffle grouping) : 로컬또는셔플그룹핑은셔플그룹핑과비슷하지만같은워커프로세스에서동작하는볼트작업단위대상으로만튜플을셔플링하며, 그외기능은셔플그룹핑과동일함 - 토폴로지의병렬화지수에따라로컬또는셔플그룹핑은토폴로지의성능을네트워크전송한계까지올릴수있음
- 22-5. 기능소개 5.4 메시지처리방식 Storm은스파우트에서생성된메시지가모두처리되도록보장하는기능제공하며, 스파우트에서생성된튜플마다이튜플을최상위노드로하는튜플트리를생성하고볼트가이튜플을처리하면서생기는튜플을이튜플트리에하위노드로덧붙임 - Storm은이튜플트리의모든노드를토폴로지당설정된시간안에처리했는지혹은볼트가명시적으로실패메시지를보내이튜플의처리에실패했는지여부감지 - 스파우트에이사실을알려스파우트가해당튜플에대한처리를재시도할지말지를결정하도록함 - 이때설정된시간은 TOPOLOGY_MESSAGE_TIMEOUT_SECS 파라미터 ( 기본값은 30초 ) 로변경가능 * 튜플트리참조 : http://storm.apache.org/releases/1.0.6/guaranteeing-message-processing.html >
- 23-6. 활용예제 세부목차 6.1 샘플프로그램테스트 6.2 샘플프로그램설명
- 24-6. 활용예제 6.1 샘플프로그램테스트 샘플프로그램 - # cd /home/tuser/apache-storm-1.2.2/examples/storm-starter - # mvn clean install DskipTests=true - # mvn package - # storm jar target/storm-starter-1.2.2.jar org.apache.storm.starter.exclamationtopology
- 25-6. 활용예제 6.2 샘플프로그램설명 (1/8) ExclamationTopology 를 Topology 에배포중 토폴로지의이름을클릭하면토폴로지의상태정보를확인가능
- 26-6. 활용예제 6.2 샘플프로그램설명 (2/8) Topology Summary - Name : 토폴로지가배포되었을때토폴로지에부여된이름 - Id : 토폴로지가시작될때마다토폴로지에부여되는고유 ID - Status : 상태는 active, inactive, killed 또는 rebalancing 중하나일수있음 - Uptime : 토폴로지가배포된이후의시간 - Num workers : 현재토폴로지에서사용되는작업자수 - Num executors : 현재토폴로지에서사용되는 executor 수 - Num tasks : 현재토폴로지에서사용되는작업수 Supervisor summary - Id : 클러스터에조인할때 Supervisor에게부여되는고유식별자 - Host : 원격호스트에서보고한호스트이름 - Uptime : Supervisor 가클러스터에등록된시간 - Slots : 대상호스트의작업자수 - Used slots : 해당호스트에서사용된작업자수
- 27-6. 활용예제 6.2 샘플프로그램설명 (3/8) Window : 통계가적용되는과거기간 Emitted : 방출된튜플수 Transferred : 하나이상의볼트로전송된튜플수
- 28-6. 활용예제 6.2 샘플프로그램설명 (4/8) - Complete latency : 토폴로지에서튜플 트리 를완전히처리하는데걸리는평균시간 - Acked : 성공적으로처리된튜플 트리 수 - Failed : 작업이완료되기전에실패했거나시간초과된튜플 트리 의수 Spouts - Id : 토폴로지에서구성요소에할당한 ID - Executor : 스파우트에할당된실행프로그램의수 - s : 스파우트에할당된작업수 - Transferred : 전송된튜플의수
- 29-6. 활용예제 6.2 샘플프로그램설명 (5/8) Bolts - Id : 토폴로지에서구성요소에할당한 ID - Executors : 볼트에할당된실행프로그램의수 - s : 볼트에할당된작업수 - Emitted : 볼트에서배출된튜플수 - Transferred : 볼트에서전송된튜플수 - Execute latency : 튜플이 execute 메소드에서보낸평균시간 - Executed : 처리된들어오는튜플의수 - Process latency : 튜플이처음수신된후 ack하는데걸리는평균시간 - Acked : 볼트가허락한튜플수 - Failed : 볼트가실패한튜플수
- 30-6. 활용예제 6.2 샘플프로그램설명 (6/8) /examples/storm-starter/src/jvm/org/apache/storm/starter/exclamationtopology.java 를확인하면해당 Topology 에서는다음과같이 Bolt 정의 * declareoutputfields() : ExclamationBolt 가 word 라는하나의필드를내보내도록선언
- 31-6. 활용예제 6.2 샘플프로그램설명 (7/8) TopologyBuilder builder = new TopologyBuilder(); - Topology를 Builder를통해만듦 builder.setspout("word", new TestWordSpout(), 10); - TestWordSpout이라는 Spout Class에 word라는이름을붙여할당 builder.setbolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word"); - 위에서설정한 words spout을 shufflegrouping이라는방식으로 ExclamationBolt라는 Bolt Class로보내고이름은 exclaim1으로설정 builder.setbolt("exclaim2", new ExclamationBolt(), 2).shuffleGrouping("exclaim1"); - 위에서설정한 exclaim1을 shufflegrouping하여이번에도똑같이 ExclamationBolt로보내고그이름을 exclaim2으로설정
- 32-6. 활용예제 6.2 샘플프로그램설명 (8/8) prepare(): bolt로부터내보내지는튜플들에사용되는 OutputCollector라는형식을미리준비 excute(): bolt로들어온튜플을한개씩받아서 excute() 내의로직처리, ExclamationBolt에 excute() 내에서첫번째라인은받아온튜플에!!! 를붙여내보냄 (emit), 두번째라인은입력받은튜플 ack함, 이것은스톰의데이터손실을막기위한방법 declareoutputfields() : ExclamationBolt가 "word" 라는하나의필드를내보내도록선언
- 33-7. FAQ Q Apache Storm 에 SSL 이포함되어있습니까? A 포함되어있지않으며, Apache Storm에는보안 socket layer가없습니다. 법적또는관료적인문제를피하기위해 SSL은 Apache Storm에포함되어있지않습니다. Q Apache Kafka와 Apache Storm의차이점은무엇입니까? A 실제구현후에만전문가가이해할수있는두가지사소한차이가있습니다. Apache Kafka는많은양의데이터를처리할수있는분산된강력한메시징시스템으로한쪽끝에서다른쪽끝으로메시지를전달합니다. 동시에 Apache Storm은필요한실시간조작및데이터계산을수행하는분산실시간컴퓨팅시스템입니다. 요약하면 Apache Storm은 Kafka 모듈에서데이터를가져와서필요한조작을수행합니다.
- 34-8. 용어정리 용어튜플 (Tuple) 스트림 (Stream) 스파우트 (Spout) 볼트 (Bolt) 님버스 (Nimbus) 수퍼바이저 (Supervisor) CLI 설명 실시간으로생성되어전달되는데이터구조체 튜플들은비동기적으로이것을처리하는로봇에게던져지는데이튜플의흐름 Stream 의데이터소스, 하나의 Spout 은하나이상의 Stream 을발생시킬수있으며, Kestrel, RabbitMQ, Kafka 등을통해외부로부터데이터를받아오는역할 튜플들의스트림을전달받아이를처리하는로봇 데몬이마스터노드역할 Graphical User Interface 실제적으로워커프로세스의시작과종료, 실행상태모니터링등을수행
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.