首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【大数据技术基础 | 实验十五】Storm实验:部署Storm

【大数据技术基础 | 实验十五】Storm实验:部署Storm

作者头像
Francek Chen
发布2025-01-22 21:58:32
发布2025-01-22 21:58:32
32200
代码可运行
举报
运行总次数:0
代码可运行

一、实验目的

  1. 掌握Storm基础简介及体系架构;
  2. 掌握Storm集群安装部署;
  3. 掌握Storm和Zookeeper之间的关系,并加深对Storm架构和原理的理解。

二、实验要求

  1. 巩固之前的实验;
  2. 部署三个节点的Storm集群,以master节点作为主节点,其他两个slave节点作为从节点,并修改Storm Web的端口为8081,并引用外部Zookeeper。

三、实验原理

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系统中的一个或多个任务。

四、实验环境

  • 云创大数据实验平台:
  • Java 版本:jdk1.7.0_79
  • Hadoop 版本:hadoop-2.7.1
  • ZooKeeper 版本:zookeeper-3.4.6
  • Storm 版本:storm-0.10.0

五、实验内容和步骤

(一)配置SSH免密登录

首先配置master,slave1和slave2之间的免密登录和各虚拟机的/etc/hosts文件,具体步骤参考:【大数据技术基础 | 实验一】配置SSH免密登录

(二)安装ZooKeeper集群

配置完免密登录之后我们还需要安装Zookeeper集群,具体步骤参考:【大数据技术基础 | 实验五】ZooKeeper实验:部署ZooKeeper

(三)部署Storm

首先我们将Storm安装包解压到/usr/cstor目录,并将Storm解压目录所属用户改成root:root

代码语言:javascript
代码运行次数:0
运行
复制
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修改和添加配置项目(每个配置项前面必须留有空格,否则会无法识别),如下:

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/cstor/storm/conf
vim storm.yaml

Storm集群使用的Zookeeper集群地址,其格式如下:

代码语言:javascript
代码运行次数:0
运行
复制
storm.zookeeper.servers:
  - "slave1"
  - "slave2"
  - "master"

然后我们在本地创建一个workdir目录用于作为存储目录:

代码语言:javascript
代码运行次数:0
运行
复制
mkdir -p /usr/cstor/storm/workdir

创建完之后我们再次回到刚才的storm.yaml文件中进行后续配置:

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/cstor/storm/conf
vim storm.yaml

本地存储目录,也就是我们刚刚创建的目录:

代码语言:javascript
代码运行次数:0
运行
复制
storm.local.dir: "/usr/cstor/storm/workdir"

Storm集群Nimbus机器地址:

代码语言:javascript
代码运行次数:0
运行
复制
nimbus.host: "master"

对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:

代码语言:javascript
代码运行次数:0
运行
复制
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

UI端口(web端口,默认8080):

代码语言:javascript
代码运行次数:0
运行
复制
ui.port: 8081

配置成如上即可。

配置完成之后我们将/usr/cstor/storm目录传到另外三个节点上:

代码语言:javascript
代码运行次数:0
运行
复制
scp -r /usr/cstor/storm root@slave1:/usr/cstor
scp -r /usr/cstor/storm root@slave2:/usr/cstor

然后,启动Storm集群(保证Zookeeper在此之前已启动),启动步骤如下:

主节点(master)启动nimbus服务:

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/cstor/storm/bin
nohup ./storm nimbus >/dev/null 2>&1 &

从slave节点(2个)启动supervisor服务:

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/cstor/storm/bin
nohup ./storm supervisor >/dev/null 2>&1 &

主节点(master)启动ui服务:

代码语言:javascript
代码运行次数:0
运行
复制
nohup ./storm ui >/dev/null 2>&1 &

最后我们使用jps分别在三台虚拟机上查看java进程看我们是否启动成功:在主节点输入jps有nimbus进程和core进程,其中nimbus进程为Storm主节点进程,core为WEB进程;从节点输入jps有supervisor进程,此进程为Storm从节点的进程。

master:

slave1和slave2:

分别出现如上进程就说明我们成功启动storm。

六、实验结果

最后我们使用jps分别在三台虚拟机上查看java进程看我们是否启动成功:

master:

slave1和slave2:

在这里插入图片描述
在这里插入图片描述

分别出现如上进程就说明我们成功启动storm。

启动好Storm集群后。可以通过浏览量访问Storm WEB页面(http://master:8081 ),查看Storm集群的一些基本情况:

七、实验心得

  通过本次Storm集群的部署实验,我深刻理解了Storm这一分布式实时处理系统的基础架构和工作原理。实验过程中,从配置SSH免密登录到安装ZooKeeper集群,再到部署Storm并修改相关配置文件,每一步都考验着我的耐心和细心。

  在配置Storm的过程中,我遇到了不少挑战,比如如何正确设置Zookeeper的地址、如何配置worker的数量以及端口的分配等。但通过查阅资料和反复尝试,我逐渐掌握了这些配置项的具体含义和设置方法。特别是在修改storm.yaml文件时,我深刻体会到了配置文件对于系统运行的重要性,任何一个小的错误都可能导致系统无法正常运行。

  当我在三台虚拟机上分别看到Nimbus、Supervisor和UI进程成功启动时,内心的成就感油然而生。这不仅是对我实验操作的肯定,更是对我所学知识的实践验证。通过访问Storm WEB页面,我能够直观地看到Storm集群的运行状态,这让我感到非常兴奋和自豪。

  此外,本次实验也让我更加深刻地认识到了团队合作的重要性。在实验过程中,我与同学们相互讨论、互相帮助,共同解决了许多难题。这种团队协作的精神不仅提高了我们的实验效率,也让我们在相互学习中不断成长。

  总的来说,这次实验让我受益匪浅。我不仅掌握了Storm集群的部署方法,还加深了对Storm架构和原理的理解。我相信这些知识和技能将对我未来的学习和工作产生积极的影响。

:以上文中的数据文件及相关资源下载地址: 链接:https://pan.quark.cn/s/d5c21a60475b 提取码:yaEt

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、实验要求
  • 三、实验原理
  • 四、实验环境
  • 五、实验内容和步骤
    • (一)配置SSH免密登录
    • (二)安装ZooKeeper集群
    • (三)部署Storm
  • 六、实验结果
  • 七、实验心得
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档