0 JStorm概述

JStorm是一个分布式的实时计算引擎。从应用的角度,JStorm应用是一种遵守某种编程规范的分布式应用;从系统角度, JStorm是一套类似MapReduce的调度系统; 从数据的角度,JStorm是一套基于流水线的消息处理机制。

详情见:JStorm概叙及应用场景

1 JStorm集群组件

Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)。其分别对应的角色如下:

    • 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,Nimbus的作用类似于Hadoop中JobTracker的角色。Nimbus负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。
    • 每个工作节点(Work Node)上运行一个被称为Supervisor的后台程序,Supervisor类似于Hadoop中的TaskTracker。Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。

Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。

Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群不在进程内保存状态,所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着你可以在任意时刻用kill -9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作,运行中的Topologies不会受到影响。

2 JStorm集群架构

2.1 架构

参考资料:https://github.com/alibaba/jstorm/wiki/JStorm%E6%9E%B6%E6%9E%84

2.2 相关术语

Nimbus

Supervisor、Worker(进程)、Task(线程)、Topology(Spout、Bolt)、Tupple

详情可参看:5分钟了解JStorm基础概念

3 JStorm集群安装

3.1 安装Zookeeper集群

Zookeeper的安装和使用——MarchOn

3.2 安装JStorm

需要在各节点上安装JStorm,这里以jstorm-0.9.6.3为例,下载并解压,进入jstorm-0.9.6.3

3.2.1 配置环境变量

编辑/etc/profile,加入如下内容:

export JAVA_HOME=/usr/jdk/jdk1..0_45
export PATH=$JAVA_HOME/bin:$PATH
export JSTORM_HOME=/usr/local/jstorm/jstorm-0.9.6.3/
export PATH=$JSTORM_HOME/bin:$PATH//将JSTORM加入构建路径是为了方便提交拓扑,也可以不配置而是直接在bin下执行 storm 命令(还有个bin/start.sh,不过该命令运行时有问题,所以没用之)

接着执行: source /etc/profile ,上述环境变量对机器上的所有用户有效

3.2.2 修改conf/storm.yaml

  1. storm.zookeeper.servers: JStorm集群所用的Zookeeper集群的地址(不要包含端口,否则会启动失败。端口通过storm.zookeeper.port配置)

     storm.zookeeper.servers:
    - "192.168.6.131"
    - "192.168.6.132"
    - "192.168.6.133"
  2. storm.zookeeper.port:JStorm所用的Zookeeper的端口,默认为2181。如果不使用默认端口,可以配此项
  3. storm.zookeeper.root: JStorm在Zookeeper中的根目录,默认为“/jstorm”(不用事先在Zookeeper创建)。当多个JStorm集群共享一个Zookeeper时,需要设置不同值
  4. nimbus.host: Nimbus节点的地址,以便下载Topologies的jars、confs等文件。//也可不指定,启动nimbus节点后由于与Zookeeper交互会知道是哪个
  5. storm.local.dir: Nimbus和Supervisor进程用于存储少量状态数据,如jars、confs等的本地磁盘目录,需要保证JStorm程序对该目录有写权限
    storm.local.dir: "%JSTORM_HOME%/../jstorm_data"
  6. java.library.path: Zeromq 和java zeromq library的安装目录,默认"/usr/local/lib:/opt/local/lib:/usr/lib",默认即可
  7. supervisor.slots.ports:配置该Supervisor节点运行的Woker能使用哪些端口,每个worker独占一端口用于接收消息,因此也定义了可运行的Woker数量
     supervisor.slots.ports:
    -
    -
    -
    -
    -
    -
    -
    -

3.2.3 启动/停止

和Zookeeper一样,JStorm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么JStorm不在进程内保存状态的原因,即使Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。

确定哪些节点要作为Nimbus节点,哪些作为Supervisors节点(一个节点可以同时是Nimbus、Supervisor节点),分别启动:

  1. 守护进程方式启动Nimbus: bin/jstorm nimbus > /dev/null >& & ,检查logs/nimbus.log看有无错误
  2. 守护进程方式启动Supervisor:   bin/jstorm supervisor > /dev/null >& & , 检查logs/supervisor.log看有无错误
  3. 停止:可以直接kill Nimbus和Supervisor。(如果有拓扑正在运行则会有worker进程,先kill掉拓扑这样woker进程就会结束)

4 提交拓扑

在一个节点执行以下命令:[注意配置JSTorm环境变量以便于执行jstorm命令]

  1. 提交拓扑命令: jstorm jar jar程序 拓扑入口 拓扑名
  2. kill 拓扑命令: jstorm kill 拓扑名 秒数

(拓扑入口一般就是main函数所在类;拓扑名是自取的名字;未指定秒数的话会完成所有清除工作后再结束)

其他jstorm命令可以参见:Command-line-client

5 JStorm UI

JStorm UI用来监控整个JStorm集群的节点及拓扑运行情况。它就是一个war包,因此可以放在任何有Tomcat的机器上。安装方法很简单,如下:

    1. 把storm.yaml复制到tomcat所在机器的~/.jstorm/storm.yaml。(JStorm UI程序启动时读该配置文件。通过配置storm.yaml的ui.clusters可以使一个jstorm ui管理多个JStorm集群
    2. 将安装包置于Tomcat:把$JSTORM_HOME/jstorm-ui-0.9.6.3.war复制到webapps下并mv ROOT ROOT.old;ln -s jstorm-ui-0.9.6.3 ROOT

运行Tomcat后就可以在浏览器访问JStorm UI了,如http://192.168.6.134:8080/,如:(图中的Ports就跟上面说的supervisor.slots.ports的数量有关)

5 参考资料

  1. http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html(JStorm安装)
  2. http://pan.baidu.com/s/1bHamHg(JStorm集群安装文档)
  3. http://blog.csdn.net/xiaolang85/article/details/38492277(JStorm常见问题及解决方案)
  4. https://github.com/techdocscn/storm/blob/master/source/documentation/Command-line-client.md(JStorm命令)

JStorm集群的安装和使用的更多相关文章

  1. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  2. JStorm集群的部署

    JStorm是一个类似Hadoop MapReduce的系统,不同的是JStorm是一套基于流水线的消息处理机制,是阿里基于Storm优化的版本,和Storm一样是一个分布式实时计算的系统,从开发角度 ...

  3. jstorm集群部署

    jstorm集群部署下载 Install JStorm Take jstorm-0.9.6.zip as an example unzip jstorm-0.9.6.1.zip vi ~/.bashr ...

  4. Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!)

    Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装 ...

  5. Hadoop集群搭建安装过程(二)(图文详解---尽情点击!!!)

    Hadoop集群搭建安装过程(二)(配置SSH免密登录)(图文详解---尽情点击!!!) 一.配置ssh无密码访问 ®生成公钥密钥对 1.在每个节点上分别执行: ssh-keygen -t rsa(一 ...

  6. Storm集群的安装配置

    Storm集群的安装分为以下几步: 1.首先保证Zookeeper集群服务的正常运行以及必要组件的正确安装 2.释放压缩包 3.修改storm.yaml添加集群配置信息 4.使用storm脚本启动相应 ...

  7. Ganglia监控Hadoop集群的安装部署[转]

    Ganglia监控Hadoop集群的安装部署 一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机 器:192.168.52 ...

  8. ElasticSearch和Kibana 5.X集群的安装

    ElasticSearch和Kibana 5.X集群的安装 1.准备工作 1.1.下载安装包 1.2.系统的准备 2.ElasticSearch集群的安装 2.1.修改 config/elastics ...

  9. Redis 集群的安装

    Redis 集群介绍.特性.规范等Redis 集群的安装(Redis3.0.3 + CentOS6.6_x64)要让 Redis3.0 集群正常工作至少需要 3 个 Master 节点,要想实现高可用 ...

随机推荐

  1. PHP与MySQL

    这周学习了PHP与MySQL的搭接下面来给大家分享一下: 1.账号注册,论坛发帖... 思路:通过form表单提交到PHP页面,PHP页面往MySQL中插入数据: 2.账号登陆 思路:form提交数据 ...

  2. Nginx之负载均衡服务器揭秘

    Nginx代理服务器, 一次性代理多台后端机器, 利用负载算法, 决定将当前请求传递给某台服务器执行. 有哪些后台服务器?例如微软的IIS,Apache,Nginx 负载算法是什么? 加权轮询. ng ...

  3. VS2015中GLAUX库的链接问题

    最近学习OpenGL,照着例子写了个程序,用到了GLAUX库. #include <gl\glaux.h> #pragma comment(lib, "glaux") ...

  4. Eclipse导入 appcompat,design兼容包

    从Android studio推出1.0正式版后,就一直在as上开发项目,但是最近要测试一个项目,是eclipse结构,导入as后,是各种报错信息,决定改成eclipse. 其中项目中用到了ppcom ...

  5. Android 横屏不让输入法全屏显示

    记录学习之用 查找资料参考记录的 在源码里进行修改.  frameworks/base/core/Java/Android/inputmethodservice/InputMethodService. ...

  6. 扩展easyUI tab控件,添加加载遮罩效果

    项目里要用HighChart显示图表,如果返回的数量量太多,生成图表是一个很耗时的过程.tab控件又没有显示遮罩的设置(至少本菜是没有找到), Google了一下,根据另一个兄台写的方法,拿来改造了一 ...

  7. Linux 查看文件内容

    cat   由第一行开始显示档案内容 格式: cat [选项] [文件]... -A, --show-all 等价于 -vET -b, -- 对非空输出行编号 -e 等价于 -vE -E, --在每行 ...

  8. 利用pre平台实现iOS应用程序自动更新

    // // AppDelegate.m // PreAutoUpdateDemo // // Created by mac on 15/12/18. // Copyright © 2015年 mac. ...

  9. Hive 窗口函数、分析函数

    1 分析函数:用于等级.百分点.n分片等 Ntile 是Hive很强大的一个分析函数. 可以看成是:它把有序的数据集合 平均分配 到 指定的数量(num)个桶中, 将桶号分配给每一行.如果不能平均分配 ...

  10. Ubuntu下C/C++man手册安装方法及使用方法

    C++在线文档: http://www.cplusplus.com/reference/ https://msdn.microsoft.com/zh-cn/library/aa187916.aspx  ...