Storm (实时分布式大数据处理系统) 简介

相比Hadoop的批处理,Storm的特点就是实时性。

组件

Storm集群主要由一个主节点和一群工作节点(worker node)组成,通过 Zookeeper进行协调。

主节点
主节点通常运行一个后台程序 —— Nimbus,用于响应分布在集群中的节点,分配任务和监测故障。这个很类似于Hadoop中的Job Tracker。

工作节点
工作节点叫worker,一般就是集群中的一个节点,也就是一个计算机。它同样会运行一个后台程序 ——Supervisor,用于收听工作指派并基于要求运行工作进程。每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。

topology
[tə'pɒlədʒɪ]
topology是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。也就是我们的整个应用程序。

Zookeeper
Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。

Spout
[spaʊt]  n. 喷水口
简而言之,Spout从来源处读取数据并放入topology。Spout分成可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。而Spout中最主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,如果没有新tuple发射则会简单的返回。

Bolt
[bəʊlt] n.门闩

Topology中所有的处理都由Bolt完成。Bolt可以完成任何事,比如:连接的过滤、聚合、访问文件/数据库、等等。Bolt从Spout中接收数据并进行处理,如果遇到复杂流的处理也可能将tuple发送给另一个Bolt进行处理。而Bolt中最重要的方法是execute(),以新的tuple作为参数接收。不管是Spout还是Bolt,如果将tuple发射成多个流,这些流都可以通过declareStream()来声明。

并行参数

worker,进程数。

Executor,线程总数。

Task,具体的spout和bolt的实例个数。一个Executor可以负责1个或多个task。一般地,task数等于executor数。

tuple分组策略

分布式处理的主要思想就是把大的任务划分成多个子任务,它们在不同的机器或线程中并行处理,最后汇合。以统计班上同学的平均成绩为例,说明问题。
bolt如何设计?
因为分布式的原因,同一bolt类的多个线程之间不能有数据共享。分十个机器,编号为i的机器统计学号末尾为i的同学数和他们的总成绩,最后汇总。
如何控制每一个bolt实例接收哪些学号的数据呢?
结合上文,编号为i的bolt实例只接受学号末尾为i的数据。可以按照tuple的字段分组。

tuple传递是通过序列化,套接字传输,反序列化实现的。
所谓的grouping策略就是在Spout与Bolt、Bolt与Bolt之间传递Tuple的方式。总共有七种方式:
1)shuffleGrouping(随机分组)
2)fieldsGrouping(按照字段分组,在这里即是同一个单词只能发送给一个Bolt)

//declare与emit是一一对应的。
declarer.declareStream("http", new Fields("event", "key"));
collector.emit("http", new Values(new MyClass(), key));
//设置bolt的时候指定按照哪个字段散列
builder.setBolt("httpCount", new AnalyseBolt()).fieldsGrouping("XX", "http", new Fields("key"));
//接收到tuple时按指定字段取值
public void process(Tuple tuple, BasicOutputCollector collector) {
	tuple.getValueByField("event") instanceof MyClass
}	

3)allGrouping(广播发送,即每一个Tuple,每一个Bolt都会收到)
4)globalGrouping(全局分组,将Tuple分配到task id值最低的task里面)
5)noneGrouping(随机分派)
6)directGrouping(直接分组,指定Tuple与Bolt的对应发送关系)
7)Local or shuffle Grouping

8)customGrouping (自定义的Grouping)

消息可靠性交付

要理解这个问题,需要看一下tuple在离开spout之后的生命周期。作为参考,下面是spout实现的接口

public interface ISpout extendsSerializable {
         void	open(Map conf, TopologyContext context,SpoutOutputCollector collector);
         void	close();
         void	nextTuple();
         void	ack(Object msgId);
         void	fail(Object msgId);
}

首先,Storm会通过Spout的nextTuple()方法从Spout申请一个tuple。在open方法中,Spout使用此方法提供的SpoutOutputCollector去发射一个tuple到输出streams中去。当发射一个tuple时,Spout会提供一个“message id”,用来后面区分不同的tuple。例如, KestrelSpout从kestrel队列中读取消息,然后在发射时会将Kestrel为消息提供的id作为“message
id”。发射一条消息到SpoutOutputCollector,如下所示:
_collector.emit(newValues("field1", "field2", 3), msgId);
然后,这个tuple会发送到消费bolts,同时Storm会跟踪已被创建的消息树状图。如果Storm检测到一个tuple已被“fully processed”, Storm将会原始的Spout task(即发射这个tuple的Spout)上调用ack()方法,参数msgId就是这个Spout提供给Storm的“message id”。类似的,如果这个tuple超时了, Storm会在原始的Spout task上调用fail()方法。注意, 一个tuple只能被创建它的Spouttask进行acked或者failed。因此,即使一个Spout在集群上正在执行很多tasks,一个tuple也只能被创建它的task进行acked或failed,而其他的task则不行。

storm UI

storm自带的一个仪表盘,见图1.

图1 storm自带的一个仪表盘

emitted,发射的tuple数。
transferred,若一个tuple被其他bolt读取,则transferred+1。
acked,tuple被完整处理。
failed,在处理过程中出现错误或超时的tuple数。超时参数可以设置。

时间: 2024-10-06 05:16:50

Storm (实时分布式大数据处理系统) 简介的相关文章

大数据处理系统是一个IT工具,还是业务系统呢?

对于企业的业务人员,特别是数据科学家人群来说,Informatica的Intelligent Data Platform不仅是一个智能化的大数据预处理工具,而且可以像业务系统一样为企业带来直接的价值. 互联网企业通常会强调细节和微创新,把产品的某一项功能做到极致,借此牢牢吸引大量用户.但是企业级厂商则不同,它们更倾向于将产品平台化.平 台化的好处是可以把尽量多的功能集成在一起,方便部署与管理,而且可以借平台屏蔽底层架构的复杂性.软件厂商尤喜平台化,比如数据保护厂商有数据保护和统 一管理平台,大数

大数据处理系统关键层次架构

在数据存储层,还有很多类似的系统和某些系统的变种,这里,我仅仅列出较为出名的几个.如漏掉某些重要系统,还请谅解. 以下是对上图中各层次架构的说明 一.数据存储层 宽泛地讲,据对一致性(consistency)要求的强弱不同,分布式数据存储策略,可分为ACID和BASE两大阵营. ACID是指数据库事务具有的四个特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).ACID中的一致性要求比较强,事务执行的结果必须是使数据

实时计算 流数据处理系统简单分析

一. 实时计算的概念 实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算. 主要应用的场景: 1) 数据源是实时的不间断的,要求用户的响应时间也是实时的(比如对于大型网站的流式数据:网站的访问PV/UV.用户访问了什么内容.搜索了什么内容等,实时的数据计算和分析可以动态实时地刷新用户访问数据,展示网站实时流量的变化情况,分析每天各小时的流量和用户分布情况) 2) 数据量大且无法或没必要预算,但要求对用户的响应时间是实时的.比如说: 昨天来自每

用于实时大数据处理的Lambda架构

1.Lambda架构背景介绍Lambda架构是由Storm的作者Nathan Marz提出的一个实时大数据处理框架.Marz在Twitter工作期间开发了著名的实时大数据处理框架Storm,Lambda架构是其根据多年进行分布式大数据系统的经验总结提炼而成.Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错.低延时和可扩展等.Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成Hadoop

独家 | 一文读懂大数据处理框架

前言 说起大数据处理,一切都起源于Google公司的经典论文:<MapReduce:Simplied Data Processing on Large Clusters>.在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页.网页请求日志:计算各种类型的派生数据:倒排索引.网页的各种图结构等等.这些计算在概念上很容易理解,但由于输入数据量很大,单机难以处理.所以需要利用分布式的方式完成计算,并且需要考虑如何进行并行计算.分

高速公路视图大数据处理应用探讨

近年来,随着高速公路通车里程的迅猛增长和车流量的快速增加,高速公路运营管理中暴露的新情况.新问题也逐年增多,特别是逃漏通行费问题,给正常运营秩序带来较大的冲击.为了解决偷逃漏费.路径识别等业务需求,其中在高速公路收费卡口逐步进行了监控高清化与智能化改造.在视图智能化处理方面将面临以下几个问题: 如何建立一个安全.实时.有效.智能化的视图大数据系统处理系统,利用车辆视图"多特征识别"真正满足高速公路偷逃漏费稽查工作高时效.高正确率要求; 如何建设一个适合高速公路场景高性能计算平台,实现大

《深入理解大数据:大数据处理与编程实践》一一导读

前 言 2012年以来,大数据(Big Data)技术在全世界范围内迅猛发展,在全球学术界.工业界和各国政府得到了高度关注和重视,掀起了一场可与20世纪90年代的信息高速公路相提并论的发展热潮. 大数据技术如此重要,已经被我国政府提升到国家重大发展战略的高度.2014年我国政府工作报告中指出:"设立新兴产业创业创新平台,在新一代移动通信.集成电路.大数据.先进制造.新能源.新材料等方面赶超先进,引领未来产业发展".由此可见,大数据已经被我国政府列为推动国家科技创新和引领经济结构优化升级

大数据时代你不得不了解的大数据处理工具

如今Apache Hadoop已成为大数据行业发展背后的驱动力.Hive和Pig等技术也经常被提到,但是他们都有什么功能,为什么会需要奇怪的名字(如Oozie,ZooKeeper.Flume). Hadoop带来了廉价的处理大数据(大数据的数据容量通常是10-100GB或更多,同时数据种类多种多样,包括结构化.非结构化等)的能力.但这与之前有什么不同? 现今企业数据仓库和关系型数据库擅长处理结构化数据,并且可以存储大量的数据.但成本上有些昂贵.这种对数据的要求限制了可处理的数据种类,同时这 种惯

大数据处理——Hadoop解析(一)

概述 这个时代被称之为大数据时代,各行各业生产的数据量呈现爆发性增长,并且基于这些爆发性增长的数据做深层次的数据挖掘.分析.处理.因此,我们可以很容易的感觉到,在这样一个大数据的时代,我们很多做事情的方法正在发生了改变.例如,基于大数据分析可以做疾病预测控制;基于大数据分析可以做交通流量预测控制;基于大数据分析可以做大型系统故障诊断预测;基于大数据分析可以做客户消费推荐.可以说,大数据时代可以解决很多以前非常难以解决的问题.可以这样讲,在这样一个时代,大数据可以让我们的生活变得更加美好. 突如其