原译文理解storm拓扑并行度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原译文理解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工具的示例:

## 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拓扑并行度的主要内容,如果未能解决你的问题,请参考以下文章

Storm并发度详解

Storm UI 显示不同数量的 Executors 和 Tasks

storm并行度

Storm系列二: Storm拓扑设计

Storm笔记整理:Storm核心概念与验证——并行度与流式分组

Storm篇--Storm并发机制