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. Android 自定义Popupwindow 注意事项,手机和平板的区别

    首先自定义ppw是要继承Popupwindow 的 而要成功的显示出自定义的ppw就必须实现下面的三句代码 // 必要的三要素下面,不然popWind显示不出来 this.setContentView ...

  2. 【BZOJ 3879】SvT

    http://www.lydsy.com/JudgeOnline/problem.php?id=3879 SvT的中文是后缀虚树? 反正本蒟蒻不懂,还是$O(nlogn)$的后缀数组和单调栈维护来做, ...

  3. 三、基础功能模块,用户类别管理——锁、EF并发处理、领域服务、应用服务的划分

    在上一章节中,我们处理了MVC多级目录问题,参见<二.处理MVC多级目录问题——以ABP为基础架构的一个中等规模的OA开发日志>.从这章开始,我们将进入正式的开发过程.首先,我们要完成系统 ...

  4. CSS3动画属性之Animation

    首先定义一个动画规则: @keyframes mymove { from {top:0px;} to {top:200px;} } @-moz-keyframes mymove /* Firefox ...

  5. Fresco内存机制(Ashmem匿名共享内存)

    Fresco的内存机制 Fresco是Facebook出品的高性能图片加载库,采用了Ashmem匿名共享内存机制, 来解决图片加载中的OOM问题.这里不对Fresco做深入分析,只关注Fresco在A ...

  6. C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改

    在展示数据库中不知道数量的数据时怎么展示最好呢?--表格 ListView - 表格形式展示数据 ListView 常用属性 HeaderStyle - "详细信息"视图中列标头的 ...

  7. Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError

    Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar ...

  8. 精通Web Analytics 2.0 (1) 引言

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 前言 我对这本书抱有一个简单的愿望,也许是崇高的目标:改变世界对线上事情作决策的方式. 长久以来,我们在线上的举动已经被准确的归 ...

  9. 71.Android之长连接实现

    转载:http://blog.csdn.net/qq_23547831/article/details/51690047 本文中我们将讲解一下App的长连接实现.一般而言长连接已经是App的标配了,推 ...

  10. Deformity ASP/ASPX Webshell、Webshell Hidden Learning

    catalog . Active Server Page(ASP) . ASP.NET . ASP WEBSHELL变形方式 . ASPX WEBSHELL变形方式 . webshell中常见的编码转 ...