欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【原】【译文】理解storm拓扑并行度

程序员文章站 2022-04-06 13:05:29
原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html 什么构成一个运行的拓扑:工作进程,执行器和任务 storm区分以下三个用于在Storm集群中实际运行 ......

原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html

什么构成一个运行的拓扑:工作进程,执行器和任务

storm区分以下三个用于在Storm集群中实际运行拓扑的主要实体:

1. 工作进程
2. 执行器(线程)
3. 任务

这是他们的关系的一个简单的说明

【原】【译文】理解storm拓扑并行度

【译者理解: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。

【原】【译文】理解storm拓扑并行度

【译者理解:由上图知,该拓扑合计并行度为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