测试环境
测试使用的FastDFS服务器,HDFS服务器均在vmware虚拟机中搭建,HDFS的服务器直接由FastDFS服务器克隆而来,所以除了一个安装了hadoop,一个安装了FastDFS,其他环境完全一致。
HDFS配置了集群环境,一主三从,但是只打开一台从节点服务器。
vmware的配置如下图:
测试主机(上述vmware、测试代码的运行环境)CPU、内存如下图:
编码层面,对HDFS和FastDFS客户端都做了一层封装以达到简化开发的目的,封装对性能的影响不大。
所有代码均在JDK1.6下编译和运行,使用JUNIT运行了测试代码,均在IDEA中完成测试。
HDFS和FastDFS均在部署完成后直接测试,未做任何优化。
当然最终的测试结果也仅供参考,毕竟不同的环境,优化手段对最终的结果影响还是很大的。
1、文件上传测试
25个小文件上传测试(最大文件30.2mb,最小文件13b)
HDFS测试如下:
测试结果:coast time : 13599ms
FastDFS下测试:
测试结果:coast time : 1949ms
318个图片上传测试(每个文件大小1mb左右)
HDFS下测试:
测试结果:coast time : 63460ms
FastDFS下测试:
测试结果:coast time : 9585ms
3个视频文件测试(每个大小700多mb)
HDFS下测试:
测试结果:coast time : 62092ms
FastDFS下测试:
测试结果:coast time : 58137ms
3个较大视频文件测试(每个2gb+,总共7.2gb)
HDFS下测试:
测试结果:coast time : 171743ms
FastDFS下测试:
测试结果:coast time : 131861ms
2、文件下载测试
25个小文件的下载测试
HDFS 下载25个小文件 coast time : 13008ms
FastDFS下载25个小文件 coast time : 1218ms
318个图片的下载测试
HDFS 下载318个图片 coast time : 24942ms
FastDFS 下载318个图片 coast time : 7051ms
3个视频文件下载测试(单个700mb)
HDFS下载视频coast time : 69266ms
FastDFS 下载视频 coast time : 36144ms
3个较大视频下载测试(单个2gb)
HDFS下测试:
测试结果:coast time : 192315ms
FastDFS下测试:
测试结果:coast time : 138215ms
3、文件删除测试
25个小文件删除测试
HDFS 删除25个小文件 coast time : 10517ms
FastDFS删除25个小文件 coast time : 62ms
318个图片删除测试
HDFS 删除318个图片 coast time : 12828ms
FastDFS 删除318个图片 coast time : 811ms
3个视频删除测试(单个700mb)
HDFS删除视频coast time : 10286ms
FastDFS 删除视频 coast time : 150ms
3个较大视频删除测试(单个2gb)
HDFS下测试:
测试结果:coast time : 10594ms
FastDFS下测试:
测试结果:coast time : 255ms
总结
测试结果总览
测试项 |
HDFS |
FastDFS |
25个小文件上传 |
13599ms |
1949ms |
318个图片上传 |
63460ms |
9585ms |
3个700m视频上传 |
62092ms |
58137ms |
3个2g视频上传 |
171743ms |
131861ms |
25个小文件下载 |
13008ms |
1218ms |
318个图片下载 |
24942ms |
7051ms |
3个700m视频下载 |
69266ms |
36144ms |
3个2g视频下载 |
192315ms |
138215ms |
25个小文件删除 |
10517ms |
62ms |
318个图片删除 |
12828ms |
811ms |
3个700m视频删除 |
10286ms |
150ms |
3个2g视频删除 |
10594ms |
255ms |
单从测试结果来看,无论是在上传、下载还是删除上,HDFS对比FastDFS差距还是比较大的。在小文件的上传上,HDFS的318个小图片总计200多mb的上传耗时和3个700m视频总计2.2g的上传耗时居然是差不多的。
对测试结果的一些猜想和认识
1、 FastDFS客户端底层连接服务端使用的是Socket,本身速度就要快很多。
2、 HDFS在做删除测试时,明显较慢的地方是在创建到服务端的连接上,实际删除文件的速度很快。由于每次测试都需要先创建到服务端的连接,HDFS在这块消耗较大,在实际场景下,差距应该没有这么大。
3、 两者的适用场景确有不同,FastDFS更适合小文件的高效存取,而HDFS更适合超大文件上传后使用Mapreduce去做大数据处理。
4、 HDFS的部分从节点没有开启,不知道会不会影响文件的上传、下载效率。
5、 个人的机器配置有限,硬盘空间也有限,不知道在更大级别的文件上传下载效率上,HDFS对比FastDFS会有如何的结果。