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 ...
随机推荐
- AsMVC:一个简单的MVC框架的Java实现
当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍sp ...
- [转] gdb 查看vector, list, map 内容
转:http://blog.chinaunix.net/uid-13982689-id-34282.html先下载gdb_stl_utils.tar.gz, extract it, and run m ...
- jQuery.each() 的5个案例
1.基本的jQuery.each实例 看看 each() 函数是如何处理一个 jQuery 对象的.首先选取所有的a标签 并且打印出他们的href属性. 需要注意的是, 在 each() 当中使用 j ...
- Android AIDL图解
代码来自:http://www.cnblogs.com/mandroid/archive/2011/02/26/1965428.html (XXX.AIDL自动生成的IXXX.java类中 ...
- SpringMVC05使用注解的方式
<body> <a href="add">新增</a> <a href="update">修改</a> ...
- c#将Excel数据导入到数据库的实现代码(转载)
假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码如下: using System; using System.Collections.Generic ...
- 武汉科技大学ACM :1005: C语言程序设计教程(第三版)课后习题6.6
Problem Description 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身. 例如:153是一个水仙花数,因为1 ...
- MySQL查询优化处理
查询的生命周期的下一步是将一个sql转化成一个执行计划,MySQL再依照这个执行计划和存储引擎进行交互.这包括多个子阶段:解析sql,预处理,优化sql执行计划.这个过程中任何错误(例如语法错误)都可 ...
- 由setTimeout()里的this引出的this
example 1: window.id='windowid'; function M(){ this.id='Mid'; this.f1=function(){console.log(this.id ...
- Selenium2+Python自动化测试实战
本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...