基于Hadoop的企业级网盘系统的研究与开发

演示网站:http://haodisk.toocruel.net

摘要

企业网盘是基于云计算理念推出的企业数据网络存储和管理解决方案,利用互联网后台数据中心的海量计算和存储能力为企业提供数据汇总分发、存储备份和管理等服务。 企业网盘是一个企事业单位私有的专用网盘系统,具有强大和简单易用的文件管理、协同办公、部门或虚拟团队级文件共享等丰富功能。 与免费的个人网盘相比,具有更强的团队协同功能,在组织架构、共享权限上能适应企业的需求。在多人共享、协作日常办公文档时能有效的提高工作效率。

基于Hadoop企业级网盘系统的研究与开发主要就是开发这样一个系统,主要包括系统前台、系统后台、Android手机客户端三个部分。本文主要描述了系统后台的开发流程。通过该流程将对采用JavaEE技术和云存储技术对系统进行设计以及具体实现。系统后台的开发是采用Java语言,使用Spring、Hibernate、Struts2等JavaEE开发框架,使用Hadoop的分布式文件系统存储文件。数据库采用关系型数据库Mysql,同时对采用Hadoop的非关系型数据库HBase对该网盘系统进行数据库设计也进行了研究。

关键词:企业网盘;文件共享;云存储;非关系型数据库

Abstract

Enterprise online storage system is introduced the concept of cloud-based enterprise network storage and data management solutions,using massive computing and storage capacity of the Internet background data centers to provide enterprises with distributed data collection, storage, backup and management services. Enterprise-class online storage system is a private network of private enterprises, with a strong and easy to use document management, collaborative office, department or team level virtual file-sharing and other rich features. Compared with the free personal network disk, a stronger team collaboration capabilities, in the organizational structure, the share permissions can adapt to the needs of enterprises. In multiplayer sharing, can effectively improve work efficiency when collaborating everyday office documents.
Research and development of enterprise-class online storage system based on Hadoop is mainly to develop such a system, including system foreground, the system background, Android mobile client in three parts. This paper describes the background of the system development process. The process will be adopted by JavaEE technologies and cloud storage technology for system design and implementation. The Development of system background using the Java language, JavaEE development framework such as Spring, Hibernate, Struts2 and so on, and using Hadoop distributed file system to store files. The systrem using relational databases Mysql, while design using Hadoop HBase non-relational database as system database were also studied.
Key words: Enterprise-class online storage; Cloud storage; File-sharing

第1章 引言

1.1课题来源及意义

随着信息技术地不断发展和高校办学规模越来越大,高校的行政办公和教学活动中时刻进行着海量数据资源的产生和流通,信息共享交流更加频繁,如各类文档文件、教学课件、多媒体素材等都需要频繁使用。移动存储设备由于使用不便和共享困难等一般适用于存储个人数据;E-Mail使用较方便,但不适用于存储传输较大的文件;网上邻居等局域网共享方式受到校园网结构的制约无法很好的满足用户需求;FTP功能相对强大,但是服务界面简陋,有些用户使用起来有一定困难。因此,如何在安全、便捷、可接受代价的前提下向用户提供大容量、高可靠性的网络存储业务,成为了信息化建设的一大课题。于是网络硬盘应运而生,摒弃了以上不足。但随着存储技术的不断发展,传统的网盘技术已经显得力不从心,存在传输速度慢、容灾备份及恢复能力低、安全性差、营运成本高等诸多瓶颈。而近年流行的云存储技术推动了网盘行业的浪潮,如百度云、腾讯微云等。云计算架构的分布式存储技术能充分利用其技术,结合超大规模、高可扩展性、廉价性、高可靠性等特点来满足当前PB级的海量数据存储管理要求。云存储是构建在高速分布式存储网络上的数据中心,它将网络中大量不同类型的存储设备通过应用软件集合起来协同工作,形成一个安全的数据存储和访问系统,适用于各大中小型企业与个人用户的数据资料存储、备份、归档等一系列需求。尽管业内已经提供了大量云存储服务相关的产品,由于目前的云存储服务大多是商业化产品,对企业网和校园网的信息化建设来说,在数据安全和价格上都是问题。所以,采用Hadoop的分布式存储技术开发这样一个能满足海量数据存储、高效可靠、安全稳定、低成本等网盘系统有着十分积极的意义。

1.2技术发展概况

随着移动互联网大潮的到来,随时随地办公、学习、娱乐等成了可能。人们无时无刻在产生文档、视频、照片等文件,同时又迫切的需要随时随地去调阅、编辑、保存这些信息数据,此时,帮助用户方便、快捷的储存、调用这些文件的网盘应运而生。
网盘最初是解决发送大文件问题,以及满足网民对于一些好的资料的收藏而推出。网盘需要投入相应的硬件设施,同样需要有一定的带宽,这样也就增加了相应的成本。目前国内的网盘主要分为2种类型,一种是为娱乐资源类型,一种是专注于网络存储的应用型。从互联网的发展角度来说,很多的网盘都是打着免费的旗号在运营着,但是随着用户数的增加,以及原本网速这道坎,导致很多运营商的发展有点难堪。
近年来,由于新兴起的云计算与云储存技术研究浪潮,网盘行业经历了一次革命。互联网行业巨头百度、金山、腾讯、360等都纷纷涉足网盘行业。甚至打击起暴力营销战,突然都为网盘“掐”起来。先是金山快盘推出100G容量;360随后跟进,宣称只要完成几个简单任务,就可获得360G的容量;而后百度网盘继续跟进,花1块钱就可以获得1T永久容量的网盘;向来凶猛强悍的360,干脆送给用户1T的容量,还是永久免费…连传统的IT企业也不甘落后,华为网盘推出惊人的“无限空间”终结了这场无底线的混战。
各大互联网巨头都在极力打造一个属于自己的网盘整合平台,通过平台提供各种用户常用的服务,例如下载、分享、支付、社交等来建立起庞大的帝国。在国外无论是Google、苹果还是微软,都将网盘纳入自己的账号生态系统;在国内,迅雷依托下载、金山依托办公、腾讯依托QQ和微信、360依托安全软件和安全浏览器,都在不断扩展自己的领域,形成属于自己的平台,掌握了流量的入口。这些巨头公司都想搭生态、做循环、留住用户、圈住开发者,那么网盘就是其中很重要的一个基础建设项目,自然成兵家必争之地。
网盘的发展在后期,随着国内网速的提升,以及对于网盘的便利性在网民中的普及,再进一步提升速度和安全,打造品牌个性云服务,应该会有很好的发展。

第2章 可行性分析

2.1 技术可行性

基于Hadoop的企业级网盘系统后台的开发的技术架构是:JAVA +Struts2+Hibernate+Spring+Jsp+JQuery/Ajax+Hadoop,采用MVC分层的开发模式。将项目分为一下几层:
表现层(V): Jsp+JQuery/Ajax
控制层(C): Struts2
业务层(C): 具体模块的业务方法
数据访问层(M): Hibernate+Hadoop ,Hibernate处理的是网盘系统产生的用户数据,Hadoop用来存储用户真实的文件。

2.1.1 JavaEE技术简介

JavaEE(Java Platform Enterprise Edition)是一个开发分布式企业级应用的规范和标准。JavaEE应用程序是由组件构成的。J2EE组件是具有独立功能的单元,他们通过相关的类和文件组装成JavaEE应用程序,并与其他组件交互。JavaEE包括的技术有:Web Service、Struts、Hibernate、Spring、JSP、Servlet、JSF、EJB、JavaBean、JDBC、JNDI、XML、JavaSE。
框架即Framework,我们可以把框架理解为某种应用的半成品,就是一组组件,供用户选用,完成用户自己的系统。简单地说就是使用别人准备好的组件,来实施自己的项目。框架技术是在JavaEE的基础上形成的,而应用程序是在框架的基础上创建的。
应用程序的三层结构是表示层,由用户界面和用户生成界面的代码组成;中间层,包含系统的业务和功能代码;数据层,负责完成存取数据库的数据和对数据进行封装。
三层体系结构的优点:一个组件的更改不会影响其他两个组件。例如:如果用户需要更换数据库,那么只有数据层组件需要修改代码。同样,如果更改了用户界面设计,那么只有表示层组件需要修改。由于表示层和数据层相互独立,因而可以方便地扩充表示层,使系统具有良好的可扩展性。
JavaEE技术体系结构可分为:表示层技术、中间层技术、数据层技术。JavaEE还涉及到系统集成的一些技术。

2.1.2 B/S结构

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。

2.1.3 Struts2框架技术简介

Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。Struts2 是MVC框架组件之一,主要充当MVC中的Controllor(控制器)角色。它做的工作就是对于用户的每一个URL资源请求都会引导到对应的Java程序(Servlet)处理,这就是控制器。接着,这个Java程序就会调用业务层和数据访问层的代码。在本网盘系统中就是这样,Struts中的Action接受用户请求,调用业务层的方法处理,业务层一般会调用数据访问层,如果是上传文件或下载文件的话业务层会调用Hadoop文件存储层,最后程序处理结果是以Json返回的,由表示层接收处理。

2.1.4 Hibernate框架技术简介

Hibernate是非常优秀、成熟的 ORM 框架。提供强大的对象和关系数据库映射以及查询功能。Hibernate是面向对象的程序设计语言和关系型数据库之间的桥梁,允许开发者采用面向对象的方式来操作关系数据库。Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。

2.1.5 Spring框架技术简介

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。pring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。Spring常用来整合项目,管理整个系统中的Java对象,它有一个容器专门放这些对象。由它管理项目对象(MVC各层的实例对象)后,所有层统一都从这个容器中取对象使用。Spring提供了很方便的依赖注入方式,或是基于注解或是手工配置XML都能取出Spring管理的对象。

2.1.6 Hadoop云计算技术简介

Hadoop 是一个分布式系统基础架构,由 Apache 基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。 Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称 HDFS。 HDFS 有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS 放宽了POSIX 的要求这样可以流的形式访问文件系统中的数据。Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如C++。

2.1.7 Json轻量级数据交换格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。简单地说[2],JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

2.1.8 HBase非关系数据库技术简介

HBase是一个分布式的、非关系型开源数据库。 HBase有如下几个特点: HBase是No-SQL的一个典型实现,提升了系统的可扩展性; HBase支持线性水平扩展,极大提升了系统的可伸 缩性和运算能力; HBase和Google的BigTable有异曲同工之妙,底层也是建立在HDFS(Hadoop分布式文件系统)之上,可以搭建 在廉价的PC机集群上。

NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显 得力不从心,传统的电信行业动辍就千万甚至上亿的数据,甚至有客户提出需要存储相关的日志数据50年以上,暴露了很多难以克服的问题,而非关系型的数据库 则由于其本身的特点得到了非常迅速的发展。
关系型数据库难以克服的问题:

  • 不能很好处理对数据库高并发读写的需求;
  • 不能很好处理对海量数据的高效率存储和访问的需求;
  • 不能很好处理对数据库的高可扩展性和高可用性的需求。

SQL语言和关系型数据库(MySQL、PostgreSQL、Oracle等)是通用的数据解决方案,占有绝大多数的市场。但是就像上面提到的,它有很多难以解决的问题。不过在最近兴起的NoSQL运动中,涌现出一批具备高可用性、支持线性扩展、支持Map/Reduce操作等特性的数据产品比如MongoDB、CouchDB、Hbase等,它们具有如下特性:

  • 频繁的写入操作、相对较少的读取统计信息的操作;
  • 海量数据(如数据仓库中需要分析的数据)适合存储在一个结构松散、分布式的文件存储系统中;
  • 存储二进制文件(如mp3或者pdf文档)并且能够直接为用户的浏览器提供下载功能。

使用这些非关系数据库并不是要取代原有的关系数据库,而是为不同的应用场景提供更多的选择。也就是说,在一些特定的情况下如果是关系型的数据库解决不了的问题,那么就可以考虑使用nosql,而不是说完全将应用移植到nosql上,毕竟适合才是最好的。

2.2 经济可行性

基于Hadoop的企业级网盘使用的技术或框架(SSH框架、Mysql数据库、Hadoop)都是免费开源的,不涉及版权和价格问题。Hadoop集群对集群的机器要求也不高,普通机器集群就可以发挥Hadoop处理海量数据的优势。该系统采用的是Java开发的,因此可跨平台运行,window和Linux均可,但Hadoop集群是Linux机器集群是必须的。因此,该系统在经济上是完全可行的。

2.3 操作可行性

本系统对于服务器端和客户端所要求的软硬件的最低配置在大多数的用户计算机都能达到,现有的开发工具(MyEclipse、Mysql)完全能够实现,而且本系统对管理员和网盘用户没有任何的特殊要求,实际操作基本上以鼠标操作并辅以少量的键盘操作,操作方式很方便。因此本系统具有良好的易用性。

第3章 需求分析

3.1 系统需求

3.1.1 功能需求

3.1.2 性能需求

第4章 总体设计

4.1 系统简介

4.1.1 系统架构

4.1.2 系统功能框架

4.1.3 文件管理

4.1.4 权限管理

4.1.5 用户管理

4.1.6 部门管理

4.1.7 群组管理

4.1.8 系统管理

4.2 数据库设计

4.2.1 数据库

4.2.2 物理模型

4.2.3 数据库结构

4.3 Hbase数据库设计

4.3.1 使用Hbase的优势

4.3.2 Hbase存储结构

4.3.3 Hbase与关系型数据库的对比

4.3.4 Hbase中表结构设计

第5章 详细设计和实现

5.1 系统的开发环境

5.2 类设计

5.3 系统模块实现

5.3.1 文件管理模块实现

5.3.2 权限管理模块实现

5.3.3 文件共享模块实现

第6章 系统测试

6.1 软件测试定义

6.2 软件测试目的

6.3 软件测试方法

6.4 功能模块测试

6.4.1 文件上传功能测试

6.4.2 文件下载功能测试

6.4.3 文件其他操作测试

6.4.4 文件共享功能测试

第7章 总结

参考文献

致谢

附录..............................................................................................................

附录A: 主要源程序...............................................................................

附录B: 软件使用说明书.......................................................................

(全文完)

(转载本站文章请注明作者和出处 基于Hadoop的企业级网盘系统的研究与开发