当我使用storm trident时,如果我将并行度设置为不小于2,我怎样才能让所有的执行器运行在不同的服务器上,而不仅仅是一台服务器上?
Posted
技术标签:
【中文标题】当我使用storm trident时,如果我将并行度设置为不小于2,我怎样才能让所有的执行器运行在不同的服务器上,而不仅仅是一台服务器上?【英文标题】:When I use storm trident, if I set the parallelism not less than 2, how can I make all the executors run on different servers not just on one server? 【发布时间】:2016-09-01 03:15:46 【问题描述】:即,如果并行度为 2,则 bolt 在 2 个不同的服务器上运行,如果并行度为 3,则 bolt 在 3 个不同的服务器上运行。这对我来说很重要,因为我不希望所有任务都只在一台服务器上运行,那太慢了。
【问题讨论】:
【参考方案1】:尝试通过增加配置参数“worker数”(默认值为1)
Config cfg = new Config();
cfg.setNumWorkers(...);
你还可以通过storm.yaml配置参数supersior.slots.ports
限制每台主机的worker数量——每个端口,可以启动一个worker JVM,因此如果你只为这个配置提供一个端口,那么只有一个worker JVM将开始。请注意,这可能会限制您可以运行的拓扑数量。单个工作者 JVM 只会执行来自单个拓扑的代码(以将拓扑彼此隔离)。
【讨论】:
谢谢。其实我按照你说的做了,但是我发现对于一些bolt,即使我将worker的数量设置为大于1,并且将bolt的并行度设置为大于1,一个bolt只是在一台服务器上启动了几个进程......它有什么问题? 扩展了我的答案。 谢谢,这是唯一的方法吗?因为我认为我们最好不要限制每个主机的插槽数,同时我们让执行器在不同的服务器上运行:) 您还可以提供自定义调度程序。 github.com/xumingming/storm-lib/blob/master/src/jvm/storm/… 和 github.com/xumingming/storm-lib/blob/master/src/jvm/storm/…以上是关于当我使用storm trident时,如果我将并行度设置为不小于2,我怎样才能让所有的执行器运行在不同的服务器上,而不仅仅是一台服务器上?的主要内容,如果未能解决你的问题,请参考以下文章