storm begins

21
Storm Begins Springloops@지메일.

Upload: sungmin-oh

Post on 23-Jun-2015

922 views

Category:

Technology


0 download

DESCRIPTION

storm 에 대한 간단한 정리..

TRANSCRIPT

Page 1: Storm begins

Storm����������� ������������������  Begins

Springloops@지메일.컴

Page 2: Storm begins

What����������� ������������������  is����������� ������������������  Storm?

-����������� ������������������  data����������� ������������������  stream����������� ������������������  처리����������� ������������������  시스템����������� ������������������  -����������� ������������������  distributed����������� ������������������  -����������� ������������������  reliable����������� ������������������  -����������� ������������������  fault-tolerant

Page 3: Storm begins

What����������� ������������������  is����������� ������������������  Storm?특정된����������� ������������������  처리����������� ������������������  작업을����������� ������������������  담당하는����������� ������������������  ����������� ������������������  다양한����������� ������������������  component를����������� ������������������  엮어����������� ������������������  하나의����������� ������������������  잡을����������� ������������������  처리����������� ������������������  !

-����������� ������������������  데이터의����������� ������������������  입력����������� ������������������  Component를����������� ������������������  Spout라����������� ������������������  부르고..����������� ������������������  -����������� ������������������  데이터����������� ������������������  처리����������� ������������������  component를����������� ������������������  Bolt라고����������� ������������������  부르고..����������� ������������������  -����������� ������������������  Spout����������� ������������������  와����������� ������������������  Bolt를����������� ������������������  엮은����������� ������������������  하나의����������� ������������������  잡을����������� ������������������  Topology라고..

Page 4: Storm begins

Storm����������� ������������������  Cluster

image����������� ������������������  참조����������� ������������������  :����������� ������������������  ����������� ������������������  https://github.com/nathanmarz/storm/wiki/images/storm-cluster.png

Page 5: Storm begins

Nimbus

-����������� ������������������  Cluster의����������� ������������������  Master����������� ������������������  Node����������� ������������������  -����������� ������������������  source����������� ������������������  code����������� ������������������  의����������� ������������������  배포를����������� ������������������  책임����������� ������������������  -����������� ������������������  각����������� ������������������  Worker����������� ������������������  Node에����������� ������������������  작업을����������� ������������������  할당����������� ������������������  -����������� ������������������  오류����������� ������������������  핸들링

Page 6: Storm begins

Supervisor

-����������� ������������������  Cluster의����������� ������������������  Worker����������� ������������������  Node����������� ������������������  -����������� ������������������  할당된����������� ������������������  작업을����������� ������������������  주시����������� ������������������  -����������� ������������������  Nimbus의����������� ������������������  요청에����������� ������������������  따라����������� ������������������  작업을����������� ������������������  실행/중지

Page 7: Storm begins

Storm의����������� ������������������  세가지����������� ������������������  추상화

-����������� ������������������  Topology����������� ������������������  -����������� ������������������  Spout����������� ������������������  -����������� ������������������  Bolt

Page 8: Storm begins

Topology

-����������� ������������������  Storm����������� ������������������  이����������� ������������������  수행해야할����������� ������������������  작업����������� ������������������  -����������� ������������������  Spout/Bolt의����������� ������������������  데이터����������� ������������������  흐름의����������� ������������������  관계를����������� ������������������  지정����������� ������������������  -����������� ������������������  토폴로지의����������� ������������������  각����������� ������������������  노드(Spout/Bolt)는����������� ������������������  작업의����������� ������������������  로직����������� ������������������  처리����������� ������������������  -����������� ������������������  토폴로지는����������� ������������������  배포가����������� ������������������  되면����������� ������������������  실행된다.

Page 9: Storm begins

Spout

-����������� ������������������  계산해야할����������� ������������������  소스의����������� ������������������  ����������� ������������������  스트림을����������� ������������������  읽음����������� ������������������  -����������� ������������������  일반적으로����������� ������������������  큐에서����������� ������������������  데이터를����������� ������������������  읽음����������� ������������������  -����������� ������������������  BUt����������� ������������������  데이터에����������� ������������������  대한����������� ������������������  제약은����������� ������������������  없다.����������� ������������������  -����������� ������������������  대부분의����������� ������������������  큐에����������� ������������������  대한����������� ������������������  Spout는����������� ������������������  이미����������� ������������������  구현����������� ������������������  되어����������� ������������������  있다.����������� ������������������  ����������� ������������������  ����������� ������������������  (ex:����������� ������������������  AMQPSpout..)

Page 10: Storm begins

Bolt-����������� ������������������  입력����������� ������������������  스트림의����������� ������������������  처리����������� ������������������  -����������� ������������������  새로운����������� ������������������  데이터����������� ������������������  출력����������� ������������������  -����������� ������������������  연산����������� ������������������  처리는����������� ������������������  대부분����������� ������������������  Bolt에서����������� ������������������  수행����������� ������������������  -����������� ������������������  functions,����������� ������������������  filters,����������� ������������������  streaming����������� ������������������  joins����������� ������������������  ����������� ������������������  ����������� ������������������  ,����������� ������������������  streaming����������� ������������������  aggregations����������� ������������������  ����������� ������������������  ����������� ������������������  ,����������� ������������������  talking����������� ������������������  to����������� ������������������  databases

Page 11: Storm begins

Grouping

-����������� ������������������  Spout/Bolt의����������� ������������������  관계를����������� ������������������  지정����������� ������������������  -����������� ������������������  Shuffle����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  Bolt의����������� ������������������  Task����������� ������������������  중����������� ������������������  하나의����������� ������������������  Task로����������� ������������������  랜덤하게����������� ������������������  전송����������� ������������������  -����������� ������������������  Fields����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  동일한����������� ������������������  Field����������� ������������������  값을����������� ������������������  가지고����������� ������������������  있는����������� ������������������  것은����������� ������������������  동일한����������� ������������������  Task로����������� ������������������  전송����������� ������������������  

Page 12: Storm begins

Grouping

-����������� ������������������  All����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  그룹핑된����������� ������������������  Bolt의����������� ������������������  모든����������� ������������������  Task로����������� ������������������  전송����������� ������������������  

-����������� ������������������  Direct����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  정의한����������� ������������������  특정����������� ������������������  Task로����������� ������������������  전송����������� ������������������  

-����������� ������������������  Global����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  그룹핑된����������� ������������������  Bolt의����������� ������������������  하나의����������� ������������������  Task로����������� ������������������  전송����������� ������������������  

-����������� ������������������  Custom����������� ������������������  Grouping����������� ������������������  ����������� ������������������  ����������� ������������������  사용자����������� ������������������  정의����������� ������������������  Grouping

Page 13: Storm begins

Worker����������� ������������������  Process

Worker����������� ������������������  ⊂����������� ������������������  Topology����������� ������������������  Worker����������� ������������������  =����������� ������������������  Process����������� ������������������  Worker����������� ������������������  =����������� ������������������  JVM

하나����������� ������������������  이상의����������� ������������������  Worker����������� ������������������  Process로����������� ������������������  Topology를����������� ������������������  실행����������� ������������������  Worker����������� ������������������  Process는����������� ������������������  Executor를����������� ������������������  실행

Page 14: Storm begins

Worker����������� ������������������  Process

하나����������� ������������������  이상의����������� ������������������  Worker����������� ������������������  Process로����������� ������������������  Topology를����������� ������������������  실행����������� ������������������  Worker����������� ������������������  Process는����������� ������������������  Executor를����������� ������������������  실행

Page 15: Storm begins

Executor

현재����������� ������������������  Storm����������� ������������������  v0.8.2,����������� ������������������  ����������� ������������������  v0.8����������� ������������������  부터����������� ������������������  생김.����������� ������������������  많이����������� ������������������  혼란스러움����������� ������������������  말도����������� ������������������  많음����������� ������������������  Storm����������� ������������������  <����������� ������������������  0.8����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  :����������� ������������������  worker����������� ������������������  =����������� ������������������  process,����������� ������������������  task����������� ������������������  =����������� ������������������  thread����������� ������������������  Storm����������� ������������������  >=����������� ������������������  0.8����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  :����������� ������������������  worker����������� ������������������  =����������� ������������������  process,����������� ������������������  executor����������� ������������������  =����������� ������������������  thread,����������� ������������������  tasks����������� ������������������  =����������� ������������������  spout/bolt����������� ������������������  의����������� ������������������  instances����������� ������������������  !Task의����������� ������������������  갯수는����������� ������������������  고정이다.����������� ������������������  기존����������� ������������������  모델에서는����������� ������������������  Task가����������� ������������������  Thread����������� ������������������  였기에����������� ������������������  Topology의����������� ������������������  재시작����������� ������������������  없이����������� ������������������  병렬성을����������� ������������������  높일����������� ������������������  수����������� ������������������  없었다.����������� ������������������  새로운����������� ������������������  모델에서는����������� ������������������  Task를����������� ������������������  instance로����������� ������������������  가져가고����������� ������������������  Task를����������� ������������������  실행하는����������� ������������������  executor를����������� ������������������  두어����������� ������������������  executor의����������� ������������������  수를����������� ������������������  늘려����������� ������������������  Task의����������� ������������������  병렬성을����������� ������������������  높일����������� ������������������  수����������� ������������������  있다����������� ������������������  라고......����������� ������������������  !storm����������� ������������������  rebalance����������� ������������������  명령어로����������� ������������������  Worker����������� ������������������  /����������� ������������������  executor의����������� ������������������  수를����������� ������������������  조정����������� ������������������  할����������� ������������������  수����������� ������������������  있다.

Page 16: Storm begins

ExecutorThread����������� ������������������  다!����������� ������������������  Worker에����������� ������������������  의해����������� ������������������  생성된다!����������� ������������������  하나����������� ������������������  이상의����������� ������������������  tasks를����������� ������������������  실행할����������� ������������������  수����������� ������������������  있다!����������� ������������������  Task를����������� ������������������  순차적으로����������� ������������������  실행한다!����������� ������������������  실행만����������� ������������������  한다.����������� ������������������  Task는����������� ������������������  각자의����������� ������������������  Thread에서����������� ������������������  실행한다!����������� ������������������  따라서����������� ������������������  Thread-Safe하다.����������� ������������������  ����������� ������������������  !

Thread����������� ������������������  safety����������� ������������������  of����������� ������������������  bolts����������� ������������������  :����������� ������������������  http://goo.gl/ew6xjX

Page 17: Storm begins

Task

-����������� ������������������  실제����������� ������������������  작업����������� ������������������  처리를����������� ������������������  담당한다.����������� ������������������  -����������� ������������������  source����������� ������������������  code로����������� ������������������  구현한����������� ������������������  Spout/Bolt가����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  Task로����������� ������������������  클러스터를����������� ������������������  통해����������� ������������������  실행����������� ������������������  -����������� ������������������  Task의����������� ������������������  수는����������� ������������������  변경할����������� ������������������  수����������� ������������������  없다.����������� ������������������  -����������� ������������������  #Executor(threads)����������� ������������������  수����������� ������������������  <=����������� ������������������  #tasks����������� ������������������  수����������� ������������������  -����������� ������������������  Default����������� ������������������  Executer����������� ������������������  수����������� ������������������  :����������� ������������������  tasks����������� ������������������  수����������� ������������������  =����������� ������������������  1����������� ������������������  :����������� ������������������  1

Page 18: Storm begins

Worker-Executor-TaskWorker Process

Executor

image����������� ������������������  참조����������� ������������������  :����������� ������������������  ����������� ������������������  http://blog.linezing.com/wp-content/uploads/2013/01/3.JPG.png

Page 19: Storm begins

Storm����������� ������������������  Internal����������� ������������������  Message

image����������� ������������������  참조����������� ������������������  http://www.michael-noll.com/blog/uploads/storm-internal-message-queues.png

Page 20: Storm begins

Demo

Page 21: Storm begins

http://www.michael-noll.com/blog/2013/06/21/understanding-storm-internal-message-buffers/����������� ������������������  

https://github.com/nathanmarz/storm/wiki/Tutorial����������� ������������������  http://www.michael-noll.com/blog/2012/10/16/����������� ������������������  

https://github.com/nathanmarz/storm/wiki/Concepts����������� ������������������  understanding-the-parallelism-of-a-storm-topology/����������� ������������������  https://github.com/nathanmarz/storm/wiki/Concepts

참고