1.Storm命令

  在Linux中观直接输入Storm,不带任何参数信息,可以查看Storm命令。

  参考这里

  1.  activate  

  激活指定的拓扑Spout。语法:storm activate topology-name

  2. classpath

  打印出Storm客户端运行命令时使用的类路径(classpath),语法:storm classpath

  3. deactivate

  禁用指定的拓扑Spout。语法:storm deactivate topology-name

  4. dev-zookeeper

  以dev.zookeeper.path配置的值作为本地目录,以storm.zookeeper.port配置的值作为端口,启动一个 新的ZooKeeper服务,仅用来开发/测试。语法:storm dev-zookeeper

  5. drpc

  启动一个DRPC守护进程。语法:storm drpc  该命令应该使用daemontools或者monit工具监控运行。

  6.help

  storm help <command>

  7. jar

  storm jar topology-jar-path class ...
  把Storm的jar文件和“~/.storm”的配置放到类路径(classpath)中,以便当拓扑提交时,               StormSubmitter会上传topology-jar-path的jar文件。
 

常用命令:

提交Topologies到远程集群机器
  命令格式:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】

  样例:storm jar /storm-starter.jar storm.starter.WordCountTopology wordcountTop

  #提交storm-starter.jar到远程集群,并启动wordcountTop拓扑。
停止Topologies
  命令格式:storm kill 【拓扑名称】
  样例:storm kill wordcountTop
  #杀掉wordcountTop拓扑。
  执行kill命令时可以通过-w [等待秒数]指定拓扑停用以后的等待时间。
启动nimbus后台程序
  命令格式:storm nimbus
启动supervisor后台程序
  命令格式:storm supervisor
启动drpc服务
  命令格式:storm drpc
启动ui服务
  命令格式:storm ui
启动REPL
  REPL — read-evaluate-print-loop。
  虽然clojure可以作为一种脚本语言内嵌在java里面,但是它的首选编程方式是使用REPL,这是一个简单的命令行接口,使用它你可以输入你的命令,执行,然后查看结果, 你可以以下面这个命令来启动REPL:
  命令格式:storm repl
打印本地配置
  命令格式:storm localconfvalue 【配置参数关键字】
  举例:storm localconfvalue storm.zookeeper.servers
  #根据指定参数打印本地配置的值。
打印远程配置
  命令格式:storm remoteconfvalue 【配置参数关键字】
  举例:storm remoteconfvalue storm.zookeeper.servers
  #根据指定参数打印远程配置的值。
执行Shell脚本

  命令格式:storm shell resourcesdir command args

打印CLASSPATH
  命令格式:storm classpath
平衡拓扑
  storm rebalance topology-name
  再平衡使你重分配集群任务。这是个很强大的命令。比如,你向一个运行中的集群增加了节点。再平衡命令将会停用拓扑,然后在相应超时时间之后重分配工人,并重启拓扑。
 

2.定义拓扑

Topology和Nimbus        
    Topology是storm的核心理念,将spout和bolt组织成一个topology,运行在storm集群里,完成实时分析和计算的任务。这里我主要想介绍下topology部署到storm集群的大概过程。提交一个topology任务到Storm集群是通过StormSubmitter.submitTopology方法提交:

StormSubmitter.submitTopology(name, conf, builder.createTopology());

我们将topology打成jar包后,利用bin/storm这个python脚本,执行如下命令:

bin/storm jar xxxx.jar com.taobao.MyTopology args

将jar包提交给storm集群。storm脚本会启动JVM执行Topology的main方法,执行submitTopology的过程。而submitTopology会将jar文件上传到nimbus,上传是通过socket传输。

 
topology任务的分配过程(zookeeper路径说明忽略root):
  1.在zookeeper上创建/taskheartbeats/{storm id} 路径,用于任务的心跳检测。storm对zookeeper的一个重要应用就是利用zk的临时节点做存活检测。task将定时刷新节点的时间戳,然后nimbus会检测这个时间戳是否超过timeout设置。
  2.从topology中获取bolts,spouts设置的并行数目以及全局配置的最大并行数,然后产生task id列表,如[1 2 3 4]
  3.在zookeeper上创建/tasks/{strom id}/{task id}路径,并存储task信息
  4.开始分配任务(内部称为assignment), 具体步骤:
     (1)从zk上获得已有的assignment(新的toplogy当然没有了)
     (2)查找所有可用的slot,所谓slot就是可用的worker,在所有supervisor上配置的多个worker的端口。
     (3)将任务均匀地分配给可用的worker,这里有两种情况:
     (a)task数目比worker多,例如task是[1 2 3 4],可用的slot只有[host1:port1 host2:port1],那么最终是这样分配

    {1: [host1:port1] 2 : [host2:port1]
           3 : [host1:port1] 4 : [host2:port1]}

  ,可以看到任务平均地分配在两个worker上。
(b)如果task数目比worker少,例如task是[1 2],而worker有[host1:port1 host1:port2 host2:port1 host2:port2],那么首先会将woker排序,将不同host间隔排列,保证task不会全部分配到同一个worker上,也就是将worker排列成

[host1:port1 host2:port1 host1:port2 host2:port2]

,然后分配任务为

{1: host1:port1 , 2 : host2:port2}

(4)记录启动时间
(5)判断现有的assignment是否跟重新分配的assignment相同,如果相同,不需要变更,否则更新assignment到zookeeper的/assignments/{storm id}上。
5.启动topology,所谓启动,只是将zookeeper上/storms/{storm id}对应的数据里的active设置为true。
6.nimbus会检查task的心跳,如果发现task心跳超过超时时间,那么会重新跳到第4步做re-assignment。

 
  
 

Storm实践的更多相关文章

  1. Storm实践(一):基础知识

    storm简介 Storm是一个分布式实时流式计算平台,支持水平扩展,通过追加机器就能提供并发数进而提高处理能力:同时具备自动容错机制,能自动处理进程.机器.网络等异常. 它可以很方便地对流式数据进行 ...

  2. Storm实践(二):集群搭建

    集群规划 角色 IP hostname nimbus 192.168.100.101 dda supervisor 192.168.100.102 ddb supervisor 192.168.100 ...

  3. Kafka+Storm+HDFS整合实践

    在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统计分析,但是对于实时的需求Hive就不合适了.实时应用场景可以使用Storm,它是一 ...

  4. Zookeeper+Kafka+Storm+HDFS实践

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. Hadoop一般用在离线的分析计算中,而storm区别于hadoop,用在实时的流式计算中,被广泛用来 ...

  5. STORM在线业务实践-集群空闲CPU飙高问题排查

    源:http://daiwa.ninja/index.php/2015/07/18/storm-cpu-overload/ 2015-07-18AUTHORDAIWA STORM在线业务实践-集群空闲 ...

  6. [转载] Kafka+Storm+HDFS整合实践

    转载自http://www.tuicool.com/articles/NzyqAn 在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统 ...

  7. Storm实时计算:流操作入门编程实践

    转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践   Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...

  8. 基于Redis、Storm的实时数据查询实践

    通过算法小组给出的聚合文件,我们需要实现一种业务场景,通过用户的消费地点的商户ID与posId,查询出他所在的商圈,并通过商圈地点查询出与该区域的做活动的商户,并与之进行消息匹配,推送相应活动信息到用 ...

  9. Storm+HBase实时实践

    1.HBase Increment计数器 hbase counter的原理: read+count+write,正好完成,就是讲key的value读出,若存在,则完成累加,再写入,若不存在,则按&qu ...

随机推荐

  1. matlab文件读写处理实例(二)——textread批量读取文件

    问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\

  2. 浅谈TreeMap以及在java中的使用

    treemap结构是红黑树 1.先介绍一下平衡二叉树 其特点是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.也就是说该二叉树的任何一个子节点,其左右子树的高度 ...

  3. ubuntu网桥设置

    什么是桥接? 桥接(Bridging),是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程,工作在OSI的第二层.一般的交换机,网桥就有桥接作用. 一般的交换机,网桥就有桥接作用.就交换 ...

  4. javascript中this指向问题

    本文参考http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是JavaScript的一个关 ...

  5. centos7添加图像化桌面并设置中文

    我前面是使用的centos6.最近才最小化安装了一个centos7.4(最小化安装有很多命令都没有,所以不建议这样干).完了装了图形化界面和设置中文,感觉和centos6有些区别,所以记录一下过程. ...

  6. MUI 页面传值,因为用的是H5+ plus方法所以要在真机上才能测试出效果

    页面a.html <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  7. git修改目录名称

    同步代码 $ git pull origin master 修改某个目录名称 $ git mv doc docs 把doc目录修改为docs 提交至远程仓库 $ git push origin mas ...

  8. Go笔记-流程控制

    [if] if 是用于测试某个条件的语句,如果该条件(逻辑型或布尔型)成立,则会执行大括号内的代码,第一个大括号必须和if 或者else同行,否则非法 // 方式1 if condition { // ...

  9. JDBC学习笔记(三)

    获取数据库的元信息metadata,里面有数据库特性的描述信息,如是否支持事务,是否支持批处理等. Connection conn = DriverManager.getConnection(url, ...

  10. BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]

    传送门 题意: 染色图是无向完全图,且每条边可被染成k种颜色中的一种.两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同.问N个顶点,k种颜色,本质不同的染色图个数(模质数 ...