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 ...
随机推荐
- linux 启动network后报错:device eth0 does not seem to be present, delaying initialization
问题背景: 在vsphere client中部署ovf模板后启动linux 的network后提示:device eth0 does not seem to be present, delaying ...
- Java基础知识强化25:Java创建对象的四种方式
1. Java程序中对象的创建有四种方式: ● 调用new语句创建对象,最常见的一种 ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Const ...
- MySQL-视频跟随练习笔记
在表中添加某列 alter table tbl_user add email varchar(50); 在表中删除某列 alter table tbl_user drop email; 重命名某列 a ...
- 通用对象转换Json格式
public static string ObjectToJson<T>(IList<T> IL, params string[] args) { var Json = new ...
- hdu 1022
// hdu1022 这题算是我做的第一道栈的题目,之前看过栈的一些内容,做这道题的时候,可以模拟出过程,但是具体的代码不会写...所以决定练习一些栈和队列的问题,大概思路就是有三个数组和一个栈,先把 ...
- requirejs和r.js的心得
requirejs的GitHub:requirejs r.js的GitHub:r.js grunt-contrib-requirejs的GitHub:grunt-contrib-requirejs r ...
- socket.io 中文手册 socket.io 中文文档
socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on('connec ...
- 1202.2——Xcode部分快捷键
Ctrl+N(Next) 光标跳到下一行 Ctrl+P(Previous) 光标跳到上一行 Ctrl+B(Back) 光标向左边移动一个字符 Ctrl+F(Forward) 光标向右边移动一 ...
- C# LINQ 基本操作实例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- javascript 比较对象(hashcode)
javascript 对象的比较是比较坑爹的一件事,因为javascript对象比较的是引用地址!当两个内容完全一样的对象比较: var object1={ name:"1234 " ...