论文部分内容阅读
摘要:随着计算机和互联网技术的快速发展,使得云计算技术应运而生。由于海量数据已经不能够存储在单一的计算机上,传统的串行处理需要大量的时间花销,因此如何对海量数据进行高效处理成为一个亟需解决的问题。MapReduce作为一个支持分布式并行处理海量数据的计算模型,广泛适用于机器学习、数据挖掘和科学计算等数据密集型应用领域。:Hadoop是MapReduce计算模型的一个开源实现,已经被Yahoo,Amazon和Facebook等企业用于在搜索日志和访问日志这类大数据集上进行各项数据挖掘。虽然Hadoop的使用价值已经得到了大家的认可,但是还存在很多问题,其性能有待进一步的改善。Hadoop的核心组件包括Hadoop文件系统(HDFS)和MapReduce计算框架,它们是Google文件系统(GFS)和MapReduce的开源实现版本。在对HDFS和MapReduce进行了深入的研究和实践的基础上,本文阐述了Hadoop共享集群不能保证不同数据量作业都高效运行的问题。这主要体现于共享集群在保证相对较小数据量作业的并行性能的同时,在该集群上运行大数据量作业会产生非常多的map任务,给集群的控制节点带来非常大的压力,并且在初始化这些map任务时会耗费非常多的资源。本文从文件系统(HDFS)和分布式并行计算框架(MapReduce)相结合的角度出发,提出了基于块聚集的自适应分片算法,使集群的任务分配机制按照作业的实际数据量、数据文件个数和作业可用计算资源等因素自行确定分片的大小,并使数据以分片为单位在节点上聚集性存储。该算法保证了不同数据量作业的并行度,并适当降低了大数据量作业的map任务个数,减少了作业运行过程中初始化任务的开销和控制节点的压力,从而有效地提高了集群的运行性能。当前Hadoop在实现上假定集群中的所有节点的计算能力是相同的,并假定大部分map任务的数据都存储在本地磁盘上,在实际执行map任务的时候数据的本地性并没有得到很好的体现。这使得异构Hadoop集群的运行性能极端低下。本文也针对这一问题展开讨论,并提出根据集群节点的实际计算能力和输入数据的实际大小计算作业的分片大小,同时将分片内的数据按照节点计算能力进行集聚性存储,提高异构集群的数据本地性。实验证明优化后的Hadoop在异构集群中能够更加高效的运行计算任务。