`
- 浏览:
2184479 次
- 性别:
- 来自:
北京
-
(1)Topologies 拓扑
解释:
拓扑类似一个集装箱,所有的货物都会存储在集装箱里面最后被托运走,storm里面所有的代码和文件最终会被打包在一个拓扑中,然后提交在storm集群中运行,类似于Hadoop中的一个MapReduce的作业,最大的区别在于MapReduce最终会主动停止,Storm的Topologies不会主动停止,除非你强制kill掉它
相关拓展:
TopologyBuilder : Java里面构造Topology工具类
生产模式
Config conf = new Config();
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);
StormSubmitter.submitTopology("mytopology", conf, topology);
本地模式
import org.apache.storm.LocalCluster;
LocalCluster cluster = new LocalCluster();
(2)Streams 数据流
Stream是Storm里面的核心抽象模型,在分布式环境下一个数据流是由无限的tuple序列组成,这些通过数据源并行的源源不断的被创建出来,Stream的schema是由一个字段名标识,值类型可以是integer,long,shot,bytes,string,double,float,boolean,byte array当然我们可以自定义序列化类型。
每个流在声明时会被指定一唯一标识id,如果输出的流只有一个可以不用标识,默认指定的id是default
OutputFieldsDeclarer类负责输出标识
单个流声明:
declarer.declare(new Fields("single")
多个流声明:
declarer.declareStream("a", new Fields("data", "time", "countyId")
declarer.declareStream("b", new Fields("data", "time", "countyId")
declarer.declareStream("c", new Fields("data", "time", "countyId")
相关拓展:
Tuple:streams由一系列tuple组成
OutputFieldsDeclarer:用于声明流和他们的schema
Serialization:动态tuple类型和声明自定义序列化
(3)Spouts (喷嘴比喻数据源)
一个spout是由流组成的数据源在storm的拓扑里,通常情况下会读取外部的数据源
然后emit(发射)到拓扑里面,比如是kafka,MySQL或者redis等等,Spout有两种实现一种是可靠的消息实现,如果发送失败则会重试,另外一种是不可靠的消息实现可能会出现消息丢失,spout可以一次声明多个数据流通过OutputFieldsDeclarer类的declareStream方法,当然前提是你的SpoutOutputCollector里的emit也是多个流
Spout里面主要的方法是nextTuple,它里面可以发射新的tuple到拓扑,或者当没有消息的时候就return,需要注意,这个方法里面不能阻塞,因为storm调用spout方法是单线程的,其他的主要方法是ack和fail,如果使用了可靠的spout,可以使用ack和fail来确定消息发送状态
相关扩展:
IRichSpout:spout类必须实现的接口
BaseRichBolt :可靠的spout有ack确保
BaseBasicBolt :不可靠的spout
(4)Bolts 业务处理单元
所有的拓扑处理都会在bolt中进行,bolt里面可以做任何etl,比如过滤,函数,聚合,连接,写入数据库系统或缓存等,一个bolt可以做简单的事件流转换,如果是复杂的流转化,往往需要多个bolt参与,这就是流计算,每个bolt都进行一个业务逻辑处理,bolt也可以emit多个流到下游,通过declareStream方法声明输出的schema。
Bolt里面主要的方法是execute方法,每次处理一个输入的tuple,bolt里面也可以发射新的tuple使用OutputCollector类,bolt里面每处理一个tuple必须调用ack方法以便于storm知道某个tuple何时处理完成。Strom里面的IBasicBolt接口可以自动
调用ack。
相关拓展:
IRichBolt:bolts的通用接口
IBasicBolt:扩展的bolt接口,可以自动处理ack
OutputCollector:bolt发射tuple到下游bolt里面
(5)Stream grouping 流分组
分组定义了那个bolt可以收到上游的数据流,流分组定义了stream应该怎样在所有的bolt task中进行分区
目前storm内置8中分组接口可以满足大多数应用开发,你也可以通过 CustomStreamGrouping来自定义分组接口
(5.1)Shuffle grouping 随机的分发数据流,保证每个bolt可以得到相等数量的tuple
(5.2)Fields grouping
在grouping中stream通过字段进行分区分发,比如按照userid分组,那么storm能保证在同一个task中收到的userid是一样的,但是在不同的task中,他们的userid也是不一样的
(5.3)Partial Key grouping
同Fields grouping类似,但是这个流分组能在数据有倾斜的情况下做负载均衡
(5.4)All grouping
所有的bolt task都会收到此分组下的消息
(5.5)Global grouping
所有的stream都会发射到多个bolt task中的其中一个
(5.6)None grouping
等同于Shuffle grouping
(5.7)Direct grouping
由生产者控制把tuple直接发送到那个消费者的bolt中,需要在代码里面控制
(5.8)Local or shuffle grouping
如果目标bolt有一个或多个task,在一个worker工作进程中,tuple仅仅会分发
到在同一个进程的task中,分发方式类似shuffle grouping
扩展:
TopologyBuilder:使用这个类定义拓扑
InputDeclarer: 声明那些声明的流可以被指定的bolt接受
(6)Reliability 可靠性
使用ack保证,消息可以超时和重试
(7)Tasks 任务
每个spout和bolt会执行多个task横跨整个集群,每个task会在一个线程中执行
stream grouping定义了每个task送到到那个下游的task中,在使用TopologyBuilder时,可通过setSpout 和 setBolt方法进行设置
(8)Workers 工作者
Topologies执行会横跨在一个或多个worker上,每个worker是一个独立的jvm,会执行所有task里面的其中一部分task,比如一个拓扑的并行度是300并且有50个worker,那么每个worker上会执行6个task(6个线程在worker内部),storm会确保
所有的task尽量均衡的分布在所有worker中。
相关扩展:
设置worker数
conf..setNumWorkers(workNums);
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
【Storm组件安装部署】 Storm是一个开源的分布式实时流计算框架,它被广泛应用于实时日志分析、个性化推荐、实时监控等多个领域。这个文档主要聚焦于如何在单机环境下部署和运行Storm,尤其针对CentOS 6.4系统,...
**Storm组件应用说明书** 本文档将全面介绍Apache Storm的基础应用,旨在为初学者提供一份详细的入门教程,帮助读者理解并掌握Storm在大数据流计算中的核心功能和操作步骤。Storm是一款开源的分布式实时计算系统,...
Storm 组件 Storm 的核心组件包括: * Nimbus:Storm 的主控节点,负责管理整个拓扑结构。 * Supervisor:Storm 的工作节点,负责执行拓扑结构。 * Worker:Storm 的执行节点,负责执行具体的计算任务。 Storm ...
大数据处理框架:Storm:Storm基本组件理解.docx
Storm的基本单位是“topology”(拓扑结构),它可以理解为一个实时计算的网络图,包含spouts和bolts两个主要组件。 Spout是拓扑中的数据源组件,主要负责从外部数据源如文件、数据库或者消息队列中获取原始数据,...
01-storm简介 02-storm部署-1 03-storm部署-2 04-storm部署概念 05-streamgrouping 06-storm组件生命周期 07-storm可靠性1 08-storm可靠性2
### Storm简介及安装知识点梳理 #### 一、Storm简介 **Storm** 是一款由BackType公司开发的分布式实时计算系统,后被...通过本文介绍的知识点,读者可以对Storm有一个全面的了解,并掌握其安装和配置的基本方法。
这主要通过Storm的`KafkaSpout`组件实现。`KafkaSpout`是一个特殊的Spout,它负责从Kafka获取数据并将其作为流传递到Storm拓扑的其余部分。以下步骤概述了这一过程: 1. 添加依赖:在项目中引入Storm和Kafka相关的...
此外,Hadoop的编程模型基于JobTracker和TaskTracker,而Storm采用的是Topology概念,包含Nimbus、Supervisor、Worker、Spout和Bolt等组件。 Nimbus是Storm的作业调度器,类似于Hadoop的JobTracker,负责分配任务到...
实时计算:Apache Storm:ApacheStorm架构与组件详解.docx
下面我们将深入探讨Storm的核心组件、工作原理以及它在大数据处理中的作用。 1. **核心组件**: - **Nimbus**:作为主控服务器,负责任务调度和资源分配,确保拓扑结构的正确部署。 - **Supervisor**:运行在工作...
**四、Storm组件** 1. **Tuple**:Storm的基本数据结构,类似于键值对,用于在Spout和Bolt之间传递数据。 2. **Topology**:一个Storm应用由多个Spout和Bolt组成,它们通过Tuples连接形成拓扑结构,定义数据流的...
Storm是一个开源的分布式实时...总结来说,"storm的jar包"是Storm实时处理框架的基础,包含了运行和开发Storm应用所需的所有组件和库。通过深入理解和使用这个JAR包,开发者可以构建出高效、可靠的实时数据处理系统。
在单节点部署中,所有的 Storm 组件,包括 Nimbus、Supervisor 和 UI,都将运行在同一台机器上,适合于开发环境或简单测试。以下是详细的部署步骤: 一、安装介质准备 首先,你需要访问 Apache Storm 的官方网站 ...
- Bolts:逻辑处理组件,处理Spout传递的数据,进行过滤、聚合等操作,并发射处理结果。 - Tuples:Storm中的基本数据单元,用于在Spouts和Bolts之间传输数据。 在实际应用中,开发者需要根据业务需求定义Spouts...
通过本文对Storm源码的分析,我们深入了解了Storm的架构、工作原理以及核心组件的实现细节。这对于开发人员来说非常重要,不仅有助于更高效地利用Storm解决实际问题,还能为进一步的研究和优化提供基础。随着大数据...