Hadoop的TestDFSIO测试
为了测试Hadoop用mapreduce方式读写文件系统的性能,开发了TestDFSIO,用法如下:
写测试
cd到hadoop安装目录:
# cd hadoop
看看内存情况:
# free -g
同步内存文件缓存到硬盘:
# sync
清空linux文件系统缓存:
# echo 3 > /proc/sys/vm/drop_caches
再次查看内存情况:
# free -g
切换到hadoop用户:
# su – hadoop
$ cd hadoop
$ hadoop jar hadoop-test-0.20.2-cdh3u0.jar TestDFSIO -write -nrFiles 1000 -fileSize 512 -bufferSize 67108864
其中hadoop-test-0.20.2-cdh3u0.jar在下载来的hadoop里面应该已经编译好了。参数应该很清楚,-nrFiles为写入文件数量,-fileSize为每个文件大小。
测试结果:
11/06/09 11:04:03 INFO fs.TestDFSIO: —– TestDFSIO —– : write
11/06/09 11:04:03 INFO fs.TestDFSIO: Date & time: Thu Jun 09 11:04:03 CST 2011
11/06/09 11:04:03 INFO fs.TestDFSIO: Number of files: 1000
11/06/09 11:04:03 INFO fs.TestDFSIO: Total MBytes processed: 512000
11/06/09 11:04:03 INFO fs.TestDFSIO: Throughput mb/sec: 3.0791832418338796
11/06/09 11:04:03 INFO fs.TestDFSIO: Average IO rate mb/sec: 3.3843436241149902
11/06/09 11:04:03 INFO fs.TestDFSIO: IO rate std deviation: 1.4860198954469508
11/06/09 11:04:03 INFO fs.TestDFSIO: Test exec time sec: 218.298
结果说明:
Total MBytes processed : 总共需要写入的数据量 ==》 512X1000
Throughput mb/sec :总共需要写入的数据量/(每个map任务实际写入数据的执行时间之和(这个时间会远小于Test exec time sec))==》512000/(map1写时间+map2写时间+…)
Average IO rate mb/sec :(每个map需要写入的数据量/每个map任务实际写入数据的执行时间)之和/任务数==》(512/map1写时间+512/map2写时间+…)/1000,所以这个值跟上面一个值总是存在差异。
IO rate std deviation :上一个值的标准差
Test exec time sec :整个job的执行时间
读测试
如果说写测试还可以不要清空linux文件系统缓存的话,跟着的读测试则必须清空,否则可能会对结果影响很大。
$ su root
# free -g
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free -g
# su – hadoop
$ hadoop jar hadoop-test-0.20.2-cdh3u0.jar TestDFSIO -read -nrFiles 1000 -fileSize 512 -bufferSize 67108864
测试结果:
11/05/31 16:41:02 INFO fs.TestDFSIO: —– TestDFSIO —– : read
11/05/31 16:41:02 INFO fs.TestDFSIO: Date & time: Tue May 31 16:41:02 CST 2011
11/05/31 16:41:02 INFO fs.TestDFSIO: Number of files: 1000
11/05/31 16:41:02 INFO fs.TestDFSIO: Total MBytes processed: 512000
11/05/31 16:41:02 INFO fs.TestDFSIO: Throughput mb/sec: 51.157743703700746
11/05/31 16:41:02 INFO fs.TestDFSIO: Average IO rate mb/sec: 55.17451095581055
11/05/31 16:41:02 INFO fs.TestDFSIO: IO rate std deviation: 14.862287798304873
11/05/31 16:41:02 INFO fs.TestDFSIO: Test exec time sec: 38.702
结果说明:
结果的意思同写,就是标准差比写要大。
清理测试文件
hadoop jar hadoop-test-0.20.2-cdh3u0.jar TestDFSIO -clean
集群比较小的情况下,这个测试并发map(mapred.tasktracker.map.tasks.maximum)数越少,则显示出来的速度会越快。