前言
在创建好集群后,为了测试集群性能以及集群是否正确,可以运行测试程序来验证这个问题。当然,我们也可以通过基准测试来不断的优化集群参数,或者在不同的集群运行相同的基准测试,对比集群之间的性能差异。
Hadoop自带了若干个基准测评程序,能够很方便的运行。下面我们运行一些测试程序,来说明如何在Hadoop集群上进行性能测试。
TestDFSIO
TestDFSIO
主要用于测试HDFS的I/O性能,该程序通过MapReduce作业对HDFS进行文件的读写操作。
下面我们使用TestDFSIO向HDFS写入10个文件,每个文件大小为10MB,测试写入速度。
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.2-tests.jar TestDFSIO -write -nrFiles 10 -size 10MB |
在MapReduce程序程序运行完成后,会在屏幕上打印出运行的结果信息。
实际上,运行结果也会保存在HDFS上,查看测试结果。
1 | $ bin/hadoop fs -text /benchmarks/TestDFSIO/io_write/part-00000 |
测试读取速度。
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.2-tests.jar TestDFSIO -read -nrFiles 10 -size 10MB |
查看测试结果。
1 | $ bin/hadoop fs -text /benchmarks/TestDFSIO/io_read/part-00000 |
清除测试数据
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.2-tests.jar TestDFSIO -clean |
TeraSort
Hadoop自带一个名为TeraSort
的MapReduce程序,该程序对输入进行全排序。由于全部输入数据通过shuffle传输,所以TeraSort对于同时测评HDFS和MapReduce非常有用。测评分为三步:生成随机数据、执行排序和验证结果。
首先,使用teragen
生成随机数据。teragen运行一个仅有map任务的作业,可以生成指定行数的二进制数据。每一行是100字节长。下面使用10个map任务生成1GB的数据。
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar teragen -Dmapreduce.job.maps=10 10737418 /random-data |
接下来,运行terasort
进行排序。
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar terasort /random-data /sorted-data |
最后,验证数据是否已经排好序。
1 | $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar teravalidate /sorted-data /report |
其他基准测试程序
Hadoop的基准测评程序有很多,以下几种最常用。
TestDFSIO
,主要用于测试HDFS的I/O性能。该程序使用一个MapReduce作业作为并行读/写文件的一种便捷途径MRBench
,使用mrbench会多次运行一个小型作业。与TeraSort相互映射,该基准的主要目的是检验小型作业能否快速响应NNBench
,测试NameNode硬件的加载过程Gridmix
,是一个基准测评程序套装。通过模拟一些真实常见的数据访问模式,Gridmix能逼真地为一个集群的负载建模SWIM
,Statistical Workload Injector for MapReduce,是一个真实的MapReduce工作负载库,可以用来为被测系统生成代表性的测试负载TPCx-HS
,基于TeraSort的标准基准测评程序,来自事务处理性能委员会
小结
本章介绍了Hadoop相关的基准测试,并运行了TestDFSIO来测试HDFS的读写性能,以及TeraSort生成随机数据并进行排序,该测试实际上同时测评了HDFS和MapReduce。