应用场景
- 1.信息流处理
- Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性。即 Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
- 2.连续计算
- Storm可进行连续查询并把结果即时反馈给客户端。比如把 Twitter 上的热门话题发送到浏览器中。
- 3.分布式远程调用
- Storm 可用来并行处理密集查询。Storm 的拓扑结构是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查询进行计算,并返回查询结果。举个例子 Distributed RPC 可以做并行搜索或者处理大集合的数据。
操作步骤
1. Storm概述
Storm 是一个实时的、分布式的、可靠的流式数据处理系统。它的工作就是委派各种组件分别独立的处理一些简单任务。在 Storm 集群中处理输入流的是 Spout 组件,而 Spout 又把读取的数据传递给叫Bolt的组件。Bolt组件会对收到的数据元组进行处理,也有可能传递给下一个Bolt。我们可以把 Storm
集群想象成一个由Bolt 组件组成的链条集合,数据在这些链条上传输,而Bolt作为链条上的节点来对数据进行处理。Storm 保证每个消息都会得到处理,而且处理速度非常快,在一个小集群中,每秒可以处理数以百万计的消息。Storm 的处理速度非常惊人:经测试,每个节点每秒可以处理 100 万个数据元组。其主要应用领域有实时分析、在线机器学习、持续计算、分布式 RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。)、ETL(数据抽取、转换和加载)等。
Storm 和 Hadoop 集群表面看上去很类似,但是 Hadoop 上面运行的是 MapReduce Jobs,而在Storm上运行的是拓扑 Topology,这两者之间是非常不一样的,关键区别是:MapReduce 最终会结束,而一个 Topology永远会运行(除非你手动 kill 掉),换句话说,Storm 是面向实时数据分析,而 Hadoop 面向的是离线数据分析,Storm 在 HDP 中的位置如下图所示。
2. Storm集群架构
Storm的集群由一个主节点和多个工作节点组成。主节点运行一个名为“Nimbus”的守护进程,每个工作节点都运行一个名为“Supervisor”的守护进程,两者的协调工作由ZooKeeper 来完成,ZooKeeper 用于管理集群中的不同组件,Storm集群架构如下图所示。
2.1 主节点 Nimbus
主节点通常运行一个后台程序——Nimbus,用于响应分布在集群中的节点,分配任务和监测故障,在某个节点的 Supervisor出现故障宕机之后,如果在该节点上运行的 Worker进程异常终止,Nimbus会将异常终止的 Worker 进程分配到其他 Supervisor 节点上继续运行,这类似于 Hadoop 中的JobTracker。
2.2 工作节点 Supervisor
每一个工作节点上面运行一个叫做 Supervisor进程。Supervisor负责监听从 Nimbus 分配给它执行的任务,还能保证正常运行的 Worker异常终止之后能够重启该 Worker。Nimbus 和 Supervisor之间的协调则通过 ZooKeeper 系统。
2.3 协调服务组件 Zookeeper
ZooKeeper 是完成 Nimbus 和 Supervisor 之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。Topology 则是一组由 Spout(数据源)和 Bolts(数据处理)通过 Stream Groupings 进行连接的图。
2.4 工作进程 Worker
Worker是一个 Java 进程,执行拓扑的一部分任务。一个 Worker进程执行一个 Topology的子集,它会启动一个或多个 Executor 线程来执行一个 Topology 的组件(Spout 或 Bolt),如下图。
3. Storm的使用
一但storm任务开启,那么就一直在运行,除非手动终止。