您的位置:首页 > 理论基础 > 计算机网络

【转载】计算广告学-搜索广告与广告网络Demand技术-流式计算平台

2013-10-24 23:49 666 查看
搜索广告与广告网络Demand技术

原作者:刘鹏 @北冥乘海生

编辑:Koala++/屈伟

视频课程:师徒网


流式计算平台-Storm

我们以Storm为例来看流式计算的功能是什么。

下面内容引用自大圆的博客。在Storm中,一个实时应用的计算任务被打包作为Topology发布,这同Hadoop的MapReduce任务相似。但是有一点不同的是:在Hadoop中,MapReduce任务最终会执行完成后结束;而在Storm中,Topology任务一旦提交后永远不会结束,除非你显示去停止任务。

计算任务Topology是由不同的Spouts和Bolts,通过数据流(Stream)连接起来的图。下面是一个Topology的结构示意图:



其中包含有:

Spout:Storm中的消息源,用于为Topology生产消息(数据),一般是从外部数据源(如Message
Queue、RDBMS、NoSQL、Realtime
Log)不间断地读取数据并发送给Topology消息(tuple元组)。在计算广告语境下,Spout对key分发的可能是一些广告日志。

Bolt:Storm中的消息处理者,用于为Topology进行消息的处理,Bolt可以执行过滤, 聚合,查询数据库等操作,而且可以一级一级的进行处理。

最终,Topology会被提交到storm集群中运行;也可以通过命令停止Topology的运行,将Topology占用的计算资源归还给Storm集群。


Storm数据流模型

数据流(Stream)是Storm中对数据进行的抽象,它是时间上无界的tuple元组序列。在Topology中,Spout是Stream的源头,负责为Topology从特定数据源发射Stream;Bolt可以接收任意多个Stream作为输入,然后进行数据的加工处理过程,如果需要,Bolt还可以发射出新的Stream给下级Bolt进行处理。

下面是一个Topology内部Spout和Bolt之间的数据流关系:



Topology中每一个计算组件(Spout和Bolt)都有一个并行执行度,在创建Topology时可以进行指定,Storm会在集群内分配对应并行度个数的线程来同时执行这一组件。

那么,有一个问题:既然对于一个Spout或Bolt,都会有多个task线程来运行,那么如何在两个组件(Spout和Bolt)之间发送tuple元组呢?

Storm提供了若干种数据流分发(Stream Grouping)策略用来解决这一问题。在Topology定义时,需要为每个Bolt指定接收什么样的Stream作为其输入(注:Spout并不需要接收Stream,只会发射Stream)。

个人认为Hadoop和流式计算有非常本质的区别,流式计算是调度数据的,而Hadoop核心是调度计算,Hadoop是尽量地不调度数据。而流式计算只能通过调度数据的方式进行。所以它只适合做短时间的用户行为的收集,如果要调度特别大量的数据,用流式计算成本会很高,而且瓶颈很快会达到。S4的图与Storm相似,但S4在配置多层任务的时候会方便一些,因为它里面所有的Node,都没有区别,只会声明自己接收的流量,所以配置多层结构,只用把key组织好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: