集群搭建好后,我们一般都会关心:我们的数据多久能上传到集群?以及多久能从HDFS上拉取到我们需要的数据?为了了解HDFS的读写性能,我们需要对集群进行压测。
HDFS的读写性能主要受到网速和磁盘读写速度的影响。所以我们主要也是通过这两方面进行测试。
0.测试环境
搭建一个拥有3台服务器(3个DataNode)的集群,副本数量设置为3。
为了方便测试,将网速限制在100Mbps。
100Mbps单位是 bit,10M/s单位是 byte,1byte = 8bit,100Mbps/8 = 12.5M/s
1.测试HDFS写性能
在限制网速的情况下测试HDFS的写性能。
Q:为什么要限制网速测试HDFS的写性能?
A:在限制网速的情况下,若HDFS的写速度接近网速的“全速”,则说明此时限制HDFS写性能的就是我们限制的网速,而不是磁盘的读写速度;若HDFS的写速度远远小于网速的“全速”,则说明此时限制HDFS写性能的是磁盘的读写速度。
测试内容: 向HDFS集群写10个128M的文件。使用Hadoop自带的测试用例 TestDFSIO -write。
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB
测试结果:
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: Number of files: 10
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: Total MBytes processed: 1280
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: Throughput mb/sec: 1.61
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: Average IO rate mb/sec: 1.9
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: IO rate std deviation: 0.76
2021-08-08 10:43:16,854 INFO fs.TestDFSIO: Test exec time sec: 133.05
测试说明:
- Number of files —— 文件数量,
一般数量为 CPU数量-1 ,这样是为了使所有服务器都参与工作。 - Total MBytes processed —— 处理的数据的总量。
- Throughput mb/sec —— 吞吐量,
计算方式为:处理数据总量 / 总处理时间。 - Average IO rate mb/sec —— 平均IO速率,
计算方式为:Σ(mapTask处理数据量 / mapTask处理时间) / mapTask数量。 - IO rate std deviation —— IO速率方差,值越小,则说明集群中mapTask的处理能力越均衡。
- Test exec time sec —— 测试执行时间。
测试结果分析: (简易测试,结论仅供参考)
- 由于集群只有3个节点,并且设置副本数量为3,所以一共参与测试的文件:10个文件 * 2个副本 = 20个
- 实测速度:1.61m/s * 20个文件 = 32.2m/s
- 三台服务器的带宽:12.5 + 12.5 + 12.5 = 37.5m/s (实际网速受到各种因素的影响会比理论低一些)
可见,实测速度接近网速的“全速”,网络资源已经用满。若实测速度远远小于网速的“全速”,并且实测速度不能满足工作需求,可以考虑采用固态硬盘或者增加磁盘个数。
2.测试HDFS读性能
测试内容: 读取HDFS集群中10个128M的文件。使用Hadoop自带的测试用例 TestDFSIO -read。
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB
测试结果:
2021-08-08 11:34:15,847 INFO fs.TestDFSIO: Number of files: 10
2021-08-08 11:34:15,847 INFO fs.TestDFSIO: Total MBytes processed: 1280
2021-08-08 11:34:15,848 INFO fs.TestDFSIO: Throughput mb/sec: 200.28
2021-08-08 11:34:15,848 INFO fs.TestDFSIO: Average IO rate mb/sec: 266.74
2021-08-08 11:34:15,848 INFO fs.TestDFSIO: IO rate std deviation: 143.12
2021-08-08 11:34:15,848 INFO fs.TestDFSIO: Test exec time sec: 20.83
测试结果分析: (简易测试,结论仅供参考)
读取文件速度远大于网速。这是因为集群只有3台服务器,且有3个副本,数据读取遵循就近原则,相当于都是读取的本地副本数据,没有走网络,所以实测速度应该接近磁盘读写速度。若实测速度远低于服务器的磁盘读写速度,且方差较大,说明集群中的少数磁盘可能出问题了;若实测速度远低于服务器的磁盘读写速度,且方差较小,说明集群中的多数磁盘可能都出问题了。
磁盘读写速度:
- 机械硬盘:一般在100m/s左右
- 固态硬盘:一般在200m/s – 500m/s,甚至更高。