Terasort是Hadoop自带的用于集群性能基准测试的工具,其源码位于https://github.com/apache/hadoop/tree/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/terasort下。
TeraSort用法
该性能基准测试工具针对Hadoop集群的HDFS和MapReduce层进行综合测试。完整的测试步骤为:
- 使用TeraGen程序生成官方GraySort输入数据集。(注:SortBenchmark是JimGray自98年建立的一项排序竞技活动,其对排序的输入数据制定了详细规则,要求使用其提供的gensort工具生成输入数据。而Hadoop的TeraGen数据生成工具的算法与gensort一致。)
- 在输入数据上运行真正的TeraSort性能基准测试工具
- 通过TeraValidate程序验证排序后的输出数据
TeraGen程序生成数据的格式为(详见TeraSort.generateRecord方法实现):
- 10字节键:一个16字节随机数的高10字节
- 2字节常量:0x0011
- 32字节rowid
- 4字节常量:0x8899AABB
- 48字节填充:由一个16字节随机数的低48比特生成
- 4字节常量:0xCCDDEEFF
也就是说TeraGen程序生成的一行数据有100字节。TeraGen程序参数需要指定行数,可指定单位:
- t:1000,000,000,000
- b:1000,000,000
- m:1000,000
- k:1000
TeraSort测试
依次运行teragen、terasort和teravalidate:
hadoop@node50064:~$ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.x.jar teragen 5m /user/hadoop/teragen-data
hadoop@node50064:~$ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.X.jar terasort /user/hadoop/teragen-data /user/hadoop/terasort-data
15/05/24 08:29:03 INFO terasort.TeraSort: starting
15/05/24 08:29:04 INFO input.FileInputFormat: Total input paths to process : 2
Spent 123ms computing base-splits.
Spent 2ms computing TeraScheduler splits.
Computing input splits took 127ms
Sampling 4 splits of 4
Making 1 from 100000 sampled records
Computing parititions took 558ms
Spent 686ms computing partitions.
......
15/05/24 08:34:23 INFO terasort.TeraSort: done
hadoop@node50064:~$ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.X.jar teravalidate /user/hadoop/terasort-data /user/hadoop/teravalidate-data
terasort默认使用一个reduce任务,如需通过增加reduce任务提升性能的话,可以通过指定mapreduce.job.reduces增加reduce任务个数,例如-Dmapreduce.job.reduces=2。
完成性能分析后,删除HDFS上的数据:
hadoop@node50064:~$ hadoop fs -rm -r -skipTrash tera*
Deleted teragen-data
Deleted terasort-data
Deleted teravalidate-data