大数据技术基础实验十四:Storm实验——部署Storm
大数据技术基础实验十四:Storm实验——部署Storm
文章目录
一、前言
本次实验我们将了解学习有关Storm的一些知识以及如何在虚拟机集群中进行部署。
二、实验目的
- 掌握Storm基础简介及体系架构
- 掌握Storm集群安装部署
- 掌握Storm和Zookeeper之间的关系,并加深对Storm架构和原理的理解
三、实验要求
- 巩固之前的实验
- 部署三个节点的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系统中的一个或多个任务。
五、实验步骤
1、配置SSH免密登录
首先配置master,slave1和slave2之间的免密登录和各虚拟机的/etc/hosts文件,这个步骤请参考我之前的一篇博客,里面有详细过程:
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实验就结束了,后面有时间我会继续更新的,这学期也快结束了,也要开始期末复习了。
相关文章
- 【华为云技术分享】stm32定时器的妙用
- 达芬奇技术之Codec Engine学习(一)
- 知乎技术方案初探(转)
- 《android开发艺术探索》读书笔记(十三)--综合技术
- 美颜算法技术的入门基础原理概述
- Atitit nlp用到的技术与功能自然语言处理 v3 t99.docx Atitit nlp用到的技术与常见类库 目录 1. 常用的技术1 1.1. 语言处理基础技术 分词 相似度等1 1.2
- Atitit 语义网的实现技术 目录 1. 语义网概念及技术综述1 2. 图2-1 语义网的体系结构2 2.1. 第1层:基础层,主要包含Unicode和URI(Uniform resource
- 腾讯技术团队最新出品,Android Framework系统框架底层原理解密
- Unity技术手册 - 粒子基础主模块属性-中
- CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)
- CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)
- python人工智能在气象中的实践技术应用
- ios音视频开发路线及技术点
- 组网技术基础 — 多信道共用容量和移动性管理
- 0停机迁移Nacos?Java字节码技术来帮忙
- [技术讨论][全程建模]一个类应该有多少方法?多大就须要拆分?
- 012-多线程-基础-非阻塞算法相关技术简介
- android插件技术-apkplug于OSGI服务基础-08
- Unity技术手册-UGUI零基础详细教程-Graphic Raycaster 射线检测和Canvas Group
- Unity技术手册-脚本生命周期基础入门全解
- Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]
- 擎创技术流 | 基于日志的交换机故障预测
- Oracle的学习心得和知识总结(二十)|Oracle数据库Real Application Testing之DBMS_SQLTUNE包技术详解