zoukankan      html  css  js  c++  java
  • 搜索广告与广告网络Demand技术-流式计算平台

     

     

    流式计算平台-Storm

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

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

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

     

    计算广告学-搜索广告与广告网络Demand技术-流式计算平台 - quweiprotoss - Koala++s blog

    其中包含有:

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

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

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

    Storm数据流模型

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

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

     

    计算广告学-搜索广告与广告网络Demand技术-流式计算平台 - quweiprotoss - Koala++s blog

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

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

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

    个人认为Hadoop和流式计算有非常本质的区别,流式计算是调度数据的,而Hadoop核心是调度计算,Hadoop是尽量地不调度数据。而流式计算只能通过调度数据的方式进行。所以它只适合做短时间的用户行为的收集,如果要调度特别大量的数据,用流式计算成本会很高,而且瓶颈很快会达到。S4的图与Storm相似,但S4在配置多层任务的时候会方便一些,因为它里面所有的Node,都没有区别,只会声明自己接收的流量,所以配置多层结构,只用把key组织好。

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/94julia/p/4612489.html
Copyright © 2011-2022 走看看