博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Storm 编程入门
阅读量:6162 次
发布时间:2019-06-21

本文共 1810 字,大约阅读时间需要 6 分钟。

hot3.png

Storm是什么? 什么是流式计算

    Storm是一个分布式实时计算框架, 适应于流式计算。 所谓流式计算,你可以把它想像成你家的电表,电在流过电表时,电表就要计算耗用量,电表对耗用量的计算就是典型的流式计算。

    下面介绍编程过程中需要用到的Storm的几个概念:

  • Topology

        Topology似于Hadoop中的MapReduce Job,是一个用来编排、容纳一组计算逻辑组件(Spout、Bolt)的对象(Hadoop MapReduce中一个Job包含一组Map Task、Reduce Task),这一组计算组件可以按照DAG图的方式编排起来(通过选择Stream Groupings来控制数据流分发流向),从而组合成一个计算逻辑更加强大的对象,那就是Topology。一个Topology运行以后就不能停止,它会无限地运行下去,除非手动干预(显式执行bin/storm kill )或意外故障(如停机、整个Storm集群挂掉)让它终止。

  • Spout

        Spout是一个Topology消息源头,是一个可持续不断生产消息的组件,例如,它可以是一个Socket Server在监听外部Client连接并发送消息,可以是一个消息队列(MQ)的消费者、可以是用来接收Flume Agent的Sink所发送消息的服务,等等。Spout生产的消息在Storm中被抽象为Tuple,在整个Topology的多个计算组件之间都是根据需要抽象构建的Tuple消息来进行连接,从而形成流。

  • Bolt

        Storm中消息的处理逻辑被封装到Bolt中,任何处理逻辑都可以在Bolt里面执行,处理过程和普通计算应用程序没什么区别,只是需要根据Storm的计算语义来合理设置一下组件之间消息流的声明、分发、连接即可。Bolt可以接收来自一个或多个Spout的Tuple消息,也可以来自多个其它Bolt的Tuple消息,也可能是Spout和其它Bolt组合发送的Tuple消息。

  • Stream Grouping

        Storm中用来定义各个计算组件(Spout、Bolt)之间流的连接、分组、分发关系。Storm定义了如下7种分发策略:Shuffle Grouping(随机分组)、Fields Grouping(按字段分组)、All Grouping(广播分组)、Global Grouping(全局分组)、Non Grouping(不分组)、Direct Grouping(直接分组)、Local or Shuffle Grouping(本地/随机分组),各种策略的具体含义可以参考Storm官方文档、比较容易理解。

示例代码 storm-demo

     storm-demo是一个包含完整的storm topology的代码示例,有详尽的注释。

源码见:

怎么把storm 程序跑起来

###本地模式      在本地开发时,不需要部署storm, 直接在eclipse或IntelliJ idea下运行即可,便于调试。      也可以通过命令行执行: java -jar jar文件名 main入口类

###生产模式     先将你的应用程序打成jar包,但jar包中不要含有storm及相关日志包,即将storm及相关日志包的scope设为provided即可:

org.apache.storm
storm-core
0.9.5
provided

    再把应用程序jar包上传到storm结点(Nimbus), 然后在结点上执行指令:

storm  jar  你的应用程序.jar  Main入口类   参数(topologId) 或   jstorm jar 你的应用程序.jar  Main入口类   参数(topologId)

    若要在在生产模式下停止这个topology,则执行以下命令即可:

storm  kill  参数(topologId)或   jstorm  kill  参数(topologId)

转载于:https://my.oschina.net/HuQingmiao/blog/684286

你可能感兴趣的文章
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>