Storm概念介绍
Storm核心概念如下:
1、Tuple:元组
Tuple即元组,是一个拓扑Topology中的Spout和Bolt组件之间数据传递的基本单元。元组中的字段可以是任何类型的对象,Storm使用元组作为其数据模型,支持所有的基本类型、字符串、和字节数组。
Spout中nextTuple()方法产生元组通过收集器Collector发射给Bolt,Bolt中execute()方法接收来自Spout发射的元组(订阅Spout中declareOutputFields参数声明的的字段后)后处理或继续发送到下一个Bolt。
2、Stream:流
Stream即流是Storm的核心抽象,是一个无界的元组序列。源源不断传递的元组就组成了流,在分布式环境中并行的创建和处理。流由元组构成,使用OutputFieldsDeclarer声明流机器模式(直接分组等)。
流被定义成由元组字段进行命名的方式,默认元组包含整型Integer、长整型Long、短整型Short、字节byte、字符String、双精度浮点型Double、单精度浮点型Float、布尔型Boolean和字节数据Byte[],还可以
自定义序列化器以便本地元组可以使用自定义类型(自定义序列化必须实现ISerialization接口,然后通过使用CONFIG.TOPOLOGY_SERIALIZATIONS这个配置进行注册使用)。
Spout是流的源,通常从外部数据源读取数据生成元组并发射到拓扑中。外部数据源包括Kafka、HDFS、HBase、Hive、Redis或Kestrel。
Bolt接收任何数量的输入流执行处理后,可能结束或生成新的流提交到拓扑,如果生成新的流则需要多个Bolt。Bolt可以执行运行函数、过滤元组、连接流和连接数据库等操作。
一个拓扑中的每个节点均可并行执行,也可以指定拓扑中跨集群执行的线程数量。一个拓扑会一直执行,直到手动杀死。Storm会重新分配任何失败的任务,如果主机宕机或消息被删除,Storm仍然能保证不
会有任何数据丢失。
每个流被声明后都会赋予一个ID,如果是单个流的Spout或Bolt,OutputFieldsDeclarer也能声明一个不指定ID的单流,这种情况下,流被赋予默认的ID值。
3、Spout:喷口
Spout即喷口是拓扑中流的来源,是一个拓扑中产生源数据流的组件,通常情况下Spout会从外部数据源Kafka、HDFS、HBase、Hive、Redis或Kestrel中读取数据,然后转换为拓扑内部的源数据。Spout支持可
靠和不可靠两种方式,如果是可靠的Spout遇到处理元组失败会重新发射;不可靠的Spout遇到元组处理失败则跳过。Storm会不停的循环调用Spout中的nextTuple()方法,用户只要在此方法中生成源数据即可。
Spout支持多个流,可以通过OutputFieldsDeclarer类的declareStream方法来声明多个流,使用SpoutOuputCollector类的emit执行流的提交。Spout的主要方法是nextTuple()方法,nextTuple()方法会产生一
个或多个Tuple到拓扑中,如果没有新的Tuple则返回。Spout的其他常用方法是ack()和fail()方法,当有新的Tuple从Spout发出时,ack()和fail()会被调用。不可靠的Spout不调用ack()和fail(),可靠的Spout会
调用ack()和fail()方法。
4、Bolt:螺栓
Bolt即螺栓,是一个拓扑中流的处理节点,Bolt可以完成过滤、业务处理、连接运算、数据库等操作。Bolt支持多个流,以通过OutputFieldsDeclarer类的declareStream方法来声明多个流,使用
OuputCollector类的emit指定发射的流。
5、Topology:拓扑
Topology即拓扑,是Storm中运行的一个实时流数据处理的应用程序,由各个组件间的消息流动而形成逻辑上的拓扑结构。Storm的Topology类似于Hadoop的MapReduce作业,都是打成一个jar包在集群中运行,
主要区别是MapReduce的Job处理完成后会结束,只有Mapper和Reducer两个组件构成;Storm的Topology永远都在运行直到被强制杀死,由一个Spout和多个Bolt组件构成。
6、Master Node和Worker Node:主控节点和工作节点
Master Node和Worker Node即主控节点和工作节点,Storm生产环境中的集群分为主控节点和工作节点,其中主控节点只有一个(直到0.9x系列Storm的nimbus仍存在单点故障,不支持HA),而工作节点可以
有多个。
7、Nimbus和Supervisor:Numbus进程和Supervisor进程
Nimbus即主控节点上运行的一个守护进程,类似于Hadoop的JobTracker。Numbus进程负责在集群中分发代码、对节点任务分配和监控集群节点故障。Supervisor即工作节点上运行的一个守护进程,类似
Hadoop中的TaskTracker,Supervisor进程负责监听其主机上以分配的作业,启动和停止Nimbus已经分配的工作进程。
8、Stream Grouping:流分组
Stream Grouping即流分组,是拓扑中定义的一部分,为每个Bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在Bolt的任务之间进行分发。Storm内置了7中流分组方式和通过实现
CustomStreamGrouping接口可以执行自定义的流分组。
9、Worker进程、Task任务、Executor线程
Worker进程是每个Spout/Bolt中运行具体处理逻辑的进程。每个Worker进程是一个物理的JVM和拓扑中执行所有任务的一个子集。使用Config.TOPOLOGY_WORKERS配置项设置执行拓扑时分配的Worker数量。
Worker进程中运行的是Executor线程,Executor线程中运行的是Spout/Bolt实例。
10、Reliability:可靠性
Storm通过将每个Spout发射的元祖记录在的一个元祖树中,然后监控每个Spout的元组树并检测树中的元祖什么时候会成功完成。每个拓扑都有消息超时时间,如果Storm在超时之前未能检测到Spout元祖处理完成则
会把元祖置为失败并会重新发射它。
Storm概念介绍的更多相关文章
- Storm概念、原理详解及其应用(一)BaseStorm
本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数“wordcount” ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...
- Linux LVM硬盘管理之一:概念介绍
一.LVM概念介绍: LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻 ...
- Java SE/ME/EE的概念介绍
转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...
- rocketMq概念介绍
rocketMq官网 http://rocketmq.apache.org/ rocketMq逻辑概念介绍 rocketMq逻辑图 备注: 改图片分享自李占卫的网上家园 说明: 在rocketM ...
- java 并发多线程 锁的分类概念介绍 多线程下篇(二)
接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...
- Airflow Python工作流引擎的重要概念介绍
Airflow Python工作流引擎的重要概念介绍 - watermelonbig的专栏 - CSDN博客https://blog.csdn.net/watermelonbig/article/de ...
- spring batch (一) 常见的基本的概念介绍
SpringBatch的基本概念介绍 内容来自<Spring Batch 批处理框架>,作者:刘相. 一.配置文件 在项目中使用spring batch 需要在配置文件中声明: 事务管理器 ...
- helm-chart-1-简单概念介绍-仓库搭建-在rancher上的使用
简单的概念介绍: Chart是helm管理的应用的打包格式,一个chart对应一个或一套应用.内部是一系列的yaml描述文件,以为为yaml 服务的文件. 三个部分,helm .tiller.repo ...
随机推荐
- ios AFNetworking 有用篇
在寻常开发中,af是个非常好用的东西.非常喜欢.可是网上的af找了好多都不太全面,不有用.所以我今天做了一个demo.有上传下载的. 比較有用.希望大家可以用到. 去我github下载demo git ...
- Chapter 8. Introduction to multi-project builds 多工程构建介绍
Only the smallest of projects has a single build file and source tree, unless it happens to be a mas ...
- vim命令---存阅
命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...
- Genymotion 模拟器 VirtualBox
准备 介绍: 1.Genymotion安卓模拟器其实不是普通的模拟器,严格来说,genymotion是虚拟机,被网传定义为模拟器,加载APP的速度比较快,操作起来也很流畅.2.Genymotion依赖 ...
- Sqlserver数据库日志太大如何快速删除
sqlserver使用在windows系统中,如果文件超上百GB了,我们还直接删除不了,这个问题我以前的apache日志就碰到过,至今还没删除呢,那么Sqlserver数据库日志太大如何快速删除呢,有 ...
- javascript实现silverlight pivotViewer控件
一时无事,就用js实现了一个silverlight pivotViewer控件来练手. 实现效果: silverlight PivotViewer说明地址:https://msdn.microsoft ...
- Android弹性ScrollView
开袋即食 import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; ...
- Windows Server 2008关闭internet explorer增强的安全配置
服务器系统要求很高的安全性,所以微软给ie添加了安全增强.这就使得ie在Internet区域的安全级别一直是最高的,而且无法进行整体调整. 关闭IE SEC服务器系统要求很高的安全性,所以微软给ie添 ...
- Java中 int和Integer的区别+包装类
--今天用Integer 和Integer 比较 发现有问题,于是去查了查. 1.Java 中的数据类型分为基本数据类型和引用数据类型 int是基本数据类型,Integer是引用数据类型: Inget ...
- phpcms v9 分页
phpcms的分页很简单,只需在需要分页的地方写入如下代码即可: <div id="pages">{$pages}</div> 连样式都有了,如果你是调用的 ...