文档章节

Storm组件介绍

九劫散仙
 九劫散仙
发布于 2016/08/12 20:29
字数 1464
阅读 104
收藏 2
点赞 0
评论 0
(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);

© 著作权归作者所有

共有 人打赏支持
九劫散仙
粉丝 261
博文 174
码字总数 189625
作品 0
海淀
Kafka实战-Storm Cluster

1.概述   在《Kafka实战-实时日志统计流程》一文中,谈到了Storm的相关问题,在完成实时日志统计时,我们需要用到Storm去消费Kafka Cluster中的数据,所以,这里我单独给大家分享一篇Sto...

smartloli ⋅ 2015/06/18 ⋅ 0

大数据Storm相比于Spark、Hadoop有哪些优势(摘录)

一、可能很多初学大数据的伙伴不知道strom是什么,先给大家介绍一下strom: 分布式实时计算系统,storm对于实时计算的意义类似于hadoop对于批处理的意义。 storm的适用场景。 流数据处理。S...

风火数据 ⋅ 06/01 ⋅ 0

年薪40万的大数据工程师是如何安装Strom

Strom集群的安装配置 主机规划 一、准备服务器 l 关闭防火墙 chkconfig iptables off && setenforce 0 l 创建用户 groupadd hadoop && useradd hadoop  && usermod -a -G hadoop hadoop l ......

爱尚实训 ⋅ 04/23 ⋅ 0

大数据经典学习路线(及供参考)之 三

3.Storm实时计算部分阶段 实时课程分为两个部分:流式计算核心技术和流式计算计算案例实战。 1.流式计算核心技术 流式计算核心技术主要分为两个核心技术点:Storm和Kafka,学完此阶段能够掌握...

柯西带你学编程 ⋅ 05/22 ⋅ 0

Storm笔记整理(一):简介与设计思想

[TOC] 实时计算概述 有别于传统的离线批处理操作(对很多数据的集合进行的操作),实时处理,说白就是针对一条一条的数据/记录进行操作,所有的这些操作进行一个汇总(截止到目前为止的所有的统...

xpleaf ⋅ 04/12 ⋅ 0

Apache Storm 1.1.3 和 1.2.2 发布,分布式实时计算

Apache Storm 1.1.3 和 1.2.2 已发布,这是一个常规维护版本,其中包含许多重要的错误修复,可以提高 Storm 的性能,稳定性和容错能力。建议以前版本的用户升级到最新版本。 更新内容较多,详...

局长 ⋅ 06/06 ⋅ 0

Storm笔记整理(五):可靠性分析、定时任务与Storm UI参数详解

[TOC] 特别说明:前面的四篇Storm笔记中,关于计算总和的例子中的spout,使用了死循环的逻辑,实际上这样做是不正确的,原因很简单,Storm提供给我们的API中,nextTuple方法就是循环执行了,...

xpleaf ⋅ 04/14 ⋅ 0

基础-Tuple和Fields结构

Fields和Tuple Fields和Tuple 概述 路径:storm-core/src/jvm/org/apache/storm/tuple/ Tuple和Fields是Storm用来传输数据(即流)的结构体。其中Tuple是Storm的数据传输单位,每一个tuple由...

sinat_26019075 ⋅ 05/10 ⋅ 0

Storm笔记整理(二):Storm本地开发案例—总和计算与单词统计

[TOC] 概述 在Strom的API中提供了对象,这样在不用搭建Storm环境或者Storm集群的情况下也能够开发Storm的程序,非常方便。 基于Maven构建工程项目,其所需要的依赖如下: Storm本地开发案例1...

xpleaf ⋅ 04/12 ⋅ 0

大数据学习之(Storm)-原理详解!

角色 Client client的主要作用是提交topology到集群 Worker Worker是运行在Supervisor节点上的一个独立的JVM进程,主要作用是运行topology,一个topology可以包含多个worker,但一个worker只...

qq5af153121eb2c ⋅ 05/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 18分钟前 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

前言 我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)...

simpower ⋅ 28分钟前 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 31分钟前 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 38分钟前 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 39分钟前 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 47分钟前 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 50分钟前 ⋅ 0

Java对象的序列化与反序列化

Java对象的序列化与反序列化

Cobbage ⋅ 今天 ⋅ 0

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 今天 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部