Storm 安装

Apache Storm 是自由开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理。

  • 进程常驻内存
  • 数据不经过磁盘,在内存中处理

概念

  • Nimbus:集群主节点(Master),负责资源分配和任务调度。我们提交任务和截止任务都是在 Nimbus上操作的。一个 Storm 集群只有一个 Nimbus 节点。
  • Supervisor:集群工作节点(Slave),接收 Nimbus 分配的任务,管理所有 Worker。一个 Supervisor 节点中包含多个 Worker 进程。
  • Worker:工作进程,每个工作进程中都有多个 Task。
  • Task:任务,每个 Spout 和 Bolt 都由若干个任务来执行。每个任务都与一个执行线程相对应。
  • Topology:计算拓扑,Storm 的拓扑是对实时计算应用逻辑的封装,它的作用与 MapReduce 的任务(Job)很相似,区别在于 MapReduce 的一个 Job 在得到结果之后总会结束,而拓扑会一直在集群中运行,直到手动去终止它。拓扑还可以理解成由一系列通过数据流(Stream Grouping)相互关联的 Spout 和 Bolt 组成的拓扑结构。
  • Stream:数据流是 Storm 中最核心的抽象概念。一个数据流指的是在分布式环境中并行创建、处理的一组元组(tuple)的无界序列。数据流可以由一种能够表述数据流中元组的域(fields)的模式来定义。
  • Spout:数据源是拓扑中数据流的来源。一般 Spout 会从一个外部的数据源读取元组然后将他们发送到拓扑中。根据需求的不同,Spout 既可以定义为可靠的数据源,也可以定义为不可靠的数据源。一个可靠的 Spout 能够重新发送处理失败的元组,以确保所有的元组都能得到正确的处理;相对应的,不可靠的 SPout 就不会在元组发送之后对元组进行任何其他的处理。一个 Spout 可以发送多个数据流。
  • Bolt:拓扑中所有的数据处理均是由 Bolt 完成的。通过数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等功能,Bolt 几乎能够完成任何一种数据处理需求。一个 Bolt 可以实现简单的数据流转换,而更复杂的数据流变换通常需要使用多个 Bolt 并通过多个步骤完成。
  • Stream Grouping:消息分发策略, 在 Storm 中有八种内置的数据流分组方式。为拓扑中的每个 Bolt 的确定输入数据流是定义一个拓扑的重要环节。数据流分组定义了在 Bolt 的不同任务(tasks)中划分数据流的方式。
  • Reliability:可靠性。Storm 可以通过拓扑来确保每个发送的元组都能得到正确处理。通过跟踪由 Spout 发出的每个元组树可以确定元组是否已经完成处理。每个拓扑都有一个 “消息延时” 参数,如果 Storm 在延时时间内没有检测到元组是否处理完成,就会将该元组标记为处理失败,并会在稍后重新发送该元组。

单机模式(『caroly01』)

  • 上传解压

  • tar xf apache-storm-0.10.0.tar.gz -C /opt/caroly/
    
  • mv apache-storm-0.10.0/ storm
    
  • 配置环境变量

  • vi /etc/profile +
    
  • export STORM_HOME=/opt/caroly/storm
    
  • PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin:$STORM_HOME/bin
    
  • . /etc/profile
    
  • 创建日志信息目录

  • cd /opt/caroly/storm
    mkdir logs
    
  • 启动

  • storm dev-zookeeper >> ./logs/zk.out 2>&1 &
    
  • storm nimbus >> ./logs/nimbus.out 2>&1 &
    
  • storm ui >> ./logs/ui.out 2>&1 &
    
  • storm supervisor >> ./logs/supervisor.out 2>&1 &
    
  • storm logviewer >> ./logs/logviewer.out 2>&1 &
    

注:日志重定向到指定目录,2 代表标准错误输出,表示出现问题的时候定向到标准输出。最后一个 & 表示后台运行

  • 访问

  • 进程完全启动后,可在浏览器中访问
    caroly01:8080
    

全分布式

  • 各节点分配

| caroly | Nimbus | Supervisor | Zookeeper |
| ——– | —— | ———- | ——— |
| caroly02 | √ | | √ |
| caroly03 | | √ | √ |
| caroly04 | | √ | √ |

  • 修改配置文件(『caroly01』)

  • cd /opt/caroly/storm
    vi conf/storm.yaml
    
  • change 18:
    storm.zookeeper.servers:
        - "caroly02"
        - "caroly03"
        - "caroly04"
    
  • change 23:
    nimbus.host: "caroly02"
    
  • add: (规定提交任务的存放路径,非必需)
    storm.local.dir: "/tmp/storm"
    
  • add:(四个 worker 进程的通讯端口)
    supervisor.slots.ports:
        - 6700
        - 6701
        - 6702
        - 6703
    
  • 开启 DRPC

    • change 47:
      drpc.servers:
      - "caroly02"
      
  • 分发(『caroly01』)

  • cd /opt/caroly
    rm -rf /opt/caroly/storm/logs/
    mkdir logs
    
  • scp -r storm/ caroly02:`pwd`
    scp -r storm/ caroly03:`pwd`
    scp -r storm/ caroly04:`pwd`
    
  • 配置环境变量(『caroly02』、『caroly03』、『caroly04』)

  • vi /etc/profile +
    
  • export STORM_HOME=/opt/caroly/storm
    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HIVE_HOME/bin:$HBASE_HOME/bin:$STORM_HOME/bin
    
  • . /etc/profile
    
  • 启动 ZK(『caroly02』、『caroly03』、『caroly04』)

  • zkServer.sh start
    
  • 启动 storm(『caroly02』)

  • cd /opt/caroly/storm
    
  • storm nimbus >> ./logs/numbus.out 2>&1 &
    
  • storm ui >> ./logs/ui.out 2>&1 &
    
  • storm drpc >> ./logs/drpc.out 2>&1 &
    
  • 启动 storm(『caroly03』、『caroly04』)

  • cd /opt/caroly/storm
    
  • storm supervisor >> ./logs/supervisor.out 2>&1 &
    
  • 访问

  • 进程完全启动后,可在浏览器中访问
    caroly01:8080