storm翻译(2):Concepts

Concepts:概念

原文:http://storm.apache.org/documentation/Concepts.html

这个列表展示了storm中的主要概念和相关详细信息。这些概念是:

  1. Topologies
  2. Streams
  3. Spouts
  4. Bolts
  5. Stream groupings
  6. Reliability
  7. Tasks
  8. Works

Topologies

实时处理逻辑被包含在一个storm topology中。一个storm topology 与MapReduce job相似。其中一个关键不同是MapReduce job最终会停止,但是topology会一直运行(除非你kill它)。一个topology是一系列通过数据流连接起来的spout和bolt。下面将描述这些概念。

更多资源:

Streams

Stream是storm的核心抽象。Stream是通过分布式方式平行创造出的一个无限制的tuples队列。Stream要为tuples中的fields(属性)命名。在默认情况下,tuples中可以有integers,longs,shorts,bytes,Strings,doubles,floats,booleans和byte arrays。当然,你也可以在tuples中使用自定义序列化(serializers)类型。

每一个Stream在声明时都会给一个id。因为单一流的spouts和bolts非常常见,OutputFieldsDeclarer有非常方便的方法声明一个没有指定id的流。在这种情况下,这个流被给定了一个默认id:“default”

更多资源:

Spouts

Spout是storm中流的源头。通常的spouts从外部数据源中读取数据然后向topology中发射。Spout分为可重发(reliable)和非可重发(unreliable)两种。一个可重发的spout会在storm处理失败后再次发送处理失败的tuple,而非可重发的spout在发射完一个tuple之后就不再关注后续处理。

Spout可以发射多条Stream。可以使用OutputFieldsDeclarer中的declareStream方法声明多个Stream,并在使用时通过SpoutOutputCollector的emit方法发射数据。

Spout中最主要的方法是nextTuple。nextTuple可以向topology发射数据或在没有数据要发射的时候返回。在spout实现类中没有必要给nextTuple加锁,因为storm会在同一个线程中调用所有的spout方法。

其他两个重要的方法是ack和fail。当storm发现从spout发射出的tuple在整个topology过程中处理成功或失败时,会调用响应的ack或fail方法。只有在可重发的spout中才会调用ack或fail方法。

更多资源:

Bolts

Topologies中的所有处理过程都是在bolts中完成的。Bolts通过过滤(filtering)、方法(function)、聚合(aggregation)、连接(joins)、访问数据库等方式做任意数据操作。

Bolts可以做简单的Stream转换。但是做复杂的Stream转换需要在更多的bolt中执行多个步骤。举例来说:讲一个tweet Stream转换为一个热门图片Stream至少需要两个步骤:一个bolt统计每个图片的关注者(retweets),另一个bolt算出前几名的图片(你可以用更加可拓展的方式处理这个数据Stream转换,比如使用3个bolt)

bolts可以发射多条Stream。可以使用OutputFieldsDeclarer中的declareStream方法声明多个Stream,并在使用时通过SpoutOutputCollector的emit方法发射数据。

当你在bolt中声明了一个输入Stream,就意味着bolt从另一个组件(component)上订阅了一个特定的Stream。如果你希望订阅另一个组件上的所有流,需要分别声明订阅。InputDeclarer提供了一个通过默认Stream id订阅流的方法。比如declarer.shuffleGrouping("1")表示你从组件1上订阅了默认流,相当于declarer.shuffleGrouping("1", DEFAULT_STREAM_ID).

Bolt中的主方法是execute,每从输入Stream中读取数据时会调用它。Bolts通过OutputCollector发射新的tuples。Bolts需要在OutputCollector发射每个tuple完成之后调用ack方法,以便于storm知道tuple什么时候完成(可以最终确认原始spout发射的tuple是处理成功的)。通常情况下,tuple每处理一个输入tuple,会在输入tuple的基础上发射0或多个tuples,然后ack输入tuple,storm提供了一个接口IBasicBolt可以自动的调用ack方法。

在bolts中启动多个线程进行异步处理数据是一个完美的方法。OutputCollector是线程安全的,并且可以随时调用。

更多资料:

Stream groupings(steam 组操作)

定义在topology中,每个bolt选择哪个Stream作为输入。一个Stream grouping定义了Stream在多个bolt’s tasks中如何分配。

在storm中有7种内置的Stream grouping方式,你可以通过实现CustomStreamGrouping接口来创建自己的Stream grouping。

  1. Shuffle grouping: Tuples被随机分配到每一个bolt’s task,以便于每一个bolt’s task获得相同数量的tuples。
  2. Fields grouping: Stream被根据属性(fields)进行分组。举例:如果一个Stream根据“user-id”分组,具有相同“user-id”属性的tuples会被发往同一个bolt’s task,具有不同“user-id”的tuples有可能发往不同的bolt’s task。
  3. All groupingStream会被重复的发往每一个bolt’s task,使用这个方式需要慎重。
  4. Global grouping输入流会发往bolt’s tasks中的一个。具体来说,会发往最小id的task
  5. None grouping:这种方式表示你并不关心Stream如何分组。当前版本中,它的效果等同于shuffle grouping。Eventually though, Storm will push down bolts with none groupings to execute in the same thread as the bolt or spout they subscribe from (when possible).
  6. Direct grouping:这是一个特殊的grouping。这种方式可以让tuple的生产者决定消费者中哪一个task能够接收这个tuple。只有当一个Stream声明是一个direct stream时,Direct grouping方式才能生效。必须使用[emitDirect](/apidocs/backtype/storm/task/OutputCollector.html#emitDirect(int, int, java.util.List)方法,才能将tuple发送到一个direct Stream中。一个bolt可以通过两种方式获取到消费者的taskid,一种是使用TopologyContext获取,另一种是通过跟踪OutputCollector中的emit方法的返回值(当tuples发送之后,会返回task ids)
  7. Local or shuffle grouping:如果目标bolt在一个worker进程中有多个或一个tasks,tuples会随机发送到进程内的tasks。否则,这种方式与shuffle grouping相同。

     

相关资料

TopologyBuilder:用来创建topology的类

InputDeclarer:这个对象在调用TopologyBuilder类的setBolt方法时返回,用来声明一个bolt的输入Stream和这些Stream用什么样的grouping方式。

CoordinatedBolt:这个bolt用于分布式RPC topologies,并大量使用direct Stream和direct groupings。

Reliability

Storm确保没有个spout发出的tuple将会被topology完整的处理。通过建立一颗树来跟踪spout发出的每一个tuple,而且决定tuple有多长时间处理完毕。每一个topology有一个“message timeout”配置这个时间。如果storm发现tuple在这个时间内没有完成这棵树,那么这个tuple就是fail,并重新处理这个tuple。

为了很好的利用storm的可靠性机制,你必须告知storm什么时候在监控树上创建了一个新的路径,并在什么时候完成了一个tuple的处理。这些在bolts使用OutputCollector发送完tuple时要做的。在确定完成了emit方法之后,必须调用ack方法来告知处理了这个tuple。

更多信息在Guaranteeing message processing.

Tasks

每一个spout或bolt在集群中运行多个tasks。每一个task相当于程序中的一个线程,Stream grouping定义了如何将tuples从一个task集合到另一个task集合。你可以为每一个spout或bolt在类中TopologyBuildersetSpoutsetBolt方法设置平行度(parallelism)。

Workers

Topologies执行一个或多个worker进程。每个worker进程是一个运行task子集的物理虚拟机。举例:如果一个topology一共有300个tasks和50个workers,那么每一个worker执行6个tasks。Storm尝试将tasks平均的分配到每一个worker。

相关资料:

Config.TOPOLOGY_WORKERS:执行topology的worker数量

时间: 2024-10-11 12:10:10

storm翻译(2):Concepts的相关文章

storm翻译(3)Distributed RPC(分布式远程调用)

原文地址:http://storm.apache.org/documentation/Distributed-RPC.html 分布式RPC的目的是在storm进行大量的实时计算时,能够并行的调用storm上的函数.Storm topology可以将函数参数作为输入Stream,并且将被调用方法产生的结果作为返回发送出去. 与其说DRPC是storm的一个特点,不如说它只是storm基本概念如steams,spouts,bolts和topologies的一种表达方式.DRPC可以独立于storm

Dojo教程翻译索引

Getting Started Dojo Start 原文 翻译 Hello Dojo!原文 翻译 Modern Dojo 原文 翻译 Configuring Dojo with dojoConfig 原文 翻译 Fundamentals Classy JavaScript with dojo/_base/declare 原文 翻译 Creating Templte-based Widgets 原文 翻译 Using dojo/query 原文 翻译 NodeList Extensions 原文

深入理解Magento – 第六章 – 高级Magento模型(转)

深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resro

Storm官方帮助手册翻译(上)

Storm作为当前最流行的实时计算框架,自Twitter将其开源后就一直备受关注.由于其具有先天的稳定性以及便捷性,目前被许多大公司所采用,国外像雅虎.雅虎日本.Twitter.OOYALA.Spotify,国内像京东.腾讯.阿里等都使用Storm来完成大量实时计算来为用户提供优质服务.目前官方的最新发布版本是0.10.0. 本文将对官网的Storm手册进行翻译,由于本人英语能力有限,翻译难免有些不妥之处,望大家指正.点击此处阅读官网英文原版. -------------------------

Storm官方帮助手册翻译(下)

使用其他语言编写Bolt Bolt可以使用任意语言编写.用另外一种语言编写Bolt来作为子进程运行.Storm会在标准输入输出的基础上使用Json来与子进程通信.通信协议之需要一个100行的适配器库,Storm自带了Ruby,Python,和Fancy的适配器库. 下面是WordCountTopology中SplitSentence的定义: ? 1 2 3 4 5 6 7 8 9 public static class SplitSentence extends ShellBolt implem

轻松用Storm进行实时大数据分析【翻译】

原文地址 简单易用,Storm让大数据分析变得轻而易举. 如今,公司在日常运作中经常会产生TB(terabytes)级的数据.数据来源包括从网络传感器捕获的,到Web,社交媒体,交易型业务数据,以及其他业务环境中创建的数据.考虑到数据的生成量,实时计算(real-time computation )已成为很多组织面临的一个巨大挑战.我们已经有效地使用了一个可扩展的实时计算系统--开源的 Storm 工具,它是有 Twitter 开发,通常被称为"实时 Hadoop(real-time Hadoo

Strom 消息处理机制 中英对照翻译 (Storm如何保证消息被完全处理)

官方链接: http://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html What does it mean for a message to be “fully processed”? A tuple coming off a spout can trigger thousands of tuples to be created based on it. Consider, for ex

翻译经典之《Cisco Lan Switching》第六章(三): Two Key Spanning-Tree Protocol Concepts

[版权声明:原创翻译文章,翻译水平有限,错误在所难免,翻译作者对文章中存在的错误或遗漏所造成后果不承担任何责任,请谨慎转载.转载请保留本声明及出处:blog.csdn.net/shallnet ,下载该书英文版] 生成树在生产无环网络拓扑时的计算广泛用到两个概念: 网桥ID(BID) 路径开销 网桥ID 网 桥ID(BID)是一个单个8字节域,由图6-5展示的两个子域构成. 图6-5.网桥ID(BID)由网桥优先级和一个MAC地址组成 低字节域由交换机6个字节MAC地址组成,Catalyst 5

[翻译][Trident] Storm Trident 详细介绍

1.Trident对storm提供了什么能力?2.Trident在如何最大程度的保证执行topogloy性能方面是非常智能的?3.storm如何保证每个消息都被处理一次? Trident是在storm基础上,一个以realtime 计算为目标的高度抽象. 它在提供处理大吞吐量数据能力的同时,也提供了低延时分布式查询和有状态流式处理的能力. 如果你对Pig和Cascading这种高级批量处理工具很了解的话,那么应该毕竟容易理解Trident,因为他们之间很多的概念和思想都是类似的.Tident提供