xiyf0 2011-11-18
(转)测试环境:
12个节点,每个节点的物理机配置为双核CPU,主频2.60Hz,
内存3G,硬盘250G,网络带宽100Mbps以太网,虚拟机VMware workstation 7.1.0 build-261024,平台RHEL5.5,内核版本2.6.18,,虚拟机配置为单核CPU,1G内存,Hadoop版本为0.20.2,在HDFS中每个文件块有3个备份。
测试目的:
掌握Hadoop集群的安装测试,总结有关Hadoop集群性能的规律和影响因素,针对相关配置做出性能优化的解决方案。
测试原理:
在物理机上安装VMware虚拟机,并在虚拟机上安装RHEL5.5,下载并安装Hadoop0.20.2,按照相关属性配置有关文件。更详细的集群搭建过程参照文档。
Hadoop基准测试,在没有任务运行的集群上进行测试,基准测试主要使用Hadoop自带的一些基准测试程序。具体运行程序的方法参照相关文档。
1. 用TestDFSIO基准测试HDFS
TestDFSIO用来测试HDFS的I/O性能,它通过使用mapreduce作业来完成测试作为并行读写文件的便捷方法,每个文件的读写都在单独的map任务中进行,并且map的输出可以用来收集统计刚处理过的文件,这个统计数据在reduce中累积起来得到一个汇总。
测试命令为:
% bin/hadoop jar $HADOOP_INSTALL/hadoop-0.20.2-test.jar TestDFSIO –write
-nrFile 10
-fileSize 500
运行这个命令可进行写入基准测试,在运行的最后,结果被写入控制台并记录到本地文件TestDFSIO_results.log,文件默认写在、benchmarks/TestDFSIO目录下(可以通过设置test.build.data系统属性来改变),一个叫io_data的目录下。
使用-read 选项运行可以进行读取基准测试。但注意,读取这些文件必须已经存在(由上一步的TestDFSIO –write写入):
% bin/hadoop jar $HADOOP_INSTALL/hadoop-0.20.2-test.jar TestDFSIO –write
-nrFile 10
-fileSize 500
控制测试的变量,比如文件大小,集群节点数目,每个物理机上运行的虚拟机数量等。最后,由控制台输出和相关文件的记录进行分析,总结。
在对HDFS进行基准测试后,要通过参数–clean从HDFS上删除所有生成的文件。
% bin/hadoop jar $HADOOP_INSTALL/hadoop-0.20.2-test.jar TestDFSIO –clean
2. 用wordcount测试MapReduce的性能
Wordcount是Hadoop自带的一个测试运行的小程序,它的输入是一个文本文件,输出是一个文本文件,每一行包含一个单词和它在输入文本中出现的频率,用制表符隔开。
运行命令如下:
%cat test.txt > /tmp/test.txt
%bin/hadoop dfs –mkdir test-in
%bin/hadoop dfs –copyFromLocal /tmp/test.txt test-in
% bin/hadoop jar $HADOOP_INSTALL/hadoop-0.20.2-example.jar
Wordcount test-in test-out
控制测试中的相关变量,比如文件大小,集群节点数目,每个物理机上运行的虚拟机数量等,重复运行几次,查看每次控制台中任务开始的时间和结束的时间,做记录和分析。
测试步骤:
1. 首先控制节点数量和每个物理机上的虚拟机数量,因为这两个变量在我们的测试中结果影响是一样的,所以归为一类,我们共有3台物理机,每台上面安装了4台虚拟机,共12个节点,我们控制每一台物理机上运行的虚拟机数量从1增加到4,每次读写控制为10个文件,每个文件5MB,分别记录TestDfsIO_results.log文件记录的结果。也按这个控制方法运行一个2KB的文本文件作为输入的wordcount程序,记录程序运行时间。
我们设定不同规模的集群为Vcloud
节点数 | 3 | 6 | 9 | 12 |
集群名称 | Vcloud1 | Vcloud2 | Vcloud3 | Vcloud4 |
2. 把12个节点全部运行起来,控制每次读写文件的大小,从1MB到6MB,分别记录TestDfsIO_results.log文件记录的结果。同这个规律一样的运行输入文件分别为2KB、4KB、6KB、8KB的wordcount程序,并记录运行时间。
结果分析:
1控制集群规模的IO读写测试
图1纵轴为运行写测试平均时间,横轴为不同规模的集群
图2纵轴为运行读测试平均时间,横轴为不同规模的集群。
2控制读写文件大小测试IO读写性能
图3,纵轴为平均写运行平均速度,横轴为文件大小
图4纵轴为平均读运行平均速度,横轴为文件大小
3运行wordcount测试MapReduce性能
图5,纵轴为一个2KB输入的文件平均运行时间,横轴为集群规模
图6纵轴为每个输入的wordcount运行平均时间,横轴为输入文件大小
结论和推断
对整体的IO读写测试和MapReduce的性能测试,由数据和图像分析可知总体的趋势为平均运行时间先减小在增大。
1. 对于控制集群规模的IO读写可以明显看到读取数据的速度要比写入数据的速度快得大得多。对于相同的读写量随着集群规模的增长处理运行时间有减小的趋势,而后出现的随集群规模增大而出现的增长主要是因为我们在测试中由于硬件配置和数量的限制,在每台物理机上运行更多的虚拟机时(以三台为界),虚拟机的性能受物理机性能(比如网络带宽,内存大小等)限制,出现整体性能下降,导致读写运行时间增大。
2. 控制文件大小的IO读写测试
对于控制文件大小的测试中由图像和数据可知一开始随着文件大小的增加,出现了运行处理时间的减小,这说明HDFS很适合于处理较大规模的读写数据,但随着文件大小的增大相应的出现了平均运行时间的增大,这是由集群节点数目、硬件配置等原因出现的必然结果。但总体看来还是读取速度大于写入速度。
3. 控制集群规模的MapReduce性能测试
对于控制集群规模的MapReduce性能测试,整体趋势和控制集群规模的IO读写测试的趋势一致,影响原因也大致相同。
4. 控制输入文件大小的MapReduce性能测试
对于控制文件大小的MapReduce性能测试中数据和结果的分析可知,和控制文件大小的IO读写测试发展趋势基本相同,影响原因也基本一致。
5. 测试结果与华中科技大学的测试结果对比
相对于华科的测试,我们有以下几点不同1.我们没有进行物理机集群的测试;2.我们两个学校的硬件有很大不同,我们硬件的限制过早的出现了性能的限制瓶颈,集群规模也和华科有相对的差距。
6. 总体总结
这次测试的结果是客观测试的结果,由其中的方法可以得到对于一个合理的虚拟集群,物理机上运行的虚拟机数量存在一个值,当同台物理机上虚拟机数量小于这个指的时候,可假设各虚拟机之间的性能是平行互不干扰并且处于最优状态的。同台物理机上的虚拟机数量超过这个值虚拟机之间将互相影响,出现所有虚拟机的性能下降,而且由多启动的虚拟机来增加集群规模对集群性能的提高指数远小于虚拟机整体性能下降对集群性能的降低指数,所以整体出现性能下降的情况。正是这个最佳值将使虚拟机最大化的利用物理资源以提高计算性能。
这次测试并未深入到Hadoop中的一些参数的设置对性能的影响,对于整体性能优化只对虚拟机得到有关的结论,在以后的测试中将继续探索其他的测试方法和测试角度。