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