翻译 理解Storm拓扑的并行性

本文深入解析了Apache Storm中拓扑并行性的核心概念,包括工作进程、执行器和任务的关系,以及如何通过配置选项调整并行度,以优化数据处理效率。

原创文章,转载请保留此文链接 https://blog.youkuaiyun.com/flygfch/article/details/88187939,或访问本人博客 http://fangchao.me/2017/01/26/Understanding-the-parallelism-of-a-Storm-topology.html

本文是本人根据Storm官方文档个人翻译整理的,如果有不妥或者错误之处,欢迎指正。原英文官方文档

是什么使一个拓扑运行的

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

  1. 工作进程(Worker processes)
  2. 执行器(Executors)
  3. 任务(Tasks)

这里是他们的关系的简单说明:

工作进程运行着一个拓扑的子集。一个工作进程(worker processes)是属于一个特定的拓扑的,工作进程可以运行这个拓扑中一个或多个组件(spouts或者bolts)的一个或多个执行器(executors)。一个运行的拓扑是由多个这样的进程组成的,这些进程都是运行在storm集群中的多个机器中。

执行器(executor)是一个由工作进程创建出来的线程。它会运行一个或多个任务(tasks),而且这些任务都属于同一个组件(spouts或者bolts)的。

任务(task)是真正执行数据处理的–在代码中实现的每个spout或bolt在集群中执行任意数量的任务。

一个组件的任务数量在一个拓扑的生命周期中总是相同的,但是一个组件的执行器(线程)可能会随时间而变化。这就意味着下面这个情况总是成立的:#threads ≤ #tasks。 默认情况下,任务的数量设置为与执行器的数量相同,即Storm将为每个线程运行一个任务。

配置拓扑的并行性

注意,在Storm的术语中,“并行性(parallelism)”特别用于描述所谓的并行性提示(parallelism hint),这指的就是组件的执行器(线程)的初始数量。 在本文中,在更一般的意义上,我们不仅使用术语“并行性”来描述如何配置执行程序的数量,还用来描述配置工作进程的数量和Storm拓扑的任务数。 当我们在Storm的正常,狭义的定义中使用“并行性(parallelism)”时,我们会特别提出。

以下部分概述了各种配置选项以及如何你的在代码中进行设置。设置这些选项有不止一种方式,但是表中只列出了其中一部分。Storm目前具有以下配置设置优先级顺序:

defaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration.

工作进程(Worker processes)的数量

  • 说明:要为群集中的计算机上的拓扑创建多少个工作进程。
  • 配置选项:TOPOLOGY_WORKERS
  • 如何在代码中设置(示例):
    • Config#setNumWorkers

执行器(Executors)的数量(线程)

  • 说明:每个组件生成多少个executors。
  • 配置选项:无(将parallelism_hint参数传递给setSpout或setBolt)
  • 如何在代码中设置(示例):
    • TopologyBuilder#setSpout()
    • TopologyBuilder#setBolt()
    • 注意Storm 0.8版本,parallelism_hint参数现在指定该bolt的执行器的初始数量(而不是任务!)。

任务(Tasks)的数量

  • 说明:每个组件生成多少个任务。
  • 配置选项:TOPOLOGY_TASKS
  • 如何在代码中设置(示例):
    • ComponentConfigurationDeclarer#setNumTasks()

以下是在实践中设置的示例代码段:

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
	.setNumTasks(4)
	.shuffleGrouping("blue-spout");

在上面的代码中,我们配置Storm运行GreednBolt时,初始数量为两个执行器(Executors)和四个相关任务(Tasks)。 Storm将对每个执行器(线程)运行两个任务。 如果没有显式配置任务数,Storm将默认为每个executor运行一个task。

一个运行拓扑的实例

下图展示了一个简单的拓扑在运行中是什么样的。这个拓扑包含了3个组件,一个叫BlueSpout的spout,2个bolts分别为GreenBolt和YellowBolt。

这些组件是这样连接的,BlueSpout将其输出发送到GreenBolt,GreenBolt又将自己的输出发送到YellowBolt。

GreenBolt是根据上面的代码片段配置的,而Blue Spout和Yellow Bolt只设置parallelism hint(executors的数量)。 这里是相关的代码:

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还提供了额外的配置设置来控制拓扑的并行性,包括:

  • TOPOLOGY_MAX_TASK_PARALLELISM:此设置为单个组件生成的executor数量设置了上限。它通常用于在测试期间,限制在本地模式下运行拓扑时生成的线程数。你可以设置这个选项Config#setMaxTaskParallelism()

如何更改运行拓扑的并行性

Storm一个很好的特性就是,你可以增加或减少worker进程或executors的数量,而无需重新启动集群或拓扑。 这个行为被称为rebalancing(重新平衡)。

你有2个选项去重新平衡一个拓扑:

  1. 使用Storm 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

参考文献

【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)》的技术文档,核心内容是基于IEEE 14节点电力系统模型,利用Matlab实现碳排放流的精确计算方法。该方法通过建立电力系统中各节点的功率流动与碳排放之间的映射关系,实现对电能传输过程中碳足迹的追踪与量化分析,属于电力系统低碳调度与碳流管理领域的关键技术。文中强调“顶级EI完美复现”,表明其算法和仿真结果具有较高的学术严谨性和可重复性,适用于科研验证与教学演示。; 适合人群:电力系统、能源与动力工程、电气工程及其自动化等相关专业的研究生、科研人员以及从事电力系统低碳化、碳排放核算工作的技术人员。; 使用场景及目标:①用于电力系统碳排放流理论的学习与仿真验证;②支撑含新能源接入的电力系统低碳调度、碳交易、绿色电力溯源等课题的研究;③为撰写高水平学术论文(如EI/SCI期刊)提供可靠的代码基础和技术参考。; 阅读建议:读者应具备电力系统分析、Matlab编程的基础知识,建议结合电力系统潮流计算、节点导纳矩阵等前置知识进行学习,并通过调整系统参数和运行方式,深入理解碳排放流的分布规律与影响因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值