原文地址: 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工具的示例:

## Reconfigure the topology "mytopology" to use 5 worker processes,
## the spout "blue-spout" to use 3 executors and
## the bolt "yellow-bolt" to use 10 executors. $ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

【原】【译文】理解storm拓扑并行度的更多相关文章

  1. 【原】理解Storm拓扑的并行

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  2. 理解 Storm 拓扑的并行度(parallelism)概念

    组成:一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks)! 在一个 Storm 集群中,Storm 主要通过以下三个部件来运 ...

  3. Storm拓扑的并行度(parallelism)介绍

    Storm拓扑的并行度(parallelism)介绍 1.Storm分为3个主要实体,用于在Storm集群中运行拓扑        工作进程:Worker Process,也称为Worker      ...

  4. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

  5. 大数据处理框架之Strom: Storm拓扑的并行机制和通信机制

    一.并行机制 Storm的并行度 ,通过提高并行度可以提高storm程序的计算能力. 1.组件关系:Supervisor node物理节点,可以运行1到多个worker,不能超过supervisor. ...

  6. Storm系列二: Storm拓扑设计

    Storm系列二: Storm拓扑设计 在本篇中,我们就来根据一个案例,看看如何去设计一个拓扑, 如何分解问题以适应Storm架构,同时对Storm拓扑内部的并行机制会有一个基本的了解. 本章代码都在 ...

  7. 用实例的方式去理解storm的并发度

    什么是storm的并发度 一个topology(拓扑)在storm集群上最总是以executor和task的形式运行在suppervisor管理的worker节点上.而worker进程都是运行在jvm ...

  8. 理解Storm并发

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...

  9. Storm概念学习系列之并行度与如何提高storm的并行度

    不多说,直接上干货! 对于storm来说,并行度的概念非常重要!大家一定要好好理解和消化. storm的并行度,可以简单的理解为多线程. 如何提高storm的并行度? storm程序主要由spout和 ...

随机推荐

  1. DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

  2. Angular20 nginx安装,angular项目部署

    1 nginx安装(Windows版本) 1.1 下载安装包 到官网下载Windows版本的nginx安装包 技巧01:下载好的压缩包解压即可,无需安装 1.2 启动nginx 进入到解压目录,点击 ...

  3. pinvoke 数据交互笔记

    intptr to array string string[]  _outputStrArray=null;  int channelCount = 0;///返回数组大小            In ...

  4. Maven中模块的聚合以及对jar包的继承

    我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...

  5. LNMP Yii2 验证码不显示问题最终解决方案

    首先,本地使用OK! 然后,新配置的LNMP环境,验证码一直显示不出来,看了Yii2的验证码存在session里,怀疑是session有问题. 在测试其他页面的时候,发现:session_start( ...

  6. 用Putty通过SSH访问Linux服务器

    1,sudo apt-get install ssh 2,sudo service ssh restart 3,重启ssh成功后,就可以直接用Putty访问服务器.

  7. 1 Python数据类型--

    常见的Python数据类型: (1)数值类型:就是平时处理的数字(整数.浮点数) (2)序列类型:有一系列的对象并排或者排列的情况.如字符串(str),列表(list),元组(tuple)等 (3)集 ...

  8. HDU - 2181 dfs [kuangbin带你飞]专题二

    保存每个节点的下一个节点一直往下面走就行了,不能重复经过某个点,当经过的点达到20个而且当前节点的下一个节点是起点就打印答案. AC代码 #include<cstdio> #include ...

  9. 接口测试执行工具Postman:模拟请求、用例执行、断言、批量运行用例、简单持续集成

    一.接口测试-postman-模拟HTTP Requests 二.接口测试-postman-权限Authorization 三.接口测试-postman-断言Writting Test 四.接口测试- ...

  10. HttpURLConnection 411错误解决

    1.问题描述 Java HttpURLConnection类发送Http请求链接外网返回ResponseCode为411,对方为.NET服务器,网上查明原因可能来自以下: 1.可能是没有传http中的 ...