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. HSSF、XSSF和SXSSF区别以及Excel导出优化

    之前有写过运用POI的HSSF方式导出数据到Excel(见:springMVC中使用POI方式导出excel至客户端.服务器实例),但这种方式当数据量大到一定程度时容易出现内存溢出等问题. 首先,PO ...

  2. java判断网页的编码格式

    在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从header标签中获取Content-Type=#Charset:二.从meta标签中获取Content-Type=# ...

  3. CentOS 下开启PHP错误提示

    我也是傻逼,一直在找图片无法上传的原因,这么久了才意识到自己没有在Linux系统的服务器下开启错误提示. 正文 默认模式下的apache是没有开启错误语法提示的,修改php.ini文件.不同的安装,p ...

  4. 解决C#编译中"csc不是内部或外部命令"的问题

    安装完 VisualStudio 编译环境后,是不能用命令行直接编译写好的csc文件的,如果不配置环境变量,在命令提示符(cmd)中编译扩展名为cs的文件,会出现错误提示"csc不是内部或外 ...

  5. Linux防止ARP攻击的一些方法

    方法一,最常用的绑定网关 一般服务器的网关是不会变动的,且vps也适用. 一.查看当前网关 [root@local@xiaohuai ~]# arp -a ? (218.65.22.122) at 8 ...

  6. Java解决CSRF问题

    项目地址: https://github.com/morethink/web-security-csrf CSRF是什么? CSRF(Cross-site request forgery),中文名称: ...

  7. JAVA设计模式---迭代器模式

    1.定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 2.实例:1)需求: 菜单(煎饼屋菜单.餐厅菜单和咖啡菜单)采用不同的集合存取(ArrayList,String[] ...

  8. 浅谈python模块的导入操作

    1.什么是模块 在Python中有一个概念叫做模块(module). 所谓模块,就是将代码量较大的程序分割成多个有组织的,彼此独立但双能互相交互的代码片段, 这些自我包含的有组织的代码段就是模块. 2 ...

  9. 基于 React + Webpack 的音乐相册项目(下)

    上一篇我们完成了音乐相册里面的播放图片的功能,这一篇主要完成的是音乐相册里面的音乐播放器功能.最终让我们基于 React 的音乐相册图文并茂.有声有色. 我们主要从以下几个部分来展开: 数据准备 进度 ...

  10. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

    本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...