storm - 简介

Twitter storm a workshop for twitter storm 立即下载
一 Storm简介
       
         Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架,它原来是由BackType开发,后BackType被Twitter收购,将Storm作为Twitter的实时数据分析系统。
    实时数据处理的应用场景很广泛,例如商品推荐,广告投放,它能根据当前情景上下文(用户偏好,地理位置,已发生的查询和点击等)来估计用户点击的可能性并实时做出调整。

    twitter列举了storm的三大作用领域:

    1.信息流处理(Stream Processing)

       Storm可以用来实时处理新数据和更新数据库,兼具容错性和可扩展性,它可以用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中。

    2.连续计算(Continuous Computation)

       Storm可以进行连续查询并把结果即时反馈给客户,比如将Twitter上的热门话题发送到客户端。

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

   除此之外,Storm也被广泛用于以下方面: 

            精确的广告推送     在用户浏览产品的时候,将浏览记录实时性的搜集,发送到Bolt,由Bolt来根据用户的账户信息(如果有的话)完成产品的分类统计,产品的相关性查询等逻辑计算之后,将计算结果推送给用户;  

            实时日志的处理    Storm可以和一个分布式存储结合起来,实时性的从多个数据源发送数据到处理逻辑Bolts,Bolts完成一些逻辑处理之后,交给分布式存储框架进行存储,此时,Spout可以是多个;

       
         Storm可以用来并行处理密集查询,Storm的拓扑结构是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查 询进行计算,并返回查询结果

二 Storm 集群的基本组件

       Storm是一个分布式、高容错的实时计算系统,Storm对于实时计算的意义相当于Hadoop对于批处理的意义。Hadoop提供了Map和Reduce原语,使对数据进行批处理变的非常简单和优美。同样,Storm也对数据的实时计算提供了简单Spout和Bolt原语。

       Storm 集群表面上看和hadoop集群非常像,但是在Hadoop上面运行的是MapReduce的Job, 而在Storm上面运行的是Topology(拓扑),它们是非常不一样的 —关键的区别是: 一个MapReduce Job最终会结束, 而一个Topology永远运行(除非显式的杀掉它)。

        Storm集群里面有两种节点: 控制节点(master node)和工作节点(worker node)

        控制节点上面运行一个后台程序: Nimbus, 它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分布代码,分配工作给机器, 并且监控状态。
        每一个工作节点上面运行一个叫做 Supervisor 的节点(类似 TaskTracker)。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭 worker 工作进程。
        每一个工作进程执行一个 Topology (类似 Job)的一个子集;一个运行的Topology由运行在很多机器上的多个工作进程  Worker (类似 Child)组成。

                                                         

  

                                                                             Storm topology 结构

                                                                                                                                                         Storm VS MapReduce

        Nimbus和Supervisor之间的所有协调工作都是通过一个Zookeeper集群来完成,并且Nimbus进程和supervisor都是快速失败(fail-fast)和无状态的,所有的状态要么在Zookeeper里面, 要么在本地磁盘上。这也就意味着可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,它们可以继续工作, 就好像什么都没有发生过似的,这个设计使得storm不可思议的稳定。

Topologies -- 作业拓扑
           为了在Storm上面做实时计算, 要去建立一些topologies。一个topology就是一个计算节点所组成的图。Topology里面的每个处理节点都包含处理逻辑, 而节点之间的连接则表示数据流动的方向。

      运行一个topology是很简单的。首先,把你所有的代码以及所依赖的jar打进一个jar包。然后运行类似下面的这个命令:     

         strom jar all-your-code.jar backtype.storm.MyTopology arg1 arg2

       这个命令会运行主类: backtype.strom.MyTopology, 参数是arg1, arg2。这个类的main函数定义这个topology并且把它提交给Nimbus。storm jar负责连接到nimbus并且上传jar文件。

             因为topology的定义其实就是一个Thrift结构并且Nimbus就是一个Thrift服务,可以用任何语言创建并且提交topology。上面的方法是用JVM-based语言提交的最简单的方法, 看一下文章: 在生产集群上运行topology去看看怎么启动以及停止topologies。
   
         spout和bolt所组成一个网络会被打包成topology, topology是storm里面最高一级的抽象(类似 Job)。

    注:Thrift 是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
      
Stream -- 数据流
     Stream是storm里面的关键抽象,一个stream是一个没有边界的tuple序列。storm提供一些原语来分布式地、可靠地把一个stream传输进一个新的stream。比如: 你可以把一个tweets流传输到热门话题的流。
      Storm提供的最基本的处理stream的原语是spout和bolt 。可以实现Spout和Bolt对应的接口以处理你应用的逻辑。

spout -- 流的源头
        比如一个spout可能从Kestrel队列里面读取消息并且把这些消息发射成一个流。又比如一个spout可以调用twitter的一个api并且把返回的tweets发射成一个流。

      通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,之后发送到Stream中。Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停的调用该函数。


                                                
                                             



注:    Kestrel是一个scala写的twitter开源的消息中间件,特点是高性能、小巧(2K行代码)、持久存储(记录日志到journal)并且可靠(支持可靠获取)。 Kestrel的前身是Ruby写的Starling项目,后来twitter的开发人员尝试用scala重新实现。

  
Bolt -- 处理逻辑
       负责处理输入的Stream,并产生新的输出Stream。Bolt可以执行过滤、函数操作、Join、操作数据库等任何操作。Bolt是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息之后会调用此函数,用户可以在此方法中执行自己的处理逻辑。bolt可以接收任意多个输入stream, 作一些处理, 有些bolt可能还会发射一些新的stream。一些复杂的流转换, 比如从一些tweet里面计算出热门话题, 需要多个步骤, 从而也就需要多个bolt。 Bolt可以做任何事情: 运行函数、过滤tuple、 聚合、 合并以及访问数据库等等。
 
                                                                                                                                                                                                                                                                                                                 

                                                                                             Spout 与 Bolt
 

  注:1. topology里面的每一个节点都是并行运行的。 在topology里面, 可以指定每个节点的并行度, storm则会在集群里面分配多个线程来同时计算。 
          2.一个topology会一直运行直到显式停止它。storm自动重新分配一些运行失败的任务, 并且storm保证你不会有数据丢失, 即使在一些机器意外停机并且消息被丢掉的情况下。

       运行中的Topology主要由以下三个组件组成的: Worker processes、   Executors  threads以及 Tasks

          它们的数量关系如下图所示:
       Spout或者Bolt的Task个数一旦指定之后就不能改变了,而Executor的数量可以根据情况来进行动态的调整。默认情况下# executor = #tasks即一个Executor中运行着一个Task。
                                                                       

                                                                    
                                                 

三 数据模型

        storm使用tuple来作为它的数据模型。每个tuple是一堆值,每个值有一个名字,并且每个值可以是任何类型, 一个tuple可以看作一个没有方法的java对象。总体来看,storm支持所有的基本类型、字符串以及字节数组作为tuple的值类型。也可以使用自己定义的类型来作为值类型, 只要实现对应的序列化器(serializer)。

        一个Tuple代表数据流中的一个基本的处理单元,例如一条cookie日志,它可以包含多个Field,每个Field表示一个属性。

                                           
        一个没有边界的、源源不断的、连续的Tuple序列就组成了Stream。Tuple本来应该是一个Key-Value的Map,由于各个组件间传递的tuple的字段名称已经事先定义好了,所以Tuple只需要按序填入各个Value,所以就是一个Value List。

                                                          
                                                                                        
              

四 流分组策略(Stream grouping)

        流分组策略告诉topology如何在两个组件之间发送tuple。 要记住, spouts和bolts以很多task的形式在topology里面同步执行。如果从task的粒度来看一个运行的topology, 它应该是这样的:

                                                                             

                                            从task角度来看topology

当Bolt A的一个task要发送一个tuple给Bolt B, 它应该发送给Bolt B的哪个task呢?

stream grouping 专门回答这种问题的。在我们深入研究不同的stream grouping之前, 让我们看一下storm-starter里面的另外一个topology。WordCountTopology读取一些句子, 输出句子里面每个单词出现的次数.


TopologyBuilder builder =newTopologyBuilder();

builder.setSpout(1,new RandomSentenceSpout(),5);

builder.setBolt(2,new SplitSentence(),8)
 .shuffleGrouping(1);

builder.setBolt(3,new WordCount(),12)
 .fieldsGrouping(2,newFields("word"));

         SplitSentence对于句子里面的每个单词发射一个新的tuple, WordCount在内存里面维护一个单词->次数的mapping, WordCount每收到一个单词, 它就更新内存里面的统计状态。

  1. 最简单的grouping是shuffle grouping, 它随机发给任何一个task。上面例子里面RandomSentenceSpout和SplitSentence之间用的就是shuffle grouping, shuffle grouping对各个task的tuple分配的比较均匀。
  2. 一种更有趣的grouping是fields grouping, SplitSentence和WordCount之间使用的就是fields grouping, 这种grouping机制保证相同field值的tuple会去同一个task, 这对于WordCount来说非常关键,如果同一个单词不去同一个task, 那么统计出来的单词次数就不对了。

    注:fields grouping是stream合并,是stream聚合以及很多其它场景的基础。在背后呢, fields grouping使用的一致性哈希来分配tuple。

  Storm支持的组分配策略如下:

       ShuffleGrouping:随机选择一个Task来发送。
       FiledGrouping:根据Tuple中Fields来做一致性hash,相同hash值的Tuple被发送到相同的Task。
       AllGrouping:广播发送,将每一个Tuple发送到所有的Task。
       GlobalGrouping:所有的Tuple会被发送到某个Bolt中的id最小的那个Task。
       NoneGrouping:不关心Tuple发送给哪个Task来处理,等价于ShuffleGrouping。
       DirectGrouping:直接将Tuple发送到指定的Task来处理。
  

  Storm的组分配策略的概念类似于MapReduce的Partition机制,通过使用一些分组策略原语来为Tuple设置路由。


五 小结
         Storm这种 高可拓展性,能处理高频数据和大规模数据的实时流计算解决方案将被应用于实时搜索,高频交易和社交网络上,其应用场景将会越来越广泛。

Storm @Twitter This paper describes the use of Storm at Twitter 立即下载

相关推荐

在VSCode中使用LaTex+(grammarly语法检测,chatgpt翻译,Sumatra PDF 轻量级pdf阅读器)

整个文章分为以下几个内容,打 * 的是必须要安装的。

u011895157的博客 2万+

Storm是一个分布式实时计算系统,由Twitter开源,它被设计用于处理无界数据流,并能够可靠地处理大量的数据

Storm的拓扑结构是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查询进行计算,并返回查询结果。然后,拓扑中的“DRPC Spout”会接收从DRPC服务器传来的远程调用流,从而执行该函数。对于每一次函数调用,Storm的拓扑结构将函数的参数视为输入流,并将函数运行的结果作为输出流。事务性消息处理:这是Storm的一个高级特性,允许你在消息的分布式处理中保持精确的事务语义。Storm的分布式远程过程调用(DRPC)功能是一个非常强大的工具,它允许你在Storm集群上并行执行复杂的查询和计算。

[Blog][Domain] programb.blog.youkuaiyun.com 652

C语言的文件读取与写入操作

学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。 C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是

wzyxdwll的博客 3万+

Twitter Storm 概念

概念 这个页面列出了storm的主要概念和查找更多信息的链接。讨论的概述有: 1.拓扑(Topologies) 2.流(Streams) 3.喷嘴(Spouts) 4.螺栓(Bolts) 5.流分组(Stream groupings) 6.可靠性(Reliability) 7.任务(Tasks) 8.工作者(Workers) 9.配置(C...

weixin_33895657的博客 220

Workbench中基于nCode的列车转向架随机振动疲劳寿命预测方法

本文详细介绍了在ANSYS Workbench中结合nCode进行列车转向架随机振动疲劳寿命预测的完整方法。通过几何清理、模态分析、PSD载荷定义及随机振动求解,并重点阐述了nCode中Dirlik等疲劳算法的选择与应用,为轨道交通关键部件的可靠性设计提供了系统的仿真分析流程与工程实践指导。

weixin_29234423的博客 473

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

Storm详细配置及应用

Storm是一款分布式实时计算系统,由Twitter公司开发并开源。它提供了高容错性、高可靠性和高性能的实时流处理能力,可以用于处理大规模的、高速的数据流。Storm的架构非常灵活,可以根据需求进行可扩展的部署。它将计算任务划分为多个任务,分布在多个节点上并行执行,通过消息传递进行协调和通信。Storm还提供了强大的容错机制,当节点出现故障时,它会重新分配任务到其他节点,并保证任务的可靠性。Storm的应用范围非常广泛,例如实时分析、实时搜索、实时推荐等。

runqu的博客 1661

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3341

twitter 数据集处理_使用Twitter Storm处理实时大数据

Hadoop是大数据分析的明显王者,它专注于批处理。 该模型足以应付许多情况(例如对Web编制索引),但是存在其他使用模型,其中需要来自高度动态来源的实时信息。 解决了这个问题后,Nathan Marz引入了Storm(现在通过BackType通过Twitter引入)。 Storm不是在静态数据上运行,而是在预计会连续的流数据上运行。 Twitter用户每天产生1.4亿条推文,不难看出这项技术...

cusi77914的博客 1718

2026年摩尔线程数字IC面试试卷带答案

本文摘要: 该试卷为数字IC设计笔试,满分120分,时长90分钟,包含单选题、波形分析题、多选题和代码设计题。重点考察时序约束(如set_false_path)、建立/保持时间、逻辑化简、复位机制、AXI协议、半导体工艺、状态机、GPU架构等核心知识点。多选题涉及异步FIFO设计、Verilog综合、亚稳态处理、C++关键字和低功耗技术。代码题要求实现单比特信号去毛刺电路,需稳定4个时钟周期才输出。试题解析详细,标注了企业面试高频考点,如摩尔线程自研的MUSA架构和花港GPU架构特点。整体内容专业性强,覆盖

Open 98

OpenSpec 完全指南 config.yaml文件

不管是项目内还是全局存放,自定义工作流都要遵守以下规则,否则会导致OpenSpec无法识别,新手一定要记牢:一个文件夹 = 一个工作流:工作流文件夹的名称,就是中schema字段要填写的名称;每个工作流文件夹必须包含:这是工作流的核心定义文件,没有它,OpenSpec无法识别这个工作流;模板文件统一放templates/目录:如果需要自定义生成文件的模板(比如统一的提案模板、任务模板),就放在工作流文件夹下的templates/里,OpenSpec会自动识别;

h a 6 6 6 c k 为 你解决复杂难题! 1421

Twitter Storm简介与入门

作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://xumingming.sinaapp.com/109/twitter-storm简介/   本文翻译自storm官方wiki:  https://github.com/nathanmarz/storm/wiki/Rationale 背景 过去的十

技术博客 3720

优化dalsa相机检测界面

上节实现了使用qt结合dalsa相机显示检测到缺陷的画面,由于窗口过于简陋,本节将进行一个界面优化。

A1983Z的博客 988

Storm简介

所以如果你在做一个计数应用, 那么你每次更新到总数里面的是整个batch里面的tuple数量。将topology发布到Storm集群,将预先打包成jar文件的topology和配置信息提交到nimbus服务器上,一旦nimbus接收到topology的压缩包,会将jar包分发到足够数量的supervisor节点上,当supervisor节点接收到了topology压缩文件,nimbus就会指派task到每个supervisor并且发送信号指示supervisor生成足够的worker来执行指派的task。

Java坤坤的博客 1718

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Storm 简介

一、Storm 简介 Storm 是 Apache 旗下免费开源的分布式实时计算框架。Storm可以轻松、可靠地处理无限 数据流,对实时分析、在线机器学习、连续计算、分布式RPC,ETL等提供高效、可靠的支 持。 二、什么是分布式计算 分布式计算,将一个任务分解为多个任务,分发给多台计算机,节约整体计算时间。 注:集中式计算,与分布式相对,一个任务一台计算机负责,多个任务多个计算机,不节约整 体计算时间。 三、Storm 分布式实时计算框架的要点 ① 开源,遵循Apache理念,项目创立便是开源 ② 流式计

1744

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Apache Storm简介及安装

一、环境准备 3台虚拟机 ○ 主机名分别是:L0, L2, L3 ○ 操作系统:CentOS 6.7 ○ 已经装有JDK 7 ○ 已经装有 zookeeper-3.4.10 apache-storm-0.9.6.tar.gz 二、Storm简介      Apache Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不...

东语的专栏 5517

Storm简介——初始Storm

一、什么是Storm Strom是由Twitter开源的类似于Hadoop的实时数据处理框架。Strom是分布式流式数据处理系统,强大的分布式集群管理、便捷的针对流式数据的编程模型、高容错保障这些都是其成为流式实时数据处理的首选。 二、Storm特点与优势 1)易用:为复杂的流计算模型提供了丰富的服务和编程接口,开发迅速、容易上手学习...

diantu6020的博客 349

storm简介

场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳

it_man的专栏 2562

大数据组件之Storm简介

简介 Storm是一个开源的分布式实时计算框架。 特点 支持水平横向扩展 高容错性,通过ack机制每个消息都不丢失(好奇该特性如何实现) 处理速度快,每个节点每秒处理超过一百万个元组(tuples) 其他 各编程语言支持友好 支持本地模式 支持图形化界面管理 与其他计算框架比较 MapReduce(Hadoop家族组件):批处理,适合海量离线处理场景 Spark Streaming:并非真正意义上的流处理,而是微批处理,对数据流进行极小粒度的拆分,近似达到流处理的效果(微分原理) Fl

GAOXINXINGgaoxinxing的博客 3225

Storm简介及安装

文章目录Storm简介及安装Storm简介实时计算系统的出现实时计算系统的特性Storm基本概念Storm基本特性Storm架构 Storm简介及安装 Storm简介 实时计算系统的出现 ​ 全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上 得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为...

qq_43502858的博客 296
上一篇: ZooKeeper伪分布式集群安装及使用
下一篇: storm-安装
张哲BJUT
博客等级 码龄15年 0粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值