【问题标题】:Configuring parallelism in Storm在 Storm 中配置并行性
【发布时间】:2015-01-06 00:57:40
【问题描述】:

我是 Apache Storm 的新手,我正在尝试自己了解如何配置 Storm 并行性。所以有一篇很棒的文章“Understanding the Parallelism of a Storm Topology”,但它只会引起问题。

当你有一个多节点风暴集群时,每个拓扑根据TOPOLOGY_WORKERS 配置参数作为一个整体分布。因此,如果您有 5 个工人,那么您有 5 个 spout 副本(每个工人 1 个),螺栓也是如此。

在storm集群内部如何处理这种情况(最好不创建外部服务):

  1. 我需要一个供所有拓扑实例使用的 spout,例如,如果输入数据通过网络文件夹推送到集群,该文件夹会被扫描以查找新文件。
  2. 与混凝土类型的螺栓类似的问题。例如,当数据由锁定到具体物理机器的许可第三方库处理时。

【问题讨论】:

  • 不,你错了,实例(任务)的数量是针对集群的。不是每个工人。
  • 5 个工人并不意味着 5 个 Spout 副本。如果要制作 5 个 Spout 副本,则必须为该 spout 制作 5 个执行者。每个工作进程运行拓扑的某些部分。如果您有 5 个工作线程,则意味着 5 个工作线程可用于运行 N 个 Bolts 执行器 + N 个 Spouts 执行器。

标签: parallel-processing apache-storm


【解决方案1】:

首先,基础知识:

  1. Workers - 运行 executor,每个 Worker 都有自己的 JVM
  2. Executors - 运行任务,每个 executor 被风暴分布在不同的工作人员中
  3. 任务 - 运行您的 spout/bolt 代码的实例

第二,更正...拥有 5 个工人并不意味着您将自动拥有 5 个喷口副本。拥有 5 个工作人员意味着您有 5 个独立的 JVM,storm 可以在其中分配执行程序来运行(将其视为 5 个存储桶)。

在您首次创建和提交拓扑时配置您的 spout 实例数:

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("0-spout", new MySpout(), spoutParallelism).setNumTasks(spoutTasks);

由于您希望整个集群只有一个 spout,因此您将 spoutParallelismspoutTasks 都设置为 1。

【讨论】:

  • 谢谢!关于我的第二个问题。我可以说“只在这台机器上启动这样的螺栓”之类的风暴吗?
  • 不,Storm 会自动确定哪些工人在哪些机器上工作。
  • @Redwan 用于在特定机器上运行特定螺栓,您可以查看 storm's pluggable scheduler
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
相关资源
最近更新 更多