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. [转] ServletContext 与application的异同

    相同:其实servletContext和application 是一样的,就相当于一个类创建了两个不同名称的变量.在 servlet中ServletContext就是application对象.大家只 ...

  2. [转]oracle学习入门系列之五内存结构、数据库结构、进程

    原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...

  3. puppet的配置

    1时间问题 agent与master端务必要保持时间的一致性,最好使用ntp服务 检查ntp服务是否安装 [root@master-elk ~]# rpm -qa|grep ntp ntpdate-. ...

  4. ES6新特性:Function函数扩展, 扩展到看不懂

    本文所有Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 函数的默认值: 如果有参数 ,那就用参数, 如果没有参数, 那就用默认的参数: aj ...

  5. 95C

    跑dijiestra每个点的最短路径 #include<iostream> #include<Vector> #include<cstring> #include& ...

  6. Maven异常Type Project configuration is not up-to-date with pom.xml. Run Maven->Update Project or use Quick Fix

    eclipse maven错误“Project configuration is not up-to-date with pom.xml. Run proje” 导入maven工程后,出现如下错误: ...

  7. java.lang.Exception: No runnable methods

    java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanc ...

  8. iOS 蓝牙开发(四)BabyBluetooth蓝牙库介绍(转)

    转载自:http://www.cocoachina.com/ios/20151106/14072.html 原文作者:刘彦玮 BabyBluetooth 是一个最简单易用的蓝牙库,基于CoreBlue ...

  9. ueditor的优酷插件模式开发,目前开发了腾讯视频转换插件

    项目相关地址 源码:https://github.com/easonjim/ueditor_plugin bug提交:https://github.com/easonjim/ueditor_plugi ...

  10. DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞的利用方式进行简单的概括 . 这个漏洞的利用前提是需要登录到后台进行操作 ...