• 目录

    • 前言:
    • 1、Storm编程模型
    • 2、对应的的WordCount案例
    • 总结:

目录

前言:

对于Storm的编程模型有必要做一个详细的介绍(配合WC案例来介绍)

1、Storm编程模型


上图中组件的解释:

  • DataSource:外部数据源

  • Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt

  • Bolt:接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介质上。介质可以是Redis可以是mysql,或者其他。

  • Tuple:Storm内部中数据传输的基本单元,里面封装了一个List对象,用来保存数据。

  • StreamGrouping:数据分组策略

    7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或随机,优先本地。

    1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。
    2. FieldsGrouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。
    3. All Grouping:广播发送,对于每一个tuple,所有的bolts都会收到。
    4. Global Grouping:全局分组,这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
    5. Non Grouping:不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle
      grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
    6. Direct Grouping: 直接分组,这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的task的id(OutputCollector.emit方法也会返回task的id)。
    7. Local or shuffle grouping:如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会被随机发生给这些tasks。否则,和普通的Shuffle Grouping行为一致。

FieldGrouping和shuffleGrouping 运行过程分析:

FieldsGroup:你会发现相同的数据被分到相同的线程中。
95    word:am
95    word:am
95    word:am
95    word:am
95    word:am
91    word:love
91    word:love
91    word:love
91    word:love
91    word:love
95    word:am
89    word:i
89    word:hanmeimei
89    word:i
89    word:hanmeimei
89    word:i
93    word:lilei
93    word:lilei
93    word:lilei
93    word:lilei-----------------------------------
shuffleGroup:你会发现相同的数据被分到不同的线程中(数字代表线程id)
95    word:hanmeimei
89    word:love
95    word:hanmeimei
89    word:am
95    word:am
89    word:love
89    word:love
89    word:hanmeimei
89    word:am
95    word:love
95    word:hanmeimei
89    word:i
95    word:am
95    word:i
95    word:hanmeimei
95    word:i
95    word:hanmeimei
89    word:am
95    word:love
89    word:love
95    word:love

2、对应的的WordCount案例

2.1、功能说明
设计一个topology,来实现对文档里面的单词出现的频率进行统计。
整个topology分为三个部分:

  • RandomSentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去。
  • SplitSentenceBolt:负责将单行文本记录(句子)切分成单词
  • WordCountBolt:负责对单词的频率进行累加

执行wc时,通过Spout来读取数据,然后通过Bolt来切分数据(如map阶段)再通过另一个Bolt和上一个Bolt相连来进一步做单词的统计(通过hashmap来实现)
2.2、项目主要流程

首先new TopologyBuilder->setSpout(spot的id,new spot的实现类,并发度)->setBolt(Bolt的id,new Bolt的实现类,并发度)<可设置多个Bolt>->new Config->config设置worker的数量。

2.3、RandomSentenceSpout的实现及生命周期

Spout的生命周期:open(初始化)->nextTuple(框架一直调用)->declareOutputFields(该方法用于声明自己发射出去的数据的类型(自定义或者可以理解为标识自己发射出去的数据))

2.4、SplitSentenceBolt的实现及生命周期

Bolt的生命周期:prepare(初始化)->execute(对传过来的tuple进行处理)->declareOutoutFields(声明输出的数据类型若输出数据类型为多个则声明多个如下图所示(自定义))
2.5、WordCountBolt的实现及生命周期

代码执行图:

总结:

这篇文章最主要的目的还是让读者能够对Storm的编程模型有个初步的认识;至少你得能够看懂简单的WC案例,知道里面各个参数的含义,以及整个程序的执行流程。

Storm编程模型总结相关推荐

  1. 从Storm到Flink:大数据处理的开源系统及编程模型(文末福利)

    本文节选自CCF大数据教材系列丛书之<大数据处理>,本书由华中科技大学金海教授主编,包括大数据处理基础技术.大数据处理编程与典型应用处理.大数据处理系统与优化三个方面.本教材以大数据处理编 ...

  2. 从Storm到Flink:大数据处理的开源系统及编程模型

    开源系统及编程模型基于流计算的基本模型,当前已有各式各样的分布式流处理系统被开发出来.本节将对当前开源分布式流处理系统中三个最典型的代表性的系统:Apache Storm,Spark Streamin ...

  3. Storm介绍及核心组件和编程模型

    离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据.azkaba ...

  4. 流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)

    1.背景-流式计算与storm 2011年在海量数据处理领域,Hadoop是人们津津乐道的技术,Hadoop不仅可以用来存储海量数据,还以用来计算海量数据.因为其高吞吐.高可靠等特点,很多互联网公司都 ...

  5. Storm架构和编程模型总结

    1. 编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数 ...

  6. Apache SparkStreaming 简介和编程模型

    1. 简介 图5.22 SparkStreaming[16] Spark Streaming是Spark API核心扩展,提供对实时数据流进行流式处理,具备可扩展.高吞吐和容错等特性.Spark St ...

  7. 面向大数据处理的数据流编程模型和工具综述

    点击上方蓝字关注我们 面向大数据处理的数据流编程模型和工具综述 邹骁锋, 阳王东, 容学成, 李肯立, 李克勤 湖南大学信息科学与工程学院,湖南 长沙 410008 论文引用格式: 邹骁锋, 阳王东, ...

  8. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  9. C语言网络编程:TCP编程模型

    编程模型 TCP编程模型如下 TCP服务器的工作过程如下: 服务器创建一个专门的"文件描述符"来监听来自客户端的"三次握手",然后建立链接 链接建立成功后,服务 ...

最新文章

  1. AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...
  2. Django模板语言
  3. 【转】matlab函数编译成dll供Cpp调用的方法
  4. CCNA-第十二篇-STP+ACL(下)
  5. python如何运用ols_使用OLS回归(Python,StatsModels,Pandas)预测未来值
  6. 成员变量的声明位置引起编译错误
  7. 一首最接近完美的天籁之音+莎拉布莱曼《斯卡布罗集市》+
  8. %@ include file=和jsp:include file=区别
  9. 苦于E63没有秒表,网上找的不好用,就自己写个简单的
  10. 基于numpy科学计算库实现线性回归linear regression
  11. Tomcat 6.0 安装与启动
  12. 东南大学本 硕 博论文中期答辩 毕业答辩ppt模板2021版
  13. Martin Fowler三万字解读源代码分支管理模式 | IDCF
  14. 面向对象的三大基本特性,五大基本原则。
  15. mencoder常用参数总结
  16. Linux——详解共享内存shared memory
  17. 关于正确处理0x80070426等错误的方法
  18. 前端大屏模板分享-可在线浏览
  19. 【leetcode】【简单】13. 罗马数字转整数【字典搜索】
  20. zabbix-agent无法启动

热门文章

  1. 多线程编程指南 part 2
  2. Docker 方式安装、运行 Nexus3 、重置默认密码、推送 jar 包到私服
  3. Centos安装nmon软件 ( 测试 )
  4. RabbitMQ 从入门到精通 (一)
  5. 三类基于贪心思想的区间覆盖问题
  6. Windows下启动,关闭Nginx命令
  7. 关于idea修改当前使用的git账户的问题
  8. 【转载】fullpage.js学习
  9. Android Log
  10. Python try/except/finally等