• 搜索广告与广告网络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组织好。

  • 相关阅读:
    HDU3085 Nightmare Ⅱ (双向BFS)
    LuoguP2523 [HAOI2011]Problem c(概率DP)
    BZOJ4569 [Scoi2016]萌萌哒(并查集,倍增)
    CF360E Levko and Game(贪心)
    总结-小技巧
    总结-二分
    总结-莫队
    $P1821 [USACO07FEB]银牛派对Silver Cow Party$
    $P2126 Mzc家中的男家丁$
    $P5017 摆渡车$
  • 原文地址:https://www.cnblogs.com/94julia/p/4612489.html
Copyright © 2020-2023  润新知