本次实验我们将了解学习有关Storm的一些知识以及如何在虚拟机集群中进行部署。
二、实验目的Storm简介:Storm是一个分布式的、高容错的基于数据流的实时处理系统,可以简单、可靠的处理大量的数据流。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息),它有以下特点:编程模型简单、可扩展、高可靠性、高容错性、支持多种编程语言、支持本地模式、高效。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。
体系架构:Storm共有两层体系结构,第一层采用master/slave架构,第二层为DAG流式处理器,第一层资源管理器主要负责管理集群资源、响应和调度用户任务,第二层流式处理器则实际执行用户任务
集群资源管理层:Storm的集群资源管理器采用master/slave架构,主节点即控制节点(master node)和从节点即工作节点(worker node)。控制节点上面运行一个叫Nimbus后台服务程序,它的作用类似Hadoop里面的JobTracker, Nimbus负责在集群里面分发代码,分配计算任务给机器,并且监控状态。每一个工作节点上面运行一个叫做Supervisor的服务程序。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程worker。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程worker组成。(一个supervisor里面有多个worker,一个worker是一个JVM。可以配置worker的数量,对应的是conf/storm.yaml中的supervisor.slot的数量),架构图如下图所示:
称集群信息(Nimbus协议、Supervisor节点位置) 、任务分配信息等关键数据为元数据。Storm使用ZooKeeper集群来共享元数据,这些元数据对Storm非常重要,比如Nimbus通过这些元数据感知Supervisor节点,Supervisor通过Zookeeper集群感知任务分配情况。Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。另外,Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的?所有的状态要么在zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程,然后再重启它们,就好像什么都没有发生过,这个设计使得Storm异常的稳定。
数据模型:Storm实现了一种数据流模型,其中数据持续地流经一个转换实体网络。一个数据流的抽象称为一个流(stream),这是一个无限的元组序列。元组(tuple)就像一种使用一些附加的序列化代码来表示标准数据类型(比如整数、浮点和字节数组)或用户定义类型的结构。每个流由一个唯一ID定义,这个ID可用于构建数据源和接收器(sink)的拓扑结构。流起源于喷嘴(spout),Spout将数据从外部来源流入 Storm 拓扑结构中。接收器(或提供转换的实体)称为螺栓(bolt)。螺栓实现了一个流上的单一转换和一个 Storm 拓扑结构中的所有处理。Bolt既可实现 MapReduce之类的传统功能,也可实现更复杂的操作(单步功能),比如过滤、聚合或与数据库等外部实体通信。典型的 Storm 拓扑结构会实现多个转换,因此需要多个具有独立元组流的Bolt。Bolt和Spout都实现为Linux系统中的一个或多个任务。
五、实验步骤 1、配置SSH免密登录首先配置master,slave1和slave2之间的免密登录和各虚拟机的/etc/hosts文件,这个步骤请参考我之前的一篇博客,里面有详细过程:
大数据技术基础实验一:配置SSH免密登录
2、安装ZooKeeper集群配置完免密登录之后我们还需要安装Zookeeper集群,这个步骤可以参考我之前的博客,里面有详细的步骤:大数据技术基础实验五:Zookeeper实验——部署ZooKeeper
在这里我就不再赘述了。
3、部署Storm首先我们将Storm 安装包解压到/usr/cstor目录,并将Storm解压目录所属用户改成root:root:
tar -zxvf apache-storm-0.10.0.tar.gz -c /usr/cstor
mv /usr/cstor/apache-storm-0.10.0 /usr/cstor/storm
chown -R root:root /usr/cstor/storm
学校的虚拟机上已经提前帮我们解压好了,所以这一步就不用我们去完成了,知道如何操作就行。
然后我们进入解压目录下,把conf目录下的storm.yaml修改和添加配置项目(每个配置项前面必须留有空格,否则会无法识别),如下:
cd /usr/cstor/storm/conf
vim storm.yaml
Storm集群使用的Zookeeper集群地址,其格式如下:
storm.zookeeper.servers:
- "slave1"
- "slave2"
- "master"
然后我们在本地创建一个workdir目录用于作为存储目录:
mkdir -p /usr/cstor/storm/workdir
创建完之后我们再次回到刚才的storm.yaml文件中进行后续配置:
cd /usr/cstor/storm/conf
vim storm.yaml
本地存储目录,也就是我们刚刚创建的目录:
storm.local.dir: "/usr/cstor/storm/workdir"
Storm集群Nimbus机器地址:
nimbus.host: "master"
对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
UI端口(web端口,默认8080):
ui.port: 8081
配置成如上即可。
配置完成之后我们将/usr/cstor/storm目录传到另外三个节点上:
scp -r /usr/cstor/storm root@slave1:/usr/cstor
scp -r /usr/cstor/storm root@slave2:/usr/cstor
然后,启动Storm集群(保证Zookeeper在此之前已启动),启动步骤如下:
主节点(master)启动nimbus服务:
cd /usr/cstor/storm/bin
nohup ./storm nimbus >/dev/null 2>&1 &
从slave节点(2个)启动supervisor服务:
cd /usr/cstor/storm/bin
nohup ./storm supervisor >/dev/null 2>&1 &
主节点(master)启动ui服务:
nohup ./storm ui >/dev/null 2>&1 &
最后我们使用jps分别在三台虚拟机上查看java进程看我们是否启动成功:
master:
slave1和slave2:
分别出现如上进程就说明我们成功启动storm。
启动好Storm集群后。可以通过浏览量访问Storm WEB页面(http://10.30.160.10:8081 ),查看Storm集群的一些基本情况:
六、最后我想说到这里本次部署Storm实验就结束了,后面有时间我会继续更新的,这学期也快结束了,也要开始期末复习了。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧