当hadoop中的任务数量多了之后,就需要通过指定一些策略使得任务调度更快。hadoop中的任务调度与操作系统中的任务调度有些类似,也有许多方法提供使用。
在指定调度策略之前,需要对一些指标进行研究:
- mapper的数量
mapper需要运行的时间?时间长度取决于使用的输入格式。
- reducer的数量
为了达到更高的性能,集群中的reducer数量应该略小于reducer的任务槽数。
- combiner
作业是否充分利用combiner来减少通过shuffle传输的数据量
- 中间值的压缩
对map输出进行压缩几乎总能使作业执行的更快
- 调整shuffle
shuffle过程可以对一些内存管理的参数进行调整,以弥补性能的不足
现在有一些第三方调度系统可以提供给开发者使用。
- Apache Ooize
客户端将一个立即或稍后执行的工作流定义到ooize服务器中。在ooize中工作流是一个由动作(action)节点和控制流节点组成的DAG。
动作节点执行工作流任务。当工作流结束时,Oozie通过发送一个HTTP的回调向客户端通知工作流的状态。还可以在每次进入工作流或退出一个动作节点时接收到回调。