zoukankan      html  css  js  c++  java
  • 4、Storm启动流程分析 ---没用

    Storm启动流程分析


    ------------程序员client------------------

    1、客户端运行storm nimbus时,会调用storm的python脚本,该脚本中为每个命令编写一个方法,每个方法都可以生成一条相应的java命令。
    命令格式如下:java -server xxxx.ClassName -args
    nimbus---> Running: /export/servers/jdk/bin/java -server backtype.storm.daemon.nimbus
    supervisor---> Running: /export/servers/jdk/bin/java -server backtype.storm.daemon.supervisor

    --------------nimbus---------------------

    2、nibums启动之后,接受客户端提交任务
    命令格式:storm jar xxx.jar xxx驱动类 参数
    Running: /export/servers/jdk/bin/java -client -Dstorm.jar=/export/servers/storm/examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount-28

    该命令会执行 storm-starter-topologies-0.9.6.jar 中的storm-starter-topologies-0.9.6.jar的main方法,main方法中会执行以下代码:
    StormSubmitter.submitTopology("mywordcount",config,topologyBuilder.createTopology());

    topologyBuilder.createTopology(),会将程序猿编写的spout对象和bolt对象进行序列化。

    会将用户的jar上传到 nimbus物理节点的 /export/data/storm/workdir/nimbus/inbox目录下。并且改名,改名的规则是添加了一个UUID字符串。

    在nimbus物理节点的 /export/data/storm/workdir/nimbus/stormdist目录下。有当前正在运行的topology的jar包和配置文件,序列化对象文件。


    3、nimbus接受到任务之后,会将任务进行分配,分配会产生一个assignment对象,该对象会保存到zk中,目录是/storm/assignments ,该目录只保存正在运行的topology任务。

    --------supervisor------------------

    4、supervisor通过watch机制,感知到nimbus在zk上的任务分配信息,从zk上拉取任务信息,分辨出属于自己任务。
    ResourceWorkerSlot[hostname=192.168.1.106,memSize=0,cpu=0,tasks=[1, 2, 3, 4, 5, 6, 7, 8],jvm=<null>,nodeId=61ce10a7-1e78-4c47-9fb3-c21f43a331ba,port=6900]

    5、supervisor 根据自己的任务信息,启动自己的worker,并分配一个端口。
    '/export/servers/jdk/bin/java' '-server' '-Xmx768m' export/data/storm/workdir/supervisor/stormdist/wordcount1-3-1461683066/stormjar.jar' 'backtype.storm.daemon.worker' 'wordcount1-3-1461683066' 'a69bb8fc-e08e-4d55-b51f-e539b066f90b' '6701' '9fac2805-7d2b-4e40-aabc-1c85c9856d64'


    ---------worker----------------------

    6、worker启动之后,连接zk,拉取任务
    ResourceWorkerSlot[hostname=192.168.1.106,memSize=0,cpu=0,tasks=[1, 2, 3, 4, 5, 6, 7, 8],jvm=<null>,nodeId=61ce10a7-1e78-4c47-9fb3-c21f43a331ba,port=6900]

    假设任务信息:
    1--->spout---type:spout
    2--->bolt ---type:bolt
    3--->acker---type:bolt

    得到对象有几种方式? new ClassName 创建对象、class.forName 反射对象、clone 克隆对象、序列化反序列化

    worker通过反序列化,得到程序员自己定义的spout和bolt对象。

    7、worker根据任务类型,分别执行spout任务或者bolt任务。
    spout的声明周期是:open、nextTuple、outPutFiled
    bolt的生命周期是:prepare、execute(tuple)、outPutFiled




























     

  • 相关阅读:
    改 hadoop ssh 端口
    java.lang.OutOfMemoryError: Java heap space 解决方法
    LucidGaze for Solr 搜索监测工具
    hadoop 文件浏览器
    CF1427C Solution
    技术经理必备的六个好习惯
    今天申请博客
    同志们都走了!!
    好笑
    今天看了《浅谈多态》这篇文章
  • 原文地址:https://www.cnblogs.com/shan13936/p/13838415.html
Copyright © 2011-2022 走看看