【原】【译文】理解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和 ...
随机推荐
- win2012 配置wamp的若干错误
转自群友 VC2015.VC14 在 Windows 2012 R2 安装失败,0x80240017 - 未指定的错误,解决办法据朋友反应VC2013一样存在这个问题--查资料说是没有安装 KB299 ...
- linux下boost的安装与编译
1.从boost官网下载boost库包: 2.然后解压到linux下的任意一个文件夹, 3.进入boost_1_57文件夹下,不同的boost版本会解压城不同的库文件夹, 4.执行././bootst ...
- visual studio code右侧的预览面板能关闭吗?
https://segmentfault.com/q/1010000010082399 "editor.minimap.enabled":false
- LNMP搭建02 -- 编译安装Nginx
[编译安装Nginx] 为了顺利安装Nginx,先安装下面这些: [CentOS 编译 nginx 前要做的事情] yum install gcc gcc-c++ kernel-devel yum ...
- 给Linux系统/网络管理员的nmap的29个实用例子
Nmap亦称为Network Mapper(网络映射)是一个开源并且通用的用于Linux系统/网络管理员的工具.nmap用于探查网络.执行安全扫描.网络核查并且在远程机器上找出开放端口.它可以扫描在线 ...
- Pycharm常用的使用方法
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...
- thinkphp5判断移动或pc端访问并调用不同模板
废话不多说,直接上代码 先修改\thinkphp\library\think\view\driver\Think.php文件 把 public function __construct($config ...
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- 高并发关于微博、秒杀抢单等应用场景在PHP环境下结合Redis队列延迟入库
第一步:创建模拟数据表. CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NUL ...
- POJ - 1797 Heavy Transportation 单源最短路
思路:d(i)表示到达节点i的最大能运输的重量,转移方程d(i) = min(d(u), limit(u, i));注意优先队列应该以重量降序排序来重载小于符号. AC代码 #include < ...