本次主要是对新集群的性能测试,测试环境:
系统 | 环境 | 台数 | CPU | 内存 | 硬盘 |
Centos7.3 | CDH6.0.1 | 3台 | 32 | 64G | 16T |
Hadoop自带的测试工具:Hadoop基准测试
首先,对服务器做一下测试,主要是磁盘I/O和网络I/O。
磁盘I/O读测试
hdparm 用于查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定。这里只用作磁盘读测试。
yum install hdparm
hdparm -t /dev/sdd
三次测试结果:
/dev/sdd:
Timing buffered disk reads: 618 MB in 3.00 seconds = 205.96 MB/sec
Timing buffered disk reads: 620 MB in 3.01 seconds = 206.32 MB/sec
Timing buffered disk reads: 620 MB in 3.01 seconds = 206.30 MB/sec
说明:
3秒读取了618M磁盘,读速度约205.96M每秒
写测试
dd 这里使用 time + dd 简单测试写速度,不要求很精确,重点是Hadoop集群的测试。
查看内存缓存情况
free -m
清除缓存
sync; echo 3 > /proc/sys/vm/drop_caches
查block size
blockdev --getbsz /dev/sda
写测试
echo 3 > /proc/sys/vm/drop_caches; time dd if=/dev/zero of=/testdd bs=4k count=100000
三次测试结果:
记录了100000+0 的读入
记录了100000+0 的写出
409600000 bytes (410 MB) copied, 2.39185 s, 171 MB/s
409600000 bytes (410 MB) copied, 2.34307 s, 175 MB/s
409600000 bytes (410 MB) copied, 2.44128 s, 168 MB/s
网络带宽
yum -y install iperf3
服务端
iperf3 -s
客户端
iperf3 -c serverip
[ 4] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec receiver
说明
千兆网卡,网卡带宽速率941Mbits/sec左右
集群测试
使用Hadoop自带的基准测试工具包进行集群性能测试
1. TestDFSIO
1. 测试HDFS写性能
测试内容:向HDFS集群写20、50个128M的文件
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-tests.jar \
TestDFSIO \
-write \
-nrFiles 20 \
-size 128MB \
-resFile /tmp/TestDFSIO_results.log
注意:因为是切换hdfs用户在Hadoop上运行,生成本地日志的路径可以不指定,但是得在hdfs用户有写的权径路下运行,生成的日志也在运行路径下,否则需要指定路径。
本地保存的结果
cat /tmp/TestDFSIO_results.log
测试结果
说明:
Throughput mb/sec 每个 map task 的平均吞吐量,Average IO rate mb/sec 每个文件的平均 IO 率。
多少个文件就会有多少MapTask,集群并发吞吐量和IO率为 * MapTask个数。
10
20
100
2. 测试HDFS读性能
测试内容:读取HDFS集群10、20、100个128M的文件
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-tests.jar \
TestDFSIO \
-read \
-nrFiles 100 \
-size 128MB \
-resFile /tmp/TestDFSIO_results.log
测试结果
10
20
100
3. 清除测试数据
查看测试数据
数据默认保存在HDFS下,/benchmarks
hadoop fs -du -h /benchmarks/TestDFSIO
第一列是文件大小,第二列是HDFS默认备份数为3份的总大小。
清除数据
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-tests.jar \
TestDFSIO -clean
2.nnbench
测试NameNode的负载
它会生成很多与HDFS相关的请求,给NameNode施加较大的压力。这个测试能在HDFS上模拟创建、读取、重命名和删除文件等操作。
测试使用30个mapper和3个reducer来创建10000个文件
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-tests.jar nnbench \
-operation create_write \
-maps 30 \
-reduces 3 \
-blockSize 1 \
-bytesToWrite 0 \
-numberOfFiles 10000 \
-replicationFactorPerFile 3 \
-readFileAfterOpen true \
-baseDir /benchmarks/NNBench-`hostname`
cat /tmp/NNBench_results.log
12个mapper和2个reducer来创建1000个文件
30个mapper和3个reducer来创建10000个文件
100个mapper和50个reducer来创建10000个文件
清除测试数据
sudo -uhdfs hadoop fs -rm -r /benchmarks/NNBench-cdh-master
3. mrbench
mrbench多次重复执行一个小作业,检查在机群上小作业的运行是否可重复以及运行是否高效。
测试运行一个作业50次
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-tests.jar \
mrbench \
-numRuns 50 \
-maps 2 \
-reduces 1 \
-inputLines 10 \
-inputType descending
清除数据
sudo -uhdfs hadoop fs -rm -r /benchmarks/MRBench
4. Terasort
Terasort是测试Hadoop的一个有效的排序程序。
通过Hadoop自带的Terasort排序程序,测试不同的Map任务和Reduce任务数量,对Hadoop性能的影响。 实验数据由程序中的teragen程序生成。
一个TeraSort测试需要按三步:
1. TeraGen生成随机数据
2. TeraSort对数据排序
3. TeraValidate来验证TeraSort输出的数据是否有序,如果检测到问题,将乱序的key输出到目录
1. TeraGen生成随机数
生成随机数,Teragen每行数据大小是100B,1TB行数=1024*1024*1024*1024/100=10995116277。maptask个数默认2个,自定义为120个。将结果输出到目录 /tmp/examples/terasort-intput。
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
teragen -Dmapred.map.tasks=120 10995116277 \
/tmp/examples/terasort-input
2. TeraSort排序
默认reduce个数1个,自定义为90个。读取/tmp/examples/terasort-intput,将结果输出到目录 /tmp/examples/terasort-output。
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
terasort -Dmapred.reduce.tasks=90 \
/tmp/examples/terasort-input /tmp/examples/terasort-output
3.TeraValidate验证
如果检测到问题,将乱序的key输出到目录/tmp/examples/terasort-validate
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
teravalidate /tmp/examples/terasort-output /tmp/examples/terasort-validate
5. sort
排序检测MR
1. randomWriter产生随机数,每个节点运行10个Map任务,每个Map产生大约1G大小的二进制随机数
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
randomwriter /tmp/examples/random-data
2. sort排序
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
sort /tmp/examples/random-data /tmp/examples/sorted-data
3. testmapredsort验证数据是否真正排好序了
sudo -uhdfs hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
testmapredsort \
-sortInput /tmp/examples/random-data \
-sortOutput /tmp/examples/sorted-data