关于Storm的一些总结
来源:互联网 发布:汉字拼音发音软件 编辑:程序博客网 时间:2024/06/05 06:34
1.Storm概述
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。不同于hadoop的是,storm是一个实时计算系统,而hadoop只适合处理离线的数据,storm 低延迟,hadoop高延迟,hadoop的优点主要在于其数据吞吐量大。
2.Storm逻辑结构
Storm 主要由topology(拓扑),stream(数据流),spout(喷嘴,数据的产生者),blot(阀门,数据的运算者)组成,不同于hadoop中的job,job在运行完成后就会终止程序,但是Storm中的topology会像服务一样运行下去,提供实时计算的服务。
1. stream,它的核心数据结构是tuple,tuple是storm 各个组件间相互传输数据的基本单位,由spout接受数据源的数据并组装成tuple(包含一个或者多个键值对的列表)
2. spout,它是数据的产生者,主要功能是从数据源获取信息并处理封装为tuple对象交由blot处理。(从数据源消费数据)
3.blot,数据的处理者,blot作为strom的数据处理者,主要处理由spout传递来的数据或者由上级blot传递过来的数据(运算过程可以包含多个运算环节,也就是说可以由多级blot来流水处理从spout传递来的数据),最终会选择性地输出一个或多个输出流,这也是组成Strom topology结构的重要组件。
3.topology在集群中的结构
storm的topology在集群中主要由四个部分组成:
- Nodes
- Workers
- Executor
- Task
Nodes,代表集群中的一台服务器,会执行topology 中的一部分运算。
Workers,表示在JVM上独立运作的一个进程,一个Node可以配置多个worker,一个topology 会发送到一个或者多个worker上运行。
Executor,表示jvm中运行的一个线程,如果不指定,storm 会给每个executor 分配一个task,多个task可以指定给同一个executor执行,
Task,bolt/spout实例:task是sqout和bolt的实例,他们的nextTuple()和execute()方法会被executors线程调用执行。
大多数情况下,除非明确指定,Storm的默认并发设置值是1。即,一台服务器(node),为topology分配一个worker,每个executer执行一个task。参看图(Storm默认并发机制)
此时唯一的并发机制出现在线程级。
在单机模式下增加并发的方式可以体现在分配更多的worker和executer给topology。
单机模式下,增加worker的数量不会有任何提升速度的效果。
1.增加worker 可以通过API和修改配置两种方式修改分配给topology的woker数量。
Config config = new Config();config.setNumWorkers(2);
2.增加Executor
builder.setSpout(spout_id,spout,2)builder.setBolt(bolt_id,bolt,executor_num)
3.增加Task
builder.setSpout(...).setNumTasks(2);builder.setBolt(...).setNumTasks(task_num);
4.数据流分组 数据流分组方式定义了数据如何进行分发。 Storm内置了七种数据流分组方式: Shuffle Grouping(随机分组) 随机分发数据流中的tuple给bolt中的各个task,每个task接收到的tuple数量相同。 Fields Grouping(按字段分组) 根据指定字段的值进行分组。指定字段具有相同值的tuple会路由到同一个bolt中的task中。 All Grouping(全复制分组) 所有的tuple赋值后分发给所有的bolt task。 Globle Grouping(全局分组) 这种分组方式将所有的tuple路由到唯一一个task上,Storm按照最小task id来选取接受数据的task。 这种分组方式下配置bolt和task的并发度没有意义。 这种方式会导致所有tuple都发送到一个JVM实例上,可能会引起Strom集群中某个JVM或者服务器出现性能瓶颈或崩溃。 None Grouping(不分组) 在功能上和随机分组相同,为将来预留。 Direct Grouping(指向型分组) 数据源会通过emitDirect()方法来判断一个tuple应该由哪个Strom组件来接受。只能在声明了是指向型数据流上使用。 Local or shuffle Grouping(本地或随机分组) 和随机分组类似,但是,会将tuple分发给同一个worker内的bolt task,其他情况下采用随机分组方式。 这种方式可以减少网络传输,从而提高topology的性能。另外可以自定义数据流分组方式
阅读全文
1 0
- 关于Storm的一些总结
- 关于Storm的一些疑问解答
- storm trident一些总结
- storm的一些基本概念
- 【Storm总结-2】关于Storm 中Topology的并发度的理解
- 【Storm总结-2】关于Storm 中Topology的并发度的理解<转>
- 【Storm总结-2】关于Storm 中Topology的并发度的理解
- Twitter Storm: storm的一些常见模式
- Storm的事务总结
- 关于继承的一些总结
- 关于Cache的一些总结
- 关于触摸屏的一些总结
- 关于乱码的一些总结
- 关于SOCKET的一些总结
- 关于工作的一些总结
- 关于C++的一些总结
- 关于文件的一些总结
- 关于DOM的一些总结
- 巧妙解决整数二进制计算1的个数
- C# 海康摄像头视频播放的两种方式
- ResNet
- Get Request Parameter of a URL on FreeMarker
- 2017 Multi-University Training Contest
- 关于Storm的一些总结
- swift3.0中的自定义下拉刷新和模拟延时操作(同时和OC中的进行对比)
- keras基本概念图(1)
- Windows安装pip方法
- 剑指Offer第五题(Java实现)
- Git学习记录(1)
- js正则表达式的基本语法
- STL容器迭代器失效时机
- 误删除rpm命令恢复方法