您的位置:首页 > 运维架构 > 网站架构

基于KVM 虚拟化技术的Hadoop架构

2013-12-31 11:33 435 查看
        本文提出并实现了一种Hadoop与虚拟化技术相结合的模型.该模型将多核计算机虚拟成多节点集群,最大限度地利用计算资源.在实验测试的基础上,通过分析任务在Hadoop环境中的并行机制,弄清计算任务在节点中与核中的分配方式,以达到提高并行效率、降低硬件开销的目的,最后通过对典型应用问题进行计算,从而对本文所提出模型的正确性和有效性进行了验证。

        近年来,大规模数据的重要性越来越被人们所重视,因为其普遍存在于现代科学技术发展的各个领域,并且伴随着数据量的迅猛增长,使得计算对象的规模越来越大.由于单个计算机的存储空间及运算能力有限而无法满足大规模数据处理的需求,因此基于多台服务器的并行计算就是一个可靠的选择.作为一项起支撑作用的技术,它可以满足实际工

作中涉及的大规模计算的需求.为了提高大规模数据处理的精度和减少运算时间,可以借助并行计算技术来寻求一种更快速、更容易、更廉价的方式用以获取可利用的数据以及存储数据的方法。通常认为,高性能计算机的内存结构可以分为共享存储的内存结构和分布式存储的内存结构两大类.现在以分布式存储为代表的层次并行体系结构的高性能计算机发展迅速.在过去的几年间,MPI和OpenMP的编程模型已经成为并行计算的主流选择.由于使用MPI编程的消息传递模型时,细粒度的并行会引发大的通信量,造成了动态负载

平衡相对困难.而且,OpenMP只能在共享存储的机器上运行,因此对于大规模密集型数据而言,采用分布式存储的并行集群将会使计算效率得到有效的提高.当前Hadoop架构成为高性能计算机发展的主流,它采用分布式存储系统和并行执行机制,将大规模数据分布在集群的各节点中.目前多核计算机被广泛应用,使用多核计算机组成Hadoop集群时,分发给各个数据节点的多个任务会产生资源竞争,像CPU、内存、输入输出带宽等,会使得暂时不用的资源处于等待状态,这样能够引起一些资源的浪费和响应时间的延长,资源开销相应有所增长,同时对系统性能产生消极的影响。

        针对上述问题我们提出了一种基于Hadoop结合虚拟化技术的模型,此模型利用Kernel-basedVirtual Machine(KVM)虚拟技术按照每台计算机CPU的个数将核模拟成计算机,即把一台多核计算机模拟成多台计算机,把一定的计算资源合理分配,允许一个平台同时运行多个操作系统,这样做的好处是可以提高计算效率.原因在于,在该模式下不同的应用程序工作时处于相互独立的状态,即在独立的空间中运行,从而避免了彼此受到影响.本文首先讨论了Hadoop结合虚拟化技术的框架机制,接着给出了三台双核计算机集群虚拟成六台计算机集群的方法;然后通过实验比较虚拟前与虚拟后的计算性能;最后分析实验并给出结论。

         为了充分利用硬件资源,本文把KVM 虚拟化技术引入Hadoop架构中.KVM 是一个开源的系统虚拟化模块,需要硬件的支持,是基于硬件的完全虚拟化.KVM 由两部分组成,一部分是KVMDriver,已经成为Linux内核的一个模块,负责虚拟机的创建,虚拟机内存的分配、虚拟CPU 寄存器的读写以及CPU 的运行等;另一部分是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件、提供I/O设备模型以及访问外设的途径.CPU的虚拟化技术可以单CPU 模拟多CPU 并行,本文利用KVM 虚拟化技术的这一特性将Hadoop集群的双核计算机中的CPU
模拟成一台计算机,从而使得硬件资源被充分利用并在一定的硬件设备上扩大集群规模.

        根据我们使用的数据,三台双核计算机的资源已经满足计算量.所以本次实验使用三台相同配置的双核计算机作为实验设备构建了一个三节点集群,并使用两种实验环境作比较来说明问题:实验环境一,以其中一个节点作为主节点,其他两个作为从节点,不使用KVM 虚拟化模块技术.实验环境二,在三台计算机集群基础之上使用KVM 虚拟化模块

技术把六核虚拟为六个节点,其中一个节点作为主节点,其他五个节点作为从节点.两实验环境中的三台计算机使用相同配置的PC。所做实验分为两组.第一组求证在Hadoop模型中计算机任务在集群中的分配机制.使用Hadoop自带的蒙特卡洛求PI的程序作为测试程序,使用实验环境一.设置计算任务为10个,计算量在10的8次方量级,计算任务运行三遍,记录在系统管理器中每个核的使用情况.第二组实验是将三台双核计算机组成的集群利用虚拟技术变为六个节点组成的集群,即每个核虚拟为一个节点.这么做可以在很大程度上提高计算机资源的利用率.本组实验设置Hadoop的块大小为512KB,冗余备份设置为3,使用的程序是字符统计程序(wordcount.jar)和矩阵相乘算法程序(MatrixMulti.jar).

         程序中设置每个节点一次分2个任务.第一组中的第一次实验主节点把10个任务分别分配给3、4、5、6、7这五个CPU,第二次实验主节点把任务分配给2、3、4、6、7这五个CPU,第三次实验主节点把任务分配给2、3、6、7、8这五个CPU.结果表明Hadoop的任务分配机制是随机的、不固定的,每个节点得到的任务量是由程序设定的.第二组使用字符统计程序和矩阵相乘算法程序在上述两种实验环境中运行.对于字符统计程序我们使用了4组数据,其数据大小分别为1GB、2GB、4GB和6GB.

在上述两个实验环境中使用相同内容相同大小的数据,得出的结果表明实验环境二的性能明显好于实验环境一的性能.对于矩阵相乘算法程序我们使用了七组数据,分别为3×3、4×4、5×5、6×6、7×7、8×8和9×9矩阵.同样的,在上述两个实验环境中使用相同的矩阵,可以看出虚拟的六节点集群所用时间少于三节点集群而且计算时间在直线上下波动.结果表明虚拟集群的性能优于没有虚拟的集群而且虚拟的集群相对于没有虚拟的集群而言计算性能呈线性增长。

         实验过程中,三节点集群的CPU 利用率大约在60%~70%左右,由于分配给各节点的任务相互竞争资源,一些暂时不用的资源处于等待状态而闲置不用造成资源浪费,从而CPU 达不到很高的利用率.三节点集群经过虚拟化之后形成六节点集群资源得到合理分配,减少了资源空闲浪费.CPU 利用率几乎是100%.另一方面Blocksize变量对不同大小的数据文件计算性能也有影响.当数据少而Blocksize设置超过总数据的大小时,使得较多的CPU产生空闲,不利于计算.当数据多时,Blocksize设置超过总数据或超出节点计算能力时,也不利于计算.只有为处理不同数据文件大小的程序设置合适的Blocksize变量才能够提升计算性能.对高并行性密集型数据而言,充分利用计算资源是很有必要的.虚拟化技术可以把资源细分,减少由于作业竞争资源造成的浪费。.Hadoop采用的是分布式数据文件系统,每个数据节点按就近原则处理数据,减少通信消耗.通信并行性程序则要考虑虚拟化带来的通信消耗.虚拟的集群跟未虚拟的集群调度任务的策略是不一样的,因为在实验环境一中每隔2s为各个节点分配一轮任务,而实验环境二则是连续为各个节点分配任务。

        

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KVM Hadoop 虚拟化