DFSIO测试集群I/O性能

DFSIO 用法

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.X-tests.jar TestDFSIO
 15/05/22 19:50:22 INFO fs.TestDFSIO: TestDFSIO.1.8
 Missing arguments.
 Usage: TestDFSIO [genericOptions] -read [-random | -backward | -skip [-skipSize Size]] | -write | -append | -truncate | -clean [-compression codecClassName] [-n rFiles N] [-size Size[B|KB|MB|GB|TB]] [-resFile resultFileName] [-bufferSize Bytes]


DFSIO可以测试写操作和读操作,以MapReduce作业的方式运行,返回整个集群的I/O性能报告。DFSIO读写测试的位置在hdfs://namendoe:8020/benchmarks/TestDFSIO/io_data,其中读测试不会自己产生数据,必须先执行DFSIO写测试。

-read:读测试,对每个文件读-size指定的字节数
-write:写测试,对每个文件写-size指定的字节数
-append:追加测试,对每个文件追加-size指定的字节数
-truncate:截断测试,对每个文件截断至-size指定的字节数
-clean:清除TestDFSIO在HDFS上生成数据
-n:文件个数
-size:每个文件的大小
-resFile:生成测试报告的本地文件路径
-bufferSize:每个mapper任务读写文件所用到的缓存区大小,默认为1000000字节。

DFSIO测试

写10个100MB的文件
 hadoop@node50064:~$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.X-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 100MB -resFile /tmp/DFSIO-write.out


查看写测试结果
本地文件/tmp/DFSIO-write.out包含写测试性能报告:

hadoop@node50064:~$ cat /tmp/DFSIO-write.out
 ----- TestDFSIO ----- : write
 Date & time: Sat May 23 00:44:59 EDT 2015
 Number of files: 10
 Total MBytes processed: 1000.0
 Throughput mb/sec: 3.458508276210305
 Average IO rate mb/sec: 4.84163236618042
 IO rate std deviation: 2.384178973806887
 Test exec time sec: 170.605
 DFSIO 写测试在HDFS上生成的数据:
 hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO/
 Found 3 items
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:44 /benchmarks/TestDFSIO/io_write
 hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO/io_control
 Found 10 items
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_0
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_1
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_2
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_3
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_4
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_5
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_6
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_7
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_8
 -rw-r–r-- 2 hadoop supergroup 112 2015-05-23 00:42 /benchmarks/TestDFSIO/io_control/in_file_test_io_9
 hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO/io_data
 Found 10 items
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_0
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_1
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_2
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_3
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_4
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_5
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_6
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_7
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_8
 -rw-r–r-- 2 hadoop supergroup 104857600 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data/test_io_9
 hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO/io_write
 Found 2 items
 -rw-r–r-- 2 hadoop supergroup 0 2015-05-23 00:44 /benchmarks/TestDFSIO/io_write/_SUCCESS
 -rw-r–r-- 2 hadoop supergroup 79 2015-05-23 00:44 /benchmarks/TestDFSIO/io_write/part-00000读10个100MB的文件
 hadoop@node50064:~$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.X-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 100MB -resFile /tmp/DFSIO-read.out


查看读测试结果
本地文件/tmp/DFSIO-read.out包含读测试性能报告:

hadoop@node50064:~$ cat /tmp/DFSIO-read.out
 ----- TestDFSIO ----- : read
 Date & time: Sat May 23 00:59:25 EDT 2015
 Number of files: 10
 Total MBytes processed: 1000.0
 Throughput mb/sec: 101.09179134654266
 Average IO rate mb/sec: 160.2582244873047
 IO rate std deviation: 126.10457558779005
 Test exec time sec: 39.327

DFSIO 写测试在HDFS上生成的数据:

hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO
 Found 4 items
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:58 /benchmarks/TestDFSIO/io_control
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:44 /benchmarks/TestDFSIO/io_data
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:59 /benchmarks/TestDFSIO/io_read
 drwxr-xr-x - hadoop supergroup 0 2015-05-23 00:44 /benchmarks/TestDFSIO/io_write
 hadoop@node50064:~$ hadoop fs -ls /benchmarks/TestDFSIO/io_read
 Found 2 items
 -rw-r–r-- 2 hadoop supergroup 0 2015-05-23 00:59 /benchmarks/TestDFSIO/io_read/_SUCCESS
 -rw-r–r-- 2 hadoop supergroup 80 2015-05-23 00:59 /benchmarks/TestDFSIO/io_read/part-00000
 清除DFSIO在HDFS生成的数据
 hadoop@node50064:~$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.X-tests.jar TestDFSIO -clean
 hadoop@node50064:~$ hadoop fs -ls /benchmarks

Hadoop测试TeraSort

2014-02-04 21:09:15 teraSort hadoop

使用Teragen来产生数据,示例如下:
hadoop jar hadoop--examples.jar teragen 参数1 参数2
teragen的参数解释:
参数1:表示要产生的数据的行数。Teragen每行数据的大小是100B。
参数2 : 产生的数据放置的文件夹地址
如果要产生1T的数据,需要的行数=102410241024
1024/100=10995116277行

默认的teragen的启动的map数比较少,只有2个,如果要指定map数可以加-Dmapred.map.tasks=map数的方式。

比如我们来产生1T的数据,命令如下

hadoop jar hadoop-*-examples.jar teragen -Dmapred.map.tasks=100 10995116277 terasort/1T-input
 ls一下目录是否产出hadoop@myhost $ hadoop fs -ls /user/hadoop/terasort/
 Found 1 items
 drwxr-xr-x - hadoop cug-admin 0 2013-07-13 12:49 /user/hadoop/terasort/1T-input


使用Terasort排序

使用terasort对刚才使用teragen产生的数据进行排序,排序结果输出到/user/hadoop/terasort/1T-output。

默认的reduce数目是1,会导致任务跑得非常慢。通过-Dmapred.reduce.tasks指定reduce数目,这里我们设置50个

hadoop jar hadoop-*-examples.jar terasort -Dmapred.reduce.tasks=50 
 /user/hadoop/terasort/1T-input /user/hadoop/terasort/1T-output


启动Teragen之后,会提交mapre reduce任务来,产生TeraSort需要的数据

使用Teravalidate 进行验证

使用TeraValidate 对Terasort的结果进行验证:

hadoop jar hadoop-*-examples.jar teravalidate /user/hadoop/terasort/1T-output /user/hadoop/terasort/1T-validate

WordCount程序

单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"Hello World",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如下图所示。

hadoop需要做压力测试吗 hadoop性能测试工具_测试工具


上传本地file中文件到集群的input目录下 -put

hadoop需要做压力测试吗 hadoop性能测试工具_hadoop需要做压力测试吗_02


Hadoop命令会启动一个JVM来运行这个MapReduce程序,并自动获得Hadoop的配置,同时把类的路径(及其依赖关系)加入到Hadoop的库中。以上就是Hadoop Job的运行记录,从这里可以看到,这个Job被赋予了一个ID号:job_201202292213_0002,而且得知输入文件有两个(Total input paths to process : 2),同时还可以了解map的输入输出记录(record数及字节数),以及reduce输入输出记录。比如说,在本例中,map的task数量是2个,reduce的task数量是一个。map的输入record数是2个,输出record数是4个等信息。