闫伟 陈满林 白云鹤 班海涛
摘 要:目前,大多数学生均使用U盘进行数据存储,但这种方式存在数据容易中毒、U盘容易丢失、无法在实验室和寝室间同步等弊端,为此,需要开发一个以校园局域网为依托,可供学生使用的校园网盘。利用该网盘,学生可不再使用U盘进行数据存储,在校期间所涉及的所有数字化文件均可存储其中,同时,还可实现教学区域与寝室的数据同步,既保证了数据存储的安全性,又极大地提高了数据的应用效率。此外,校园网盘采用Hadoop架构完成整个底层系统的搭建,属于“云计算”应用的技术范畴,能够充分利用学校目前已有的PC机资源,降低项目投入。
关键词:Hadoopp;HDFS;网盘;云计算
随着计算机在高校教学中的普及,各种文档、数据、程序等数字化文件成为了高校学生非常重要的学习资料和学习成果,大到毕业设计文档、毕业设计项目,小到课程PPT、作业,涵盖了学生学习生活的各个方面,如何安全、高效的存储这些文件就变得非常重要。因此,以“云计算”架构Hadoop为基础,依托校园网环境,设计并实现校园网盘,就成为了一种可行之道。
1 方案论证
1.1 技术可行性
由Hadoop HDFS为网盘提供高可用,分布式的存储架构支撑。HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。其具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
1.2 操作可行性
基于HDFS的分布式存储相关研究,主要包括HDFS集群中小文件处理,副本存放策略和机架感知以及NameNode备份恢复机制和拓展机制。HDFS集群中小文件处理包括三种方案,分别是Hadoop Archive,Sequence File和CombineFileInputormat。副本存放策略和机架感知能够让NameNode获取DataNode的网络拓扑图,然后根据DataNode之间的关系来确定副本存放的位置,保证数据可靠性的同时兼顾了数据传输速率。NameNode备份恢复机制通过定期对NameNode中元数据信息备份合并形成新的检查点checkpoint保证NameNode元数据的安全。如果NameNode出现宕机故障,可以节省NameNode重启时间,甚至恢复丢失的数据。HDFS的可拓展性体现在动态新增DataNode,能够满足大规模数据增长的需求。
2 系统架构设计与实现
2.1 系统结构设计
系统主要由四部分构成,分别是用户层,系统管理层,数据存储层和基础设施层,(1)用户层:用户通过WebApp服务器发送Ajax请求,服务器响应相应的json数据到浏览器,前端通过Angular JS框架调用响应功能REST接口返回数据,最后通过Angular JS双向数据绑定自动完成对页面数据进行渲染。(2)系统管理层:负责应用程序与底层数据操作连接,采用JFinal MVC框架对大量文件,用户操作封装为REST接口,提供前端Web页面的接口的数据返回,把用户需要的数据结果以json格式传回客户端。主要提供用户管理,目录管理,文件管理等服务。(3)存储数据层:Hadoop集群工作在这一层,由HDFS,Jetty构成,HDFS提供分布式存储支撑,一个NameNode存储文件的元数据,多个DataNode为文件提供存储实现, Jetty服务器提供外部REST接口调用功能。同时这一层也大量封装了对HDFS的操作。(4)基础设施层:即搭载Linux系统的硬件基础设施,主要包括磁盘,服务器等。
2.2 系统功能实现
本系统旨在一个在校大学校的一个存储服务。系统设计包括用户文件管理模块和管理员模块。用户文件管理模块:为在校师生提供用户登陆,文件上传,下载,删除,重命名,目录查看,创建等功能。管理员模块:主要提供用户管理(添加,删除),文件管理。
2.3 关键技术实现
系统在实现过程中,主要实现了对文件的上传,下载。浏览器通过调取REST接口,Controller通过调用相应的Service来返回相应的数据,Service调用DAO,而DAO的核心代码都是通过HDFS的相应API来完成的。
上传功能的核心代码:
public boolean upLoad(InputStream in, String hdfsPath){
Path p=new Path(hdfsPath);
try{
if(fs.exists(p)){
System.out.println(“文件已經存在”);
return false;
}
FileSystem fs = FileSystem.get(URI.create(hdfsPath),conf);
OutputStream out = fs.create(new Path(hdfsPath));
IOUtils.copyBytes(in, out, 4096,true);
in.close();
}catch(Exception e){
e.printStackTrace();
}
return true;
}
下载功能的核心代码:
public boolean downLoad(String hdfsPath,String localPath ){
Path path = new Path(hdfsPath);
try {
if(!fs.exists(path)){
System.out.println(“文件不存在”);
return false;
}
FileSystem hdfs = FileSystem.get(conf);
Path dstPath = new Path(localPath);
hdfs.copyToLocalFile(true,path, dstPath);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
3 结束语
HDFS作为一种分布式文件系统,有着高容错性的特点,设计用来部署在低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求可以实现流的形式访问文件系统中的数据。为了保证开发速度与系统的可维护性,选用JFinal来当做Web开发的MVC框架,同时这个框架的学习成本也比较低,轻量级,易拓展。
参考文献
[1]文艾,王磊. 高可用性的HDFS:Hadoop分布式文件系统深度实践[M].北京:清华大学出版社,2012,5.
[2]蔡斌,陈湘萍,董西成. Hadoop技术内幕[M].北京:机械工业出版社,2010:10-200.
[3]TomWhite.Hadoop:The Definitive Guide,3rd Edition[M].清華大学出版社,2015.
作者简介:闫伟(1992-),男,大二学生,专业:计算机科学与技术。
白云鹤(1992-),男,大二学生,专业:计算机科学与技术。
班海涛(1992-),男,大二学生,专业:计算机科学与技术。
*通讯作者:陈满林(1982-),男,讲师,主要研究方向:计算机应用与智能系统。