本文介绍集群在顺序写、顺序读、随机读等方面的性能测试方法。
注意事项
性能测试前,请注意以下事项。
吞吐最大不会超过ECS带宽。如果您的ECS带宽只有1.5 Gbps,则吞吐最高可达到187.5 MB/s。
文件存储 HDFS 版的吞吐能力和购买的存储空间相关。
测试集群吞吐性能所使用的TestDFSIO是一个分布式任务,存在任务调度及结果汇总阶段,计算集群吞吐均值时会略低于文件存储 HDFS 版吞吐限速。
在进行顺序读与随机读的测试之前需要确保文件存储 HDFS 版之上已有指定的待测数据,如果没有待测数据请使用顺序写先生成待测数据再进行顺序读与随机读的测试。
测试环境
配置名称 | 配置说明 |
计算VM配置 | CPU核数:4核 |
内存:16 GB | |
机器数量:6台 | |
网络带宽:1.5 Gbps | |
文件存储 HDFS 版配置 | 实例大小:10 TB |
吞吐限速:1000 MB/s | |
软件配置 | Apache Hadoop:Hadoop 2.7.6 |
测试工具
TestDFSIO是Hadoop系统自带的基准测试组件,用于测试DFS的IO吞吐性能。
TestDFSIO的jar包位于开源Hadoop版本的${HADOOP_HOME}/share/hadoop/mapreduce目录下,其中${HADOOP_HOME}为测试机器中的Hadoop安装目录,jar包名为hadoop-mapreduce-client-jobclient-x.x.x-tests.jar。
本文所有命令均在 ${HADOOP_HOME}/bin 目录下执行。
您可通过执行以下命令,查看TestDFSIO的使用方法
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.6-tests.jar TestDFSIO
顺序写性能测试
预估值:1000 MB/s
将文件写入到文件存储 HDFS 版。
将500个大小为4 GB的文件按顺序写入到文件存储 HDFS 版,读写数据的缓存大小为8 MB,并将统计数据写入 /tmp/TestDFSIOwrite.log中。
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.6-tests.jar TestDFSIO -write -nrFiles 500 -size 4GB -bufferSize 8388608 -resFile /tmp/TestDFSIOwrite.log
执行以下命令查看文件存储 HDFS 版已写入的文件数量及大小。
./hadoop fs -count -q -h /benchmarks/TestDFSIO/io_data
执行以下命令查看生成的统计信息文件。
cat /tmp/TestDFSIOwrite.log
测试结果如下所示。
Total MBytes processed:写入的文件的总大小。
Test exec time sec:消耗的时长。
计算集群吞吐。
您可以通过以下两种方式计算集群吞吐。
通过统计信息文件计算吞吐。
集群的吞吐约为Total MBytes processed / Test exec time sec = 985.16 MB/s
通过ECS监控的带宽流出速率,计算集群吞吐。
进行顺序写时集群中每个节点的带宽流出速率大约为1.4 Gb/s、1.4 Gb/s、1.4 Gb/s、1.1 Gb/s、1.1 Gb/s、1.45 Gb/s。
集群吞吐=(1.4+1.4+1.4+1.1+1.1+1.45)*1000÷8=981.25 MB/s
顺序读性能测试
预估值:1000 MB/s
按顺序读取文件存储 HDFS 版上的文件。
顺序读取文件存储 HDFS 版上面500个大小为4 GB的文件,读写数据的缓存大小为8 MB,并将统计数据写入/tmp/TestDFSIOread.log中。
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.6-tests.jar TestDFSIO -read -nrFiles 500 -size 4GB -bufferSize 8388608 -resFile /tmp/TestDFSIOread.log
执行以下命令查看生成的统计信息文件。
cat /tmp/TestDFSIOread.log
测试结果如下所示。
Total MBytes processed:写入的文件的总大小。
Test exec time sec:消耗的时长。
计算集群吞吐。
您可以通过以下两种方式计算集群吞吐。
通过统计信息文件计算吞吐。
集群的吞吐约为Total MBytes processed / Test exec time sec = 989.15 MB/s
通过ECS监控的带宽流入速率,计算集群吞吐。
进行顺序读时集群中每个节点的带宽流入速率大约为1.4 Gb/s,1.45 Gb/s,1.1 Gb/s,1.4 Gb/s,1.45 Gb/s,1.1 Gb/s
集群吞吐=(1.4+1.45+1.1+1.4+1.45+1.1)*1000÷8=987.5 MB/s
随机读性能测试
预估值:1000 MB/s
随机读取文件存储 HDFS 版上的文件。
随机读取文件存储 HDFS 版上面的大小为1 GB的500个文件,读写数据的缓存大小为8 MB,并将统计数据写入/tmp/TestDFSIOrandomread.log中。
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.6-tests.jar TestDFSIO -read -random -nrFiles 500 -size 1GB -bufferSize 8388608 -resFile /tmp/TestDFSIOrandomread.log
执行以下命令查看生成的统计信息文件。
cat /tmp/TestDFSIOrandomread.log
测试结果如下所示。
Total MBytes processed:写入的文件的总大小。
Test exec time sec:消耗的时长。
计算集群吞吐。
您可以通过以下两种方式计算集群吞吐。
通过统计信息文件计算吞吐。
集群的吞吐约为Total MBytes processed / Test exec time sec = 962.07 MB/s
通过ECS监控的带宽流入速率,计算集群吞吐。
进行随机读时集群中每个节点的带宽流入速率大约为1.35 Gb/s,1.2 Gb/s,1.4 Gb/s,1.1 Gb/s,1.4 Gb/s,1.35 Gb/s
集群吞吐=(1.35+1.2+1.4+1.1+1.4+1.35)*1000÷8=975 MB/s