`
youxinrencwx
  • 浏览: 71114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Storm 常见使用模式-场景

阅读更多

 

Strom常见使用模式如下:
  1. 流聚合(stream join)
  2. 批处理(Batching)
  3. BasicBolt
  4. 内存内缓存 + fields grouping 组合
  5. 计算top N
  6. 分布式RPC: CoordinatedBolt和KeyedFairBolt
  7. 用TimeCacheMap来高效地保存一个最近被更新的对象的缓存(目前已被申明为Deprecated,其实guava工具包也提供了类似功能 )
流聚合(stream join)
流聚合是指基于共同的tuple字段把两个或者多个数据流聚合成一个数据流。流聚合比较类似于table join,只是table join的输入在一次执行中是有限的,并且join的语义(条件)是非常明确的。而流聚合的语义是不明确的并且输入流是无限的。
流类型的聚合类型跟具体的应用是有关了,具体的聚合逻辑就需要自己来实现了。例如,,一些场景是把多个流发出的所有的tuple都聚合起来 — 不管多长时间;而另外一些场景则只会聚合一些特定的tuple。而一般聚合都是通过某些字段来进行聚合, 在storm里面可以用fields grouping在相同字段上进行grouping就可以了,比如:
 
builder.setBolt ( "join" , new MyJoiner (), parallelism )
. fieldsGrouping ( "1" , new Fields ( "joinfield1" , "joinfield2" ))
. fieldsGrouping ( "2" , new Fields ( "joinfield1" , "joinfield2" ))
. fieldsGrouping ( "3" , new Fields ( "joinfield1" , "joinfield2" ));
当然,不同的数据流的“相同”字段可以有不一样的名字。
 
批处理(Batching)
有时候为了性能等原因, 你可能想批量处理tuple一起处理。例如,批量把数据更新数据库。
你可以先保存tuple对象的应用,当达到批量处理条件时,在批量处理,处理完后在ack已处理的tuple
 
BasicBolt
很多bolt有些类似的模式:
读一个输入tuple,根据这个输入tuple发射一个或者多个tuple,在execute的方法的最后ack那个输入tuple
遵循这类模式的bolt一般是函数或者是过滤器, 这种模式非常常见,storm为这类模式单独封装了一个接口:IBasicBolt
 
 
内存内缓存 + fields grouping 组合
在bolt的内存里面缓存一些东西非常常见。缓存在和fields grouping结合起来之后就更有用了。比如,你有一个bolt把短链接变成长链接(bit.ly, t.co之类的)。你可以把短链接到长链接的对应关系利用LRU算法缓存在内存里面以避免重复计算。比如组件一发射短链接,组件二把短链接转化成长链接并缓存在内存里面。看一下下面两段代码有什么不一样:
code one:
builder.setBolt("expand", new ExpandUrl(), parallelism)
.shuffleGrouping(1);
code two:
builder.setBolt("expand", new ExpandUrl(), parallelism)
.fieldsGrouping("urls", new Fields("url"));
第二种方式的缓存会比第一种方式的缓存的效率高很多,因为同样的短链接始终被发到同一个task。这会避免不同的机器上有同样的缓存 — 浪费内存, 同时也使得同样的短域名更可能在内存里面找到缓存。
 
 
计算top N
storm的一个常见的持续计算的模式叫做: “streaming top N”。
比如你有一个bolt发射这样的tuple: ["value", "count"]并且你想一个bolt基于这些信息算出top N的tuple。最简单的办法是有一个bolt可以做一个全局的grouping的动作并且在内存里面保持这top N的值。
这个方式对于大数据量的流显然是没有扩展性的, 因为所有的数据会被发到同一台机器, 单机的处理能力始终是有极限的。一个更好的方法是在多台机器上面并行的计算这个流每一部分的top N, 然后再有一个bolt合并这些机器上面所算出来的top N以算出最后的top N(Map Reduce的思想), 代码大概是这样的:
builder.setBolt("rank", new RankObjects(), parallellism)
.fieldsGrouping("objects", new Fields("value"));
builder.setBolt("merge", new MergeObjects())
.globalGrouping("rank");
 
分布式RPC: CoordinatedBolt和KeyedFairBolt
用storm做分布式RPC应用时 CoordinatedBolt和KeyedFairBolt会被用到,它们是storm api自带的模式。
CoordinatedBolt包装你的bolt,确定是不是所有的tuple都处理完了,然后返回结果。它主要使用Direct Stream来实现这种效果。
KeyedFairBolt同样包装你的bolt逻辑,使你的topology可同时处理多个DRPC调用,而不是串行地一次只执行一个。
 
 
 
 
 
 
分享到:
评论

相关推荐

    Storm Blueprints_ Patterns for Distributed Real-time Computation-带书签目录文字版

    在实时计算模式部分,作者讨论了诸如窗口操作(Windowing)、状态管理、容错机制、实时聚合等常见模式。窗口操作允许在时间窗口内对数据进行聚合,这对于实时分析和报告至关重要。状态管理则涉及到如何在分布式环境...

    Packt.Storm Blueprints.Patterns for Distributed Real-time Computation

    本书的标题“Packt.Storm Blueprints.Patterns for Distributed Real-time Computation”明确指出了本书的核心主题——使用Apache Storm进行分布式实时计算的设计模式。其中,“Storm Blueprints”暗示了书中将提供...

    基于Storm流计算天猫双十一作战室项目实战

    通过本课程的学习,不仅可以掌握Storm的基本原理和技术细节,还能深入了解如何在实际业务场景中运用Storm进行高效的数据处理和分析。 **1. 实战项目开发** - **项目概述**:本课程通过三个完整的Storm项目实战,...

    storm_maprdb:Storm + MapR-DB

    7. **应用场景**:这样的组合常见于需要实时处理大规模数据并将其存储在NoSQL数据库中的场景,例如金融交易监控、物联网数据分析、社交媒体情绪分析等。 总结起来,"storm_maprdb:Storm + MapR-DB"是一个使用Java...

    从零开始学Storm+第2版(2016).pdf

    8. **本地模式与生产模式**:Storm 提供了本地模式,方便开发者在单机上进行快速测试,而生产模式则是在分布式环境下运行,处理大规模实时数据。 9. ** Storm UI**:Storm 提供了一个 Web 界面,用于监控拓扑的运行...

    Storm实战构建大数据实时计算

    2. Storm的设计模式:探讨了如何使用Storm来处理数据流,如何设计Spout和Bolt,以及如何组织它们以达到最佳的数据处理效率。书中还会介绍一些常见的设计模式和最佳实践。 3. Storm的高级特性:Storm不仅仅是一个...

    Redis集群HA架构+双写一致性解决方案、Nginx+Storm负载均衡策略、Hyst-shop-detail.zip

    这个项目可能涵盖了上述技术的实现,例如使用Redis集群来缓存商品信息,Nginx进行负载均衡,以及Storm进行实时数据分析。开发人员可以通过研究这个项目,了解如何在实际场景中应用这些技术,提升系统的可用性和效率...

    从零开始学习storm最新版

    书中还会涉及Storm的监控与运维,包括如何使用Storm UI查看拓扑运行状态、如何调整拓扑参数优化性能,以及如何处理常见的运行时问题。这部分内容对于实际生产环境中部署和维护Storm拓扑至关重要。 在Storm的实战...

    大数据课程体系

    - **使用Strom开发一个WordCount例子**:通过一个简单的WordCount示例学习Storm的使用。 - **Storm程序本地模式debug、Storm程序远程debug**:调试Storm程序的技巧。 - **Storm事物处理**:实现事务性的数据处理流程...

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs...

    大数据课程体系.docx

    - **实战设计模式**:详细介绍常见的设计模式,如单例模式、工厂模式、观察者模式等,并通过具体示例进行实践。 - **面向对象设计原则详解**:阐述面向对象编程的核心设计理念,包括封装、继承、多态等基本原则,并...

    java设计模式系列之观察者模式代码

    在Java编程领域,设计模式是一种被广泛采用的最佳实践,它为解决常见的软件设计问题提供了标准的解决方案。今天我们要深入探讨的是“观察者模式”,也称为发布-订阅(Publish-Subscribe)模式,它属于行为设计模式的...

    大数据计算模式和关键技术.ppt

    大数据计算模式是指根据不同的应用场景和数据特点,选择合适的计算模式和技术来处理和分析大规模数据。常见的大数据计算模式包括批处理计算模式、流计算模式、图计算模式和交互式查询分析模式等。 * 批处理计算模式...

    FeathreRecognition-master_interiormeo_storm7kc_相关系数匹配_影像相关系数匹配_影

    在IT领域,尤其是在计算机视觉和图像处理中,"FeathreRecognition-master_interiormeo_storm7kc_相关系数匹配_影像相关系数匹配_影"这个标题和描述涉及到的关键技术主要包括特征识别、图像相关系数匹配以及影像匹配...

    基于云的实时数据流分析.pptx

    - **常见算法**: - 过滤算法:筛选出有用数据。 - 聚合算法:统计汇总信息。 - 机器学习算法:识别模式或预测趋势。 - **选择准则**: - 算法复杂度:评估算法实现难度。 - 准确性要求:根据应用场景确定算法...

    Hadoop常见的45个面试题

    - 随着技术发展,Hadoop不再是单一的解决方案,而是整个生态系统的一部分,包括Apache Storm、Tez、Flink等。 通过以上这些知识点,你可以对Hadoop有一个全面的理解,这对于准备Hadoop相关的面试至关重要。在实际...

    Apache Hadoop---Flink.docx

    - **Tachyon**、**Elasticsearch**、**RabbitMQ**、**Apache Storm**、**S3**、**XtreemFS**:Flink支持与其他常见数据源和存储系统的整合。 4. 系统架构: - **JobManager**:负责任务调度和资源管理,协调整个...

    Hadoop学习必看路线图2.pdf

    - **Hadoop与Storm的区别**:理解两者在处理大数据时的不同应用场景。 - **互补关系**:探索如何将Hadoop与Storm结合起来,共同构建更强大的数据处理系统。 - **Storm体系架构**:深入了解Storm的工作原理及其组件...

    Hadoop就业面试宝典

    #### 五、面试常见问题解答 1. **Hive条件判断**: - Hive支持多种条件判断函数,如IF、COALESCE、CASE WHEN等。 2. **Hive SQL查询示例**: - 查询某网站日志中访问页面A和页面B的用户数量的语句: ```sql ...

Global site tag (gtag.js) - Google Analytics