storm入门

最近学习了storm的一些基础知识,感觉storm是一个非常强大的实时流处理系统。对其进行简要介绍如下:



STORM

1.什么是storm

Storm是一个开源的,分布式的,可靠的,实时数据流处理系统。类比Hadoop对数据进行批处理,storm对数据进行实时处理。

2.storm的应用场景

Storm的处理速度快吞吐量大,根据Storm官方网站的资料介绍,Storm的一个节点(Intel [email protected]的CPU,24 GB的内存)在1秒钟能够处理100万个100字节的消息。

(1)流处理(Stream Processing)

Storm最基本的用例是“流处理”。Storm可以用来处理源源不断流进来的消息,再写入数据库。它是不需要中间队列的。

(2)连续计算(Continuous Computation)

Storm的另一个典型用例是“连续计算”。Storm能保证计算可以永远运行,直到用户结束计算进程为止。比如可以连续发送数据到客户端,实时更新显示。

(3)分布式远程过程调用(Distributed RPC)

Storm的第三个典型用例是“分布式RPC”,由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为通用的分布式RPC框架来使用。可以将频繁的CPU密集型操作并行化。

Storm在实际中的具体应用:

Twitter业务的实时处理需求极高。几十亿的用户在不同高峰段通过手机、平板电脑、个人计算机等终端发布大量(说海量真是名副其实)的信息,同时大量的用户在Twitter上从这些海量的信息中搜索、查看关心的话题并且对它们进行转发和评论。这一切都需要强大的实时处理海量数据的能力。

Twitter还需要对一些应用提供实时的大数据服务,主要有:TwitterMap(用户根据Twitter 的Username进行地理位置的搜索,显示用户公开的Twitter 留言以及地理位置等相关信息),TwitterBar(将用户当前浏览的网站地址收藏到自己的Twitter 账号中,还可见当前访问网站的相关信息等)

2011年8月4日Twitter将Storm正式开源。具有实时、快速地处理海量大数据的能力,Storm能帮助Twitter和其他有此类需求的企业解决实时大数据处理问题。

在淘宝,storm被广泛用来进行实时日志处理,出现在实时统计、实时风控、实时推荐等场景中。一般来说,我们从类kafka的metaQ或者基于 hbase的timetunnel中读取实时日志消息,经过一系列处理,最终将处理结果写入到一个分布式存储中,提供给应用程序访问。我们每天的实时消息 量从几百万到几十亿不等,数据总量达到TB级。对于我们来说,storm往往会配合分布式存储服务一起使用。在我们正在进行的个性化搜索实时分析项目中, 就使用了timetunnel + hbase + storm + ups的架构,每天处理几十亿的用户日志信息,从用户行为发生到完成分析延迟在秒级。

3.版本

最高版本是1.0.1 (2016/4/30),一般安装0.9版本。

2013年12月,Storm 0.9.0成功发布。这个版本较之前版本具有更好的跨平台能力、UI更强大、安全性也有所增强,可以实现tuple的加密。

4.storm组件

Spout:Spout是Topology流的来源。一般Spout从外部来源读取Tuple,提交到Topology(如Kestrel队列或Twitter API)。Spout可分为可靠的和不可靠的两种模式。Spout可以发出超过一个流。

Bolt:Topology中的所有处理都在Bolt中完成,Bolt是流的处理节点。Bolt可以完成过滤、业务处理、连接运算、连接、访问数据库等业务。Bolt可以做简单的流的转换,发出超过一个流。

Stream:流是Storm的核心抽象。一个流是一个无界Tuple序列,Tuple可以包含整形、长整形、短整形、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以通过定义序列化器,在本机Tuple使用自定义类型。

Tuple: Storm将元组作为其数据模型。元组是消息传递的基本单元,是一个命名的值列表,字段的类型不限。本来元组应该是一个key-value的Map, 但是各个组件之间传递的元组的字段名称已经事先定义好,故只需要按照顺序写入各个value即可,元组是一个value的list。

Tuple本来应该是一个Key-Value的Map,由于各个组件间传递的tuple的字段名称已经事先定义好了,所以Tuple只需要按序填入各个Value,所以就是一个Value List。

一个没有边界的、源源不断的、连续的Tuple序列就组成了Stream。

Topology: Storm的分布式计算结构称为拓扑(topology),由stream(数据流)、spout(数据流的生成者)、bolt(运算)组成。当Topology在服务器上部署完之后,它就会一直运行下去,直到用户禁止相应的进程。

一个拓扑是一个图的计算。用户在一个拓扑的每个节点包含处理逻辑,节点之间的链接显示数据应该如何在节点之间传递。Topology的运行是很简单的。拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间的消息流动而形成逻辑上的拓扑结构。

把实时应用程序的运行逻辑打成jar包后提交到Storm的拓扑(Topology)。Storm的拓扑类似于MapReduce的作业(Job)。其主要的区别是,MapReduce的作业最终会完成,而一个拓扑永远都在运行直到它被杀死。一个拓扑是一个图的Spout和Bolt的连接流分组。

一个拓扑会一直运行,直到你杀死它。Storm会自动重新分配任何失败的任务。此外,即使主机已经关闭,消息已经被删除,Storm也能保证不会有数据丢失。

接下来通过分析storm的组件来理解storm的主要工作。简单来说,storm的工作就是:Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。

5.storm节点

Storm集群中有两类节点:主控节点(Master Node)和工作节点(Worker Node)。其中,主控节点只有一个,而工作节点可以有多个。

(1) 主控节点运行一个称为Nimbus的守护进程,类似于Hadoop的JobTracker。Nimbus负责在集群中分发代码,对节点分配任务,并监视主机故障。

(2) 每个工作节点运行一个称为Supervisor的守护进程。Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程。

Task(任务)

每个Spout或者Bolt在集群执行许多任务。每个任务对应一个线程的执行,流分组定义如何从一个任务集到另一个任务集发送Tuple。可通过TopologyBuilder类的setSpout()和setBolt()方法来设置每个Spout或者Bolt的并行度。

Worker(工作进程)

Topology跨一个或多个Worker节点的进程执行。每个Worker节点的进程是一个物理的JVM和Topology执行所有任务的一个子集。

6.Storm的操作模式

Storm有一个“本地模式”,用户可以在进程里面模拟一个Storm集群,然后进行类似实际集群上的开发工作。这种模式对于开发和测试十分有用。当用户准备好在一个真正的集群上提交Topology执行的时候,可以使用Storm命令行方便地从客户端提交一个Topology到集群上运行。在“集群模式“下,我们向Storm集群提交拓扑,它通常由许多运行在不同机器上的流程组成。

7.实例

语句生成spout:将一句话作为tuple发射

语句分割bolt:将语句分割为单词

单词计数bolt:保存每个特定单词出现的次数

上报bolt:维护一份所有单词对应的计数的表,当接收到一个tuple时,上报bolt会更新表中的技术数据,并终端打印。

时间: 2024-10-19 20:17:33

storm入门的相关文章

Storm入门(四)WordCount示例

Storm API文档网址如下: http://storm.apache.org/releases/current/javadocs/index.html 一.关联代码 使用maven,代码如下. pom.xml  和Storm入门(三)HelloWorld示例相同 RandomSentenceSpout.java /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor lice

_00019 Storm的体系结构介绍以及Storm入门案例(官网上的简单Java案例)

博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # Storm

Storm入门学习随记

推荐慕课网视频:http://www.imooc.com/video/10055 ====Storm的起源. Storm是开源的.分布式.流式计算系统 什么是分布式呢?就是将一个任务拆解给多个计算机去执行,让许多机器共通完成同一个任务, 把这个多机的细节给屏蔽,对外提供同一个接口.同一个服务,这样的系统就是分布式系统. 在多年以前并没有非常范用的分布式系统,即使存在,也都是限定在指定的领域, 当然,也有人尝试从中提取出共通的部分,发明一个通用的分布式系统,但是都没有很好的结果. 后来,Googl

Storm入门(Storm程序)

Storm简介 Storm是一个分布式实时流式框架,大多应用于以下场景:实时分析.在线机器学习.流式计算.分布式RPC ETL(BL分析)等等.同类型的框架有hadoop和spark.hadoop侧重于海量数据的离线计算,spark则更擅长实时迭代计算.要注意的是,storm并不直接处理数据,而是把我们的业务程序(逻辑)放在很多服务器上并发运行,待处理消息被分散到很多服务器上并发处理,以此扩展程序的负载能力. Direction 简单来说的话,Storm框架包含两个部分.一个是Storm程序,一

storm入门教程 第四章 消息的可靠处理【转】

4.1 简介 storm可以确保spout发送出来的每个消息都会被完整的处理.本章将会描述storm体系是如何达到这个目标的,并将会详述开发者应该如何使用storm的这些机制来实现数据的可靠处理. 4.2 理解消息被完整处理 一个消息(tuple)从spout发送出来,可能会导致成百上千的消息基于此消息被创建. 我们来思考一下流式的“单词统计”的例子: storm任务从数据源(Kestrel queue)每次读取一个完整的英文句子:将这个句子分解为独立的单词,最后,实时的输出每个单词以及它出现过

Storm入门(九)Storm常见模式之流聚合

流聚合(stream join)是指将具有共同元组(tuple)字段的数据流(两个或者多个)聚合形成一个新的数据流的过程. 从定义上看,流聚合和SQL中表的聚合(table join)很像,但是二者有明显的区别:table join的输入是有限的,并且join的语义是非常明确的:而流聚合的语义是不明确的并且输入流是无限的. 数据流的聚合类型跟具体的应用有关.一些应用把两个流发出的所有的tuple都聚合起来--不管多长时间:而另外一些应用则只会聚合一些特定的tuple.而另外一些应用的聚合逻辑又可

Storm入门(三)HelloWorld示例

一.关联代码 使用maven,代码如下. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0

storm入门教程 第一章 前言

转自:http://blog.linezing.com/?p=1847 storm:http://www.cnblogs.com/panfeng412/tag/Storm/ http://blog.linezing.com/?cat=92 1.1   实时流计算 互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家对信息实时响应.实时交互的需求,软件行业除了个人操作系统之外,数据库(更精确的说是关系型数据库)应该是软件行业发展最快.收益最为

Storm入门教程 第三章 Storm安装部署步骤[转]

本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出. 3.1 Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 1. 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态.Nimbus的作用类似

Storm入门教程 第五章 一致性事务【转】

Storm是一个分布式的流处理系统,利用anchor和ack机制保证所有tuple都被成功处理.如果tuple出错,则可以被重传,但是如何保证出错的tuple只被处理一次呢?Storm提供了一套事务性组件Transaction Topology,用来解决这个问题. Transactional Topology目前已经不再维护,由Trident来实现事务性topology,但是原理相同. 5.1一致性事务的设计 Storm如何实现即对tuple并行处理,又保证事务性.本节从简单的事务性实现方法入手