论文部分内容阅读
随着数据爆炸性地增长,如何高效的分析和存储海量数据引起了人们的广泛关注,传统的网格计算、并行计算和分布式计算已经不能满足现在海量数据处理的要求,MapReduce编程模型应运而生。MapReduce的出现让海量数据的处理变得轻松和简单。MapReduce被广泛的应用于用户行为分析,广告效果分析、网络爬虫等海量数据处理。随着MapReduce集群不断扩大和MapReduce应用的增多,MapReduce一些不完善的地方也逐渐显现。由于MapReduce采用master/slave架构,主节点JobTracker就会存在单点故障问题。当前绝大多数MapReduce作业调度器是按照CPU进行调度的,作业调度的时候没有考虑到作业和机器的内存使用情况,因此,会造成大内存作业运行时占用较多的内存资源而导致TaskTracker的内存溢出甚至宕机。本文在分析MapReduce相关技术的基础上进行以下两个方面的研究工作:1)本文针对JobTracker的单点故障问题,提出了双节点热备份的解决方案,设计并实现一个双机热备系统。在该系统中,通过双机热备来提高JobTracker的故障容错能力,即引入了一个备份JobTracker去对主JobTracker进行热备份。备份JobTracker通过实时收集、解析主JobTracker的作业状态更新日志来恢复作业运行状态,从而到达主备状态同步。当主JobTracker失效或者Hadoop集群需要重启时,备份JobTracker将会迅速恢复所有的作业状态,并接管原来主JobTracker的所有服务而成为新的主JobTracker,从而保证了所有服务不间断的运行。实验表明该方案能够有效的解决JobTracker的单点故障问题,提高MapReduce的故障容错能力。备份JobTracker同步主JobTracker状态带来的额外代价较小,几乎可以忽略;故障切换和恢复时间不到2s,有着良好的用户体验。2)本文针对传统作业调度器中没有考虑到作业和TaskTracker内存使用情况,而导致TaskTracker内存溢出的问题,提出了基于内存控制的调度算法。该算法以公平调度器为基础,根据Hadoop中与作业内存相关的配置信息,估算每个作业运行时所需的内存大小,对公平调度器的调度算法进行了优化。此算法在作业调度的时候考虑了作业所需内存和集群中机器内存使用情况,该算法保留了公平调度器公平高效的优点,同时使集群内存使用达到均衡,避免TaskTracker内存溢出甚至宕机情况。实验表明该调度算法能够有效的避免TaskTracker内存溢出和宕机的情况,同时,在集群中有较多的大内存作业运行的时候能够提高集群的效率。本文的两个方案均已应用于国内最大电子商务公司的生产集群上,该生产集群的节点数超过3000台。