Storm运行流程的理解

时间:2021-10-18 04:06:06

Hadoop
进入21世纪,随着社会的快速发展,人类活动产生的数据急速膨胀,同时大量累积的数据最为一项资源受到普遍关注,对大量数据的处理与分析显得很重要,而Hadoop是大数据处理领域的佼佼者。
Hadoop是一个分布式的批处理系统,主要由MapReduce和HDFS两个模块组成。
MapReduce思想最先Google公司提出,Google为了优化搜索引擎,面对客户的不同搜索需求提供需要针对性的网页浏览,它需要从后台服务器中大量的网页中查询有效连接。
Google公司为了达到这些效果,首先通过PageRank算法计算每个网页的价值,然后根据网页价值对网页进行排序,最后按照先后顺序将结果展现在客户端。但是由于网页数量巨大,Google公司因此将PageRank任务分配到多台PC服务器上同时计算,将每台PC服务器的计算结果进行汇总,MapReduce的思想应运而生。
后来,Yahoo公司在MapReduce的基础上成立了独立Hadoop项目组,MapReduce和HDFS(分布式文件存储系统)得到完善和发展。
Hadoop的主要思想是设立一个主节点(Master),负责分配任务,监控各个节点(Slave)的运行状态,每个节点(Slave)执行整体任务的部分模块,如图1:
Storm运行流程的理解
Hadoop作为当前主流的大数据分析处理应用,有吞吐量大,分析准确等等有点,但同时也存在一些缺陷:
1.处理小规模数据时,初始化阶段耗费的时间和资源较大。
2.数据处理的时间较长,出现结果延迟问题。

Storm
Storm对Hadoop遇到的缺陷进行了补充,它是一种分布式的实时计算系统。具有实时处理,无延迟,一次初始化持续运行等优点。
Storm将整体任务的工作流程抽象位拓扑图(Topology),拓扑结构主要由spout和bolt两个组件组成。spout是信息源,主要任务为对外部文件的对接与读取,并将读取的信息按照元组(Tuple)的形式发送至拓扑中。bolt是信息的处理者,负责对数据进行分析和处理,并将结果存储到特定结构体。常见的Topology结构如图2:
Storm运行流程的理解
Storm在分布式集群中具体的工作流程与Hadoop的MapReduce思想类似。如图3:
Storm运行流程的理解
Storm中Nimbus/Supervisor结构继承于MapReduce的Master/Slave结构。Nimbus是运行于主节点上的守护进程,用于接收客户端提交的Topology结构图,得知任务的开始并发度及任务数量(Tasks),从Zookeeper中查询子节点中的资源配置情况,再根据一定的规则分配任务,对每个任务块进行编号,将最后结果存储到Zookeeper中。
Zookeeper模块是集群中的协调模块,主要存放子节点的信息(如心跳信息,节点状态,配置信息等),一般是多台PC服务器组成的小型集群,防止整体系统崩溃。
Supervisor是运行在子节点上的守护进程,用于监控子节点的状态,心跳和管理Worker进程,实时轮询Zookeeper领取任务。
Worker是子节点上运行具体组件(spout/bolt)逻辑的进程。每个Worker中包含不少一个执行线程(executor),每个executor线程上运行着不少于一个task(任务的具体实例组件,默认每个executor对应一个task)。
Storm的整体工作流程是:
1.客户端新建Topology,定义spout和bolt的初始并发度(初始executor的并发数),并定义各个组件之间的流分组策略。
2.客户端重写spout的方法,确定spout发送信息的可靠性原则(通过调用acker和fail方法),并保证信息流的发送的畅通(调用nextTuple方法)。
3.客户端重写bolt的方法,确定数据处理的具体原则,和最终的结果存储原则。
4.客户端提交整体Topology到Nimbus,主节点查询Zookeeper中子节点的资源信息,确定规则(随机分配/轮循分配/hash值固定分配等)开始分配任务,并将任务与子节点的对应关系存放在Zookeeper中。
5.子节点Supervisor查询Zookeeper中的信息领取任务,分配具体的Worker以及executors执行具体的tasks。
6.每个子节点运行Topology的子集,且整个Storm集群初始化后不会停止,连续运行,直到受到kill相应的守护进程。