【Storm】Storm简介及Storm集群的安装部署

31 篇文章 0 订阅
8 篇文章 0 订阅

1、Storm概述
(1)Storm简介
Storm最早是由BackType公司开发的实时处理系统,底层由Clojure实现。Clojure也是一门基于JVM的高级面向函数式的编程语言。2011年Twitter公司收购了BackType公司,便使用Storm帮助企业解决了实时海量数据处理的问题。阿里巴巴在Storm基础上,使用Java代替Clojure实现了核心,并在性能上进行了优化,产生了JStorm。目前Storm和JStorm都由Apache基金会组织管理。
(2)Storm特性
自由共享、开源的分布式实时计算系统;实时计算领域的Hadoop;编程模型简单,并且支持多种编程语言;高性能,低延迟;易扩展;容错;消息不丢失。
(3)Storm使用场景
1)信息流处理 Stream Processing
处理源源不断产生的消息,并将处理之后的结果存储到某个存储系统中去,典型的架构是Kafka+Storm+HBase(或redis)。
2)连续计算 Continuous Computation
Storm可进行连续查询并把结果即时反馈给客户端,比如把微博上的热门话题发送到浏览器上。
3)分布式远程过程调用 Distributed RPC
用来处理并行密集查询,客户端向Storm提交一个查询请求和查询参数,Storm运行Topology并行处理,并将结果同步返回给客户端。
4)在线机器学习
(4)Storm与Hadoop的联系与区别
Storm只是一个实时分布式计算框架,但可以读取hdfs上的文件进行批量计算,另外Storm可以运行在Yarn上。Hadoop的hdfs是分布式文件存储系统,mapreduce+Yarn批量离线计算。
Storm的计算任务为Topology,提交到Storm集群上运行,除非手动执行kill命令,否则会一直运行下去。MapReduce数据处理完毕,就会停止。
(5)Storm与SparkStreaming的联系与区别
Storm是真正的实时处理框架,针对数据,来一条记录就处理一次,是一种流式数据处理技术框架,运行级别达到毫秒级别。
SparkStreaming是一种微批数据处理框架,运行级别达到秒级。

2、Storm组件
(1)Nimbus
Nimbus为Storm的主节点,本身无状态。接收客户端任务Topology的提交,并负责在集群中分发代码,即jar包。分配工作给从节点supervisor,注意不是直接分配,而是将任务发布到zookeeper上,由supervisor到zookeeper上领取任务。监听集群状态。当Supervisor节点挂掉,由Nimbus将该节点上正在运行着的任务重新分配给其他Supervisor执行。
(2)Supervisor
Supervisor为Storm的从节点。从Zookeeper上获取nimbus分配的任务,负责启动和停止本机上worker进程来执行任务。需要将自己的运行状态信息汇报到zookeeper上,由nimbus监控。
(3)worker
worker进程负责启动executor线程来执行任务。负责与其他worker之间进行数据传输。需要将自己的运行状态汇报到zookeeper上,由nimbus监控。
(4)Executor
真正执行任务的线程,由worker启动和停止,executor负责执行客户提交到Storm集群上任务中Task(spout/bolt)。
(5)ZooKeeper
ZooKeeper存储任务调度信息、各节点状态信息、心跳。使Storm集群各节点保持无状态,这样具有高可靠性。zk上storm各znode存储数据类型如下:

znode    存储的数据
/storm/supervisors/supervisor-id    supervisor节点的状态信息
/storm/storms/topology-id    topology基本信息
/storm/assignments/topology-id    topology任务的分配信息
/storm/workbeats/topology-id/worker-id    worker工作进程的状态信息
/storm/errors/topology-id    topology在运行过程中出现异常的task信息,方便Nimbus将运行出错的任务进行重新分配
/storm/workerbeats/wordcount-3-1471753943/各个worker对应的znode    wordcount任务的各个worker工作进程的状态信息
(6)UI
在storm.yaml配置文件中通过配置ui.port参数来指定web ui访问端口。UI需要与nimbus运行在同一台服务器上。

(7)Logviewer
Logviewer是Storm集群任务运行过程中的日志收集进程,需要在每个Supervisor所在的节点上启动。
(8)Netty
Netty是storm底层通信框架,替代了0.9版本之前的zeroMq。

3、Storm的安装部署
(1)Storm的安装前提
Python版本:2.6.6以上。

$ python --version
Python 2.6.6
1
2
(2)Storm安装
1)解压安装包
Storm安装包版本:0.9.6,参考文档:
http://storm.apache.org/2015/11/05/storm096-released.html
http://storm.apache.org/downloads.html
softwares]$ tar -zxf apache-storm-0.9.6.tar.gz -C /opt/modules/
2)修改配置文件/opt/modules/apache-storm-0.9.6/conf/storm_env.ini,配置JDK环境。

JAVA_HOME:/opt/modules/jdk1.7.0_67
1
3)修改配置文件/opt/modules/apache-storm-0.9.6/conf/storm.yaml,配置storm相关参数。

########### These MUST be filled in for a storm configuration
 storm.zookeeper.servers:
     - "bigdata-senior.ibeifeng.com"
#     - "server2"

 nimbus.host: "bigdata-senior.ibeifeng.com"
 storm.local.dir: "/opt/modules/apache-storm-0.9.6/workspace"
 supervisor.slots.ports:
     - 6700
     - 6701
     - 6702
     - 6703
 ui.port: 8081
1
2
3
4
5
6
7
8
9
10
11
12
13
配置文件/opt/modules/apache-storm-0.9.6/conf/storm.yaml中常用的配置参数如下:

配置选项名称    配置选项作用
topology.max.task.parallelism    每个Topology运行时最大的Executor数目
topology.workers    每个Topology运行时的worker的默认数目,若在代码中设置,则此选项值被覆盖
storm.zookeeper.servers    zookeeper所在服务器地址
storm.local.dir    Storm用于存储jar包和临时文件的本地存储目录
storm.zookeeper.root    zookeeper的根节点
ui.port    UI进程端口号
nimbus.host    nimbus主机地址
supervisor.slots.ports    supervisor进程端口号
supervisor.worker.timeout.secs    supervisor进程超时时间
drpc.servers    在使用drpc服务时,drpc server的服务器列表
drpc.port    在使用drpc服务时,drpc server的服务端口
(3)Storm集群启动
1)启动ZooKeeper

zookeeper-3.4.5]$ zkServer.sh start
$ jps
2890 QuorumPeerMain
1
2
3
2)启动nimbus

apache-storm-0.9.6]$ bin/storm nimbus
[beifeng@bigdata-senior apache-storm-0.9.6]$ nohup bin/storm nimbus
nohup: ignoring input and appending output to `nohup.out'
[beifeng@bigdata-senior apache-storm-0.9.6]$ nohup bin/storm nimbus > /dev/null 2>&1
[beifeng@bigdata-senior apache-storm-0.9.6]$ nohup bin/storm nimbus > /dev/null 2>&1 &
[1] 2695
$ ps -ef | grep daemon.nimbus
$ jps
2931 nimbus
1
2
3
4
5
6
7
8
9
3)启动supervisor

apache-storm-0.9.6]$ nohup bin/storm supervisor > /dev/null 2>&1 &
$ ps -ef | grep daemon.supervisor
$ jps
3001 supervisor
1
2
3
4
4)启动ui

apache-storm-0.9.6]$ nohup bin/storm ui > /dev/null 2>&1 &
$ ps -ef | grep ui.core
$ netstat -tlnup | grep 8081
$ jps
3095 core
1
2
3
4
5
ui界面:http://bigdata-senior.ibeifeng.com:8081/index.html
5)启动logviewer

apache-storm-0.9.6]$ nohup bin/storm logviewer > /dev/null 2>&1 &
$ ps -ef | grep daemon.logviewer
$ jps
3411 logviewer

[beifeng@bigdata-senior apache-storm-0.9.6]$ jps
3475 Jps
2931 nimbus
3001 supervisor
2890 QuorumPeerMain
3411 logviewer
3095 core
1
2
3
4
5
6
7
8
9
10
11
12
6)启动DRPC

apache-storm-0.9.6]$ nohup bin/storm drpc > /dev/null 2>&1 &
1
(4)Storm集群停止

$ kill -9 `ps -ef | grep daemon.nimbus | awk '{print $2}' | head -n 1`
$ kill -9 `ps -ef | grep daemon.supervisor | awk '{print $2}' | head -n 1`
$ kill -9 `ps -ef | grep ui.core | awk '{print $2}' | head -n 1`
$ kill -9 `ps -ef | grep daemon.logviewer | awk '{print $2}' | head -n 1`
1
2
3
4
(5)ZooKeeper的批启动脚本 zookeeper.sh(统一写在节点nimbus服务器)

#!/bin/bash

if [ $# -ne 1 ];then
        echo "Usage: bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}"
        exit 4
fi

source /etc/profile
ZK_HOME=/opt/modules/zookeeper-3.4.5-cdh5.3.6

for node in hive-stu.ibeifeng.com
do
        echo "$1 zookeeper in $node"
        ssh $node "source /etc/profile && $ZK_HOME/bin/zkServer.sh $1"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(6)Storm的批启动脚本 start-storm.sh(统一写在节点nimbus服务器)
主节点上启动nimbus和ui,从节点上启动supervisor和logviewer。

#!/bin/bash

source /etc/profile
STORM_HOME=/opt/modules/apache-storm-0.9.6

#先在主节点上启动nimbus和ui进程
$STORM_HOME/bin/storm nimbus >/dev/null 2>&1 &
$STORM_HOME/bin/storm ui >/dev/null 2>&1 &

#在从节点上启动logviewer和supervisor
SUPERVISORS=$(cat $STORM_HOME/conf/supervisors)

for supervisor in $SUPERVISORS
do
        echo "start supervisor and logviewer in $supervisor"
        ssh $supervisor "source /etc/profile && nohup $STORM_HOME/bin/storm supervisor >/dev/null 2>&1" >/dev/null 2>&1 &
        ssh $supervisor "source /etc/profile && nohup $STORM_HOME/bin/storm logviewer >/dev/null 2>&1" >/dev/null 2>&1 &

done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(7)Storm的批停止脚本 stop-storm.sh(统一写在节点nimbus服务器)
在storm的主节点上添加一个指定supervisor节点的文件/opt/modules/apache-storm-0.9.6/conf/supervisors,内容:一行一个Supervisor节点服务器主机名。

#!/bin/bash

source /etc/profile
STORM_HOME=/opt/modules/apache-storm-0.9.6

#先在主节点上停止nimbus和ui进程
kill -9 `ps -ef | grep daemon.nimbus | awk '{print $2}' | head -n 1`
kill -9 `ps -ef | grep ui.core | awk '{print $2}' | head -n 1`

#在从节点上停止logviewer和supervisor
SUPERVISORS=$(cat $STORM_HOME/conf/supervisors)

for supervisor in $SUPERVISORS
do
        echo "stop supervisor and logviewer in $supervisor"
        ssh $supervisor kill -9 `ssh $supervisor ps -ef | grep daemon.supervisor | awk '{print $2}'|head -n 1`
    ssh $supervisor kill -9 `ssh $supervisor ps -ef | grep daemon.logviewer | awk '{print $2}'|head -n 1`
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(8)运行WordCountTopology
apache-storm-0.9.6]$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount
注意:这里的mainclass完全限定名,不像之前运行MapReduce案例一样有提示,因此需要先使用jar xvf storm-starter-topologies-0.9.6.jar | grep -i wordcount来查看。


{"topology.workers":3,"topology.debug":true}
1
杀掉任务:apache-storm-0.9.6]$ bin/storm kill wordcount
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值