Storm是开源的一个分布式实时计算系统,用于数据的实时分析,持续计算,分布式RPC、在线机器学习、ETL等。例如,在电商购物网站购买商品时,会在网页旁边或者底端看到与自己所需要商品相关的系列商品,这就是使用类似Storm实时计算去做的。Hadoop适用于海量数据的离线数据分析,无法做到实时分析计算。
Storm系统的设计保证了消息能得到快速的处理,使用ZeroMQ作为其底层消息队列。Storm有一个"本地模式",可以在处理过程中完全模拟Storm集群,可以使我们快速进行开发和单元测试。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快,在一个小集群中,,每个结点每秒可以处理数以百万计的消息。Storm的部署和运维都很便捷,可以使用任意编程语言来开发应用。
下图为Hadoop和Storm的简单对比
Storm的架构结构图
Nimbus主节点:通常运行一个后台程序Nimbus,用于响应分布在集群中的节点,分配任务和监测故障,类似于Hadoop中的Job Tracker。
Supervisor工作节点:运行一个后台程序Supervisor,接收Nimbus分配的任务,管理属于自己的worker进程。每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。
Zookeeper:完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装到Storm中的topology,而topology则是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。
Topology:Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。一个topology是spouts和bolts组成的图,通过stream groupings将图中的spouts和bolts连接起来。
Storm所使用的容器是jetty,底层通信使用netty,zookeeper使用的是Curator。
Storm环境搭建
Zookeeper集群包括3台机器:192.168.0.217、192.168.0.218、192.168.0.219
Zookeeper集群搭建参考文章《Zookeeper简介与集群搭建》
3台Storm机器IP:192.168.0.222、192.168.0.223、192.168.0.224,关闭防火墙,并修改/etc/hosts配置,安装JDK1.8并配置环境变量
修改/etc/hosts配置
vim /etc/hosts
配置环境变量
vim /etc/profile
添加
export JAVA_HOME=/usr/local/localsoftware/jdk1.8.0_121
export PATH=$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
执行source /etc/profile 使环境变量立即生效
安装python
下载3.6.4版本
下载Python-3.6.4.tgz,并分别上传到192.168.0.222、192.168.0.223、192.168.0.224
执行下面指令解压Python
tar -zxvf Python-3.6.4.tgz
cd Python-3.6.4
./configure --prefix=/usr/local/Python-3.6.4
make
sudo make install
Storm安装
下载Storm安装包,并分别上传到192.168.0.222、192.168.0.223、192.168.0.224
解压
tar -zxvf apache-storm-1.2.1.tar.gz -C /usr/local/
配置Storm的环境变量
vim /etc/profile
添加
export STORM_HOME=/usr/local/apache-storm-1.2.1
修改
export PATH=$JAVA_HOME/bin:$STORM_HOME/bin:$PATH
执行指令使环境变量立即生效 source /etc/profile
修改Storm的conf目录下的配置文件storm.yaml
vim storm.yaml
配置Storm集群使用的Zookeeper服务
注意上图中箭头位置的空格,不要去掉,否则可能会导致Storm无法正常启动
创建data文件夹
mkdir /usr/local/apache-storm-1.2.1/data
启动Storm集群
首先,启动Zookeeper集群
cd /usr/local/zookeeper
其次,启动Storm集群
主机器192.168.0.222 从机器:192.168.0.223、192.168.0.224
主机器(nimbus): storm nimbus &
从机器(supervisor): storm supervisor &
主机器ui运行: storm ui &
主机器logviewer运行: storm logviewer &
查看启动日志信息
192.168.0.222 nimbus
192.168.0.223 supervisor
查看192.168.0.222 nimbus中的ui.log
vim ui.log
从上图可以看出,Storm的管控台ui使用的Server为jetty
在浏览器中访问http://192.168.0.222:18080/ ,可以查看storm的一些集群配置