在Hadoop中实现任务调度的主要方式是:
1、 通过Hadoop自带的调度器实现:
- FIFO(先进先出)调度器:默认调度器,按提交顺序执行作业。
- Capacity调度器:按队列分配资源,支持多用户和资源管理。
- Fair调度器:尽量保证所有作业获取公平的资源,按用户和资源管理。
2、 也可以实现自定义调度器:
- 继承
Scheduler
基类,实现allocate()
、dequeue()
等方法。 - 在mapred-site.xml中配置
mapred.jobtracker.taskScheduler
为自定义调度器的类名。
3、 Capacity调度器示例:
- 在mapred-site.xml中配置:
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
</property>
- 创建两个队列:
<property>
<name>mapred.capacity-scheduler.queue.queue1.capacity</name>
<value>50</value>
</property>
<property>
<name>mapred.capacity-scheduler.queue.queue2.capacity</name>
<value>50</value>
</property>
- 作业提交时设置队列:
job.setQueueName("queue1");
4、 Fair调度器示例:
- 在mapred-site.xml中配置:
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.FairScheduler</value>
</property>
- 作业提交时设置USER:
job.setUser("user1");
任务调度的主要作用是:
1、 资源管理和队列隔离。
2、 防止占用集群大部分资源的”大作业”漫延。
3、 为不同的用户分配和管控资源。
来看一些简单示例:
1、 FIFO调度器(默认)
- mapred-site.xml中无特殊配置
- 作业按提交顺序执行
2、 Capacity调度器:
- mapred-site.xml配置及队列设置如上
- 作业提交时
job.setQueueName("queue1")
指定队列 - 资源按队列比例分配
3、 Fair调度器:
- mapred-site.xml配置如上
- 作业提交时
job.setUser("user1")
指定用户 - 资源尽量平均分配给不同用户
所以Hadoop通过默认的和可插拔的调度器,可以实现丰富的资源管理和调度功能。