【原】【译文】理解storm拓扑并行度
原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html
什么构成一个运行的拓扑:工作进程,执行器和任务
storm区分以下三个用于在Storm集群中实际运行拓扑的主要实体:
1. 工作进程
2. 执行器(线程)
3. 任务
这是他们的关系的一个简单的说明
【译者理解:1个工作进程(worker)可包括1或多个执行器(executor/thread),1个执行器可包括1或多个任务(task)】
一个工作进程执行拓扑的子集,一个工作进程属于一个特定的拓扑,可以针对该拓扑的一个或多个组件(spouts或bolts)运行一个或多个执行器。
一个正在运行的拓扑由Storm集群内许多机器上运行的许多此类进程组成。
一个执行器是由工作进程产生的线程。 它可以为同一个组件(spouts或bolts)运行一个或多个任务。
一个任务是执行实际的数据处理,您在代码中实现的每个spout或bolt在集群中执行许多任务。 组件的任务数量在拓扑的整个生命周期中始终保持不变,但组件的执行器(线程)数量可随时间变化。 这意味着以下条件成立:#threads≤#tasks(线程数量<=任务数量)。 默认情况下,任务的数量设置为与执行器的数量相同,即Storm将为每个线程运行一个任务。
配置拓扑并行度
工作进程数量
- 描述:为集群中的拓扑创建多少个工作进程
- 配置项:TOPOLOGY_WORKERS
- 在代码中如何设置:
- Config#setNumWorkers
执行器数量(线程)
- 描述:每个组件产生多少个执行器
- 配置项:无(通过在setSpout或setBolt传递parallelism_hin参数)
- 在代码中如何设置:
- TopologyBuilder#setSpout()
- TopologyBuilder#setBolt()
任务数量
- 描述:每个组件产生多少个任务
- 配置项:TOPOLOGY_TASKS
- 在代码中如何设置:
- ComponentConfigurationDeclarer#setNumTasks()
实践中的代码片段如下:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout");
在上面的代码中,我们配置了Storm来运行初始值为两个执行器和四个相关任务的GreenBolt。 Storm将为每个执行器(线程)运行两个任务。 如果您没有明确配置任务数量,Storm将默认每个执行程序运行一个任务。
拓扑实例
如下插图显示了一个简单拓扑,该拓扑由三个组件构成:分别是BlueSpout和GreenBolt和YellowBolt。
这些组件被连接起来,BlueSpout输出到GreenBolt,GreenBolt输出到YellowBolt。
【译者理解:由上图知,该拓扑合计并行度为10(2+2+6),每个工作进程将产生5(10/2)个线程,上图中表现出了2个工作进程(Worker Process),与它们各自当中有5个线程(5个矩形框),其中有一个矩形框包括2个绿色Task, 是因为GreenBolt的parallelism hint为2,task number为4, 4/2=2】
相应的代码如下:
Config conf = new Config();
conf.setNumWorkers(2); // use two worker processes
topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout");
topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
.shuffleGrouping("green-bolt");
StormSubmitter.submitTopology(
"mytopology",
conf,
topologyBuilder.createTopology()
);
如何修改一个正在运行拓扑的并行度
Storm的一个非常好的功能是,您可以增加或减少工作进程和/或执行器的数量,而无需重新启动群集或拓扑。 这叫作重新平衡。
您有两个选项来重新平衡拓扑:
1. 使用Storm Web UI重新平衡拓扑。
2. 使用如下所述CLI工具重新平衡。
以下是使用CLI工具的示例:
|
【原】【译文】理解storm拓扑并行度的更多相关文章
- 【原】理解Storm拓扑的并行
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...
- 理解 Storm 拓扑的并行度(parallelism)概念
组成:一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks)! 在一个 Storm 集群中,Storm 主要通过以下三个部件来运 ...
- Storm拓扑的并行度(parallelism)介绍
Storm拓扑的并行度(parallelism)介绍 1.Storm分为3个主要实体,用于在Storm集群中运行拓扑 工作进程:Worker Process,也称为Worker ...
- storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解
本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...
- 大数据处理框架之Strom: Storm拓扑的并行机制和通信机制
一.并行机制 Storm的并行度 ,通过提高并行度可以提高storm程序的计算能力. 1.组件关系:Supervisor node物理节点,可以运行1到多个worker,不能超过supervisor. ...
- Storm系列二: Storm拓扑设计
Storm系列二: Storm拓扑设计 在本篇中,我们就来根据一个案例,看看如何去设计一个拓扑, 如何分解问题以适应Storm架构,同时对Storm拓扑内部的并行机制会有一个基本的了解. 本章代码都在 ...
- 用实例的方式去理解storm的并发度
什么是storm的并发度 一个topology(拓扑)在storm集群上最总是以executor和task的形式运行在suppervisor管理的worker节点上.而worker进程都是运行在jvm ...
- 理解Storm并发
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...
- Storm概念学习系列之并行度与如何提高storm的并行度
不多说,直接上干货! 对于storm来说,并行度的概念非常重要!大家一定要好好理解和消化. storm的并行度,可以简单的理解为多线程. 如何提高storm的并行度? storm程序主要由spout和 ...
随机推荐
- BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]
有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N ...
- python学习:收集ip信息
#!/usr/bin/env python from subprocess import Popen, PIPE def getIfconfig(): p = Popen(['ifco ...
- thinkPHP替换SQL变量
使用tp里M()->where(pb_id=%d and course=%d and DATE_FORMAT(pub_time, \"%H:%i:%s\") < &qu ...
- Java注释用处
1.Java注释: import cn.lonecloud.Doc; /** * Created by lonecloud on 2017/8/17. * 测试注释类型 {@link Doc#test ...
- Linux搭建FTP服务器
一.搭建环境 阿里云 CentOS 7.3 64位 二.FTP协议基础知识 2.1 简介 FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文 ...
- Android 如何进行页面传递对象
当我们从一个页面调到另一个页面的时候,需要把该页面的一些设定值也传递给下一个页面.当要传递的值很多时,我们可以传递一个对象. 页面1: Intent intent = new Intent(PageO ...
- JS Cookie丢失问题
JS Cookie丢失问题 前些天有人问我vue中使用proxy发送请求,为什么请求时cookie丢失,首先说一下我对cookie的理解: 1.cookie在正常情况下是会在每次请求时自动携带, 2. ...
- 10分钟入门spark
Spark是硅谷各大公司都在使用的当红炸子鸡,而且有愈来愈热的趋势,所以大家很有必要了解学习这门技术.本文其实是笔者深入浅出hadoop系列的第三篇,标题里把hadoop去掉了因为spark可以不依赖 ...
- Spring cloud oauth2.0 access_token 永不失效设置方法
在AuthorizationServerConfigurerAdapter,重写一个TokenServices,注意这里的@Primary 非常重要,否则会有3个同类型的Bean,无法注入,会抛出以下 ...
- [Note] Apache Flink 的数据流编程模型
Apache Flink 的数据流编程模型 抽象层次 Flink 为开发流式应用和批式应用设计了不同的抽象层次 状态化的流 抽象层次的最底层是状态化的流,它通过 ProcessFunction 嵌入到 ...