ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Scheduler(调度器) Storm 现在有 4 种内置的 schedulers(调度器): [DefaultScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/clj/org/apache/storm/scheduler/DefaultScheduler.clj), [IsolationScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/clj/org/apache/storm/scheduler/IsolationScheduler.clj), [MultitenantScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/jvm/org/apache/storm/scheduler/multitenant/MultitenantScheduler.java), [ResourceAwareScheduler](Resource_Aware_Scheduler_overview.html). ## Pluggable scheduler(可插拔的调度器) 你可以实现你自己的 scheduler(调度器)来替换掉默认的 scheduler(调度器),自定义分配executors 到 workers 的调度算法. 使用的时候,在storm.yaml 文件中将 "storm.scheduler" 配置属性设置成你的class类, 并且您的 scheduler(调度器)必须实现 [IScheduler](http://github.com/apache/storm/blob/master%0A/storm-core/src/jvm/org/apache/storm/scheduler/IScheduler.java) 接口。 ## Isolation Scheduler(隔离调度器) solation scheduler(隔离调度器) 使得多个topologies(拓扑) 共享集群资源更加容易和安全. isolation scheduler(隔离调度器) 允许你指定某些 topologies(拓扑)是 “isolated”(隔离的), 这意味着这些 solated topologies(隔离的拓扑)运行在集群的特定机器上,这些机器没有其他 topologies(拓扑)运行。 isolated topologies(隔离的拓扑) 具有高优先级,所以如果和 non-isolated topologies(非隔离的拓扑)竞争资源,资源将会分配给 isolated topologies(隔离的拓扑), 如果必须给 isolated topologies(隔离的拓扑)分配资源,那么将会从 non-isolated topologies(非隔离的拓扑)中抽取资源。一旦所有 isolated topologies (隔离的拓扑)所需资源得到满足, 那么集群中剩下的机器将会被 non-isolated topologies(非隔离的拓扑)共享。 您可以通过将 "storm.scheduler" 设置为 "org.apache.storm.scheduler.IsolationScheduler" , 这样 Nimbus 节点的 Scheduler 就配置为 Isolation Scheduler(隔离调度器). 然后, 使用 "isolation.scheduler.machines" 配置来指定每个topology(拓扑) 分配多少台机器. 这个配置是从 topology name(拓扑名称)到分配给此 topology(拓扑)的隔离机器数量的 map 集合. 例如: ``` isolation.scheduler.machines: "my-topology": 8 "tiny-topology": 1 "some-other-topology": 3 ``` 提交到集群中的topologies 如果没有出现在上述 map 集合中,那么将不会被 isolated 。 请注意:user不可以设置 isolation 属性,该配置只能通过集群的管理员分配(这是故意这样设计的)。 isolation scheduler(隔离调度器)通过在拓扑之间提供完全的隔离来解决多租户问题 - 避免 topologies(拓扑)之间的资源竞争问题. 最终的目的是 "productionized(生产黄精的)" topologies(拓扑)应该设置成 isolated , 测试或开发中的 topologies(拓扑)不应该设置成 isolated 属性. 集群上的剩余机器可以为 isolated topologies(隔离的拓扑)提供故障切换,也可以用来运行 non-isolated topologies(非隔离的拓扑).