论文部分内容阅读
云计算给社会带来了许多变化,社会生活被不断地数字化。如何处理海量的数据成为了一个令人关注的话题。Hadoop是一个分布式计算软件框架,其包含分布式存储和MapReduce计算,能够使得分布式处理海量数据成为可能。Hadoop作业调度决定了Hadoop集群的使用效率以及用户体验。但是,Hadoop目前的调度算法没有考虑到集群异构性,如何高效地对异构Hadoop集群进行作业调度,成为了一个具有挑战性的难题。本文分析了Hadoop的任务运行机制,对现有的Hadoop FIFO调度算法、能力调度算法、公平调度算法、LATE调度算法等调度算法进行了研究,发现在异构Hadoop集群中调度算法没有对执行任务的计算节点进行感知,不能够根据不同的机器性能分配不同的任务。为此,本文提出了一种面向过程感知的任务调度算法IOAware o该算法对计算节点的硬件性能进行评估,并在任务的执行过程中推测任务的属性。在后续任务分配的时候,结合计算节点的性能表现分配不同的任务,从而达到共享计算节点磁盘IO的效果。这样能够缩短并行的任务的执行时间,提高集群的吞吐率。IOAware算法的特点体现在两个方面:一是,从任务对磁盘IO的需求来判断任务的属性,将任务分为CPU-Bound和IO-Bound类型,将不同类型的任务组合在一起,减少多个任务同时对磁盘10的操作,降低磁盘阻塞的可能性;二是,在考虑任务属性的同时,把提高任务的输入数据本地化比例作为一个重要的指标,减少数据网络传输时间,达到减少任务的执行时间的效果。为了验证IOAware调度算法的理论可行性,论文在Hadoop平台下设计并且实现了IOAware调度模块。在Hadoop集群中使用该调度模块进行多次实验,从作业的响应时间,任务的数据本地化比例,系统吞吐率和系统资源这四个方面来对IOAware与FIFO,Capacity调度算法和公平调度算法进行性能上的比较。通过实验发现,对于单独的任务执行时间来说,该调度模块与现有的调度模块获得的时间一致;对于具有不同属性的任务来说,该调度模块能够将不同属性的任务组合在一起,减少了同一时刻磁盘操作的次数,缩短了CPU等待磁盘的时间,提高了CPU利用率,其次调度模块有效的提高了任务的数据本地化率,提升了系统的吞吐率。