本次实验的目的是验证Hadoop分布式文件系统的存取性能与传统FTP或HTTP协议下文件的存取耗时相比,哪中协议的耗时会更短?从而验证在实际应用中哪种协议更适合做为文件存储的实现方案。
1.实验环境准备:
a) 搭建Hadoop集群;
主机IP |
节点类型 |
存储空间 |
描述 |
10.7.111.220 |
namenode |
200G |
主节点,维护命名空间等信息 |
10.7.111.221 |
datanode |
200G |
数据节点1,存放分布式数据文件 |
10.7.111.222 |
datanode |
200G |
数据节点2,存放分布式数据文件 |
10.7.111.223 |
datanode |
200G |
数据节点3,存放分布式数据文件 |
10.7.111.224 |
datanode |
200G |
数据节点4,存放分布式数据文件 |
1个主节点,4个数据节点,构成整个hadoop集群。
b) 准备一个1.5MB大小的文件;
使用一个word文档作为传输文件的样本,文件大小为1.5MB。
c) 搭建Hadoop客户端开发环境;
在hadoop1.1.2源码版上编译eclipse插件,并复制到eclipse的plugins目录中,eclipse IDE的版本为3.8M1。配置Hadoop DFS的location参数,指向10.7.111.220主节点服务器,并可在eclipse中浏览分布式文件系统目录。
d) 将10.7.111.220服务器上的vsftpd服务打开;
e) 在10.7.111.220服务器上安装部署apache server,并打开HTTP服务;
1.实施步骤:
a) 编写测试代码,将本地样本文件复制到Hadoop分布式文件系统中;
b) 编写测试代码,从Hadoop分布式文件系统中将之前的样本文件取回到本地;
c) 编写测试代码,将本地样本文件上传到远程的FTP服务器上(将10.7.111.220作为FTP服务器);
d) 编写测试代码,将远程FTP服务器上的样本文件下载到本地(将10.7.111.220作为HTTP服务器);
e) 编写测试代码,将本地样本文件通过httpclient类库上传到HTTP服务器上;
f) 编写测试代码,将HTTP服务器上的文件下载到本地;
2.实验结果:
操作项目 |
总耗时(ms) |
平均耗时(ms) |
Hadoop DFS 复制文件(执行100次) |
18223 |
182 |
Hadoop DFS 取回文件(执行100次) |
18459 |
184 |
FTP上传文件(执行100次) |
24350 |
243 |
FTP下载文件(执行100次) |
19554 |
195 |
HTTP PUT文件(执行20次) |
131700 |
6585 |
HTTP GET文件(执行20次) |
156172 |
7808 |
3.结论:
通过上述表格可以明显的得出结论:在实际的应用程序开发中不推荐使用HTTP协议进行远程文件的存取(由于耗时太长,所以只进行了20次的执行),FTP和Hadoop DFS协议都表现出很好的远程文件存取性能,不过做为结构化或非结构化数据的存储方案,我更推荐使用Hadoop DFS,因为Hadoop有更强的水平扩展能力,能够保障平滑的存储空间升级。因此Hadoop DFS完全可以替换FTP成为各种应用程序之间的文件共享实现方案。
附件为测试的实现代码:点击下载