storm入门架构

storm介绍node

全量数据处理使用的大可能是鼎鼎大名的hadoop或者hive,做为一个批处理系统,hadoop以其吞吐量大、自动容错等优势,在海量数据处理上获得了普遍的使用。可是,hadoop不擅长实时计算,由于它自然就是为批处理而生的。storm区别于hadoop,在Storm中,一个实时应用的计算任务被打包做为Topology发布,这同Hadoop的MapReduce任务类似。可是有一点不一样的是:在Hadoop中,MapReduce任务最终会执行完成后结束;而在Storm中,Topology任务一旦提交后永远不会结束,除非你显示去中止任务,用在实时的流式计算中,被普遍用来进行实时日志处理、实时统计、实时风控等场景,固然也能够用在对数据进行实时初步的加工,存储到分布式数据库中如HBase,便于后续的查询。面对的大批量的数据的实时计算,storm实现了一个可扩展的、低延迟、可靠性和容错的分布式计算平台。web

storm组件数据库

Storm集群主要由一个主节点和一群工做节点(worker node)组成,经过 Zookeeper进行协调。
主节点:
主节点一般运行一个后台程序 —— Nimbus,主控节点,负责在集群中发布代码,分配工做给机器,而且监听状态。
工做节点:
工做节点一样会运行一个后台程序 —— Supervisor,用于收听工做指派并基于要求运行工做进程。每一个工做节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则经过Zookeeper系统或者集群。
Zookeeper:
Zookeeper是完成Supervisor和Nimbus之间协调的服务。Nimbus的守护进程和Supervisors守护进程是没法链接和无状态的;全部的状态维持在Zookeeper中 或保存在本地磁盘上。这意味着你能够 kill -9 Nimbus 或Supervisors 进程,因此他们不须要作备份。这种设计致使Storm集群具备使人难以置信的稳定性。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操做)经过Stream Groupings进行链接的图。
下面对出现的术语进行更深入的解析。
Spout:
简而言之,Spout历来源处读取数据并放入topology。Spout分红可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。而Spout中最主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,若是没有新tuple发射则会简单的返回。
Bolt:
Topology中全部的处理都由Bolt完成。Bolt能够完成任何事,好比:链接的过滤、聚合、访问文件/数据库、等等。Bolt从Spout中接收数据并进行处理,若是遇到复杂流的处理也可能将tuple发送给另外一个Bolt进行处理。而Bolt中最重要的方法是execute(),以新的tuple做为参数接收。不论是Spout仍是Bolt,若是将tuple发射成多个流,这些流均可以经过declareStream()来声明。
Stream Groupings:
Stream Grouping定义了一个流在Bolt任务间该如何被切分。这里有Storm提供的6个Stream Grouping类型:
1. 随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每一个任务得到相等数量的tuple。
2. 字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组老是分发到同一个任务,不一样“user-id”的元组可能分发到不一样的任务。
3. 所有分组(All grouping):tuple被复制到bolt的全部任务。这种类型须要谨慎使用。
4. 全局分组(Global grouping):所有流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
5. 无分组(None grouping):你不须要关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(若是可能)。
6. 直接分组(Direct grouping):这是一个特别的分组类型。元组生产者决定tuple由哪一个元组处理者任务接收。
固然还能够实现CustomStreamGroupimg接口来定制本身须要的分组。架构

storm流程socket

Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工做任务委托给不一样类型的组件,每一个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称做spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。你能够想象一下,一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。
这里用一个简单的例子来讲明这个概念。昨晚我在新闻节目里看到主持人在谈论政治人物和他们对于各类政治话题的立场。他们一直重复着不一样的名字,而我开始考虑这些名字是否被提到了相同的次数,以及不一样次数之间的误差。
想像播音员读的字幕做为你的数据输入流。你能够用一个spout读取一个文件(或者socket,经过HTTP,或者别的方法)。文本行被spout传给一个bolt,再被bolt按单词切割。单词流又被传给另外一个bolt,在这里每一个单词与一张政治人名列表比较。每遇到一个匹配的名字,第二个bolt为这个名字在数据库的计数加1。你能够随时查询数据库查看结果, 并且这些计数是随着数据到达实时更新的。全部组件(spouts和bolts)及它们之间的关系请参考拓扑图1-1分布式

storm架构图oop

storm拓扑图spa

storm总体架构图线程

storm做业架构图设计

相关文章
相关标签/搜索