(转)测试环境:
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 中的一些参数的设置对性能的影响,对于整体性能优化只对虚拟机得到有关的结论,在以后的测试中将继续探索其他的测试方法和测试角度。