容量调度器
- 容量调度器基于队列的概念来实现调度策略
- 队列与容器有些类似,也是在逻辑上定义了一个资源范围,这个范围叫做队列的容量。在一个队列汇总运行的Job一般不允许使用超过范围的资源,让Job在不同的队列中运行就可以支持Job并行了。所以,队列是跨节点的,容器只在节点内划分资源
- 队列在配置文件中创建。Job在提交时可以指定队列,如果不指定队列就使用默认队列。
- 可能有多个Job提交到一个队列,队列内的Job使用先进先出的调度策略(FIFO),即当前Job运行完下一个Job才能运行。
- 在容量调度策略下,可以通过定义n个队列保证n个Job同时运行。比如,可以为Yarn创建2个队列,队列A使用40%的资源,队列B使用60%的资源,只要它们加起来等于100%就可以。提交到两个队列的Job分别被限制在自己队列的可用资源范围内,即队列A中的Job占40%的资源,队列B中的Job占60%的资源。如果一个Job使用了超过规定范围的资源,他就会被杀死。
- 在Hadoop3中,如果只有一个队列A有Job,而队列B没有Job,那么队列A中的Job可以占用100%的资源。可以指定一个队列占用资源的最大范围,比如指定队列A最大资源占用不超过80%,即使队列B中没有Job,队列A中的Job也不能使用超过80%。
- 队列支持层级结构,也就是对垒可以包含子队列,子队列再包含孙队列,没有孩子的队列叫做叶子队列,容量调度器支持动态创建叶子节点,但需要比较复杂的配置。