因为毕业设计的原因,得从零开始学习hadoop。虽然接触Hadoop也有一段时间了,但是没有一个完整的时间段去学习,在公司实习的同时,只能利用零零碎碎的时间学习,今天完成了第一个版本的基于Hadoop的云存储系统,实际上就是平常用的网盘。该版本实现了网盘应有的基本功能,借此总结一下实现过程中的点点滴滴。仅以此纪录自己成长的足迹,感谢那个曾经为现在的自己奋斗的自己,同时,鼓励现在的自己为以后的自己而奋斗!本博文为本人学习的总结,请尊重劳动成果。欢迎转载,请保留博文出处:http://www.cnblogs.com/itred ;本人邮箱: it_red@sina.com

需   求

首先从需求说起,且谈毕业设计的需求。基于Hadoop的分布式数据存储系统,对于这个题目,真心感觉高大上。因为是学生生涯的最后一次作业,怎么也得用心做啊,这就是本人的心声。网盘,用户注册登录后可以将数据文件保存到云端的一种系统,可以在任何时候通过浏览器对文件进行管理和下载。说到这里,就谈到到了项目的B/S结构。浏览器和服务器端的交互,在现在这种J2EE充斥的时代背景下,B/S应该是很容易实现的一种方式,而且它的流行已经不需要我再多说了。同时这也更加说明了B/S的优点。

关于项目的结构和整体架构在稍后再谈,现在继续聚焦需求,在该系统中,用户可以进行用户的个人信息的管理,修改注册邮箱,密码等。同时,用户可以将某文件进行分享操作,可以将文件的链接分享给任何人,包括没有注册到系统的用户,一旦用户将链接复制到浏览器打开,浏览器就会自动进行下载。当用户认为某文件不再需要时可以选择删除。

实际上,可以概括三大方面:其一为对文件的管理,其包含对文件的删除,上传,下载,分享等;其二为对用户基本信息的管理,包含对新用户注册,邮箱,密码的修改,退出系统等;其三就是后台系统的实现,包含一般的站长管理工具,用户权限分配,屏蔽非法用户,查看用户及用户状态等信息。

设计与实现

上面已经谈到项目采用B/S结构,虽然对这个云存储系统而言,它的技术难点绝对不会是其采用B/S或C/S结构上,既然已经确定了B/S结构,但是需要采用何种框架来实现呢?然而更加棘手的问题也断然不会是考虑应用何种框架来实现这样一个分布式云存储系统,而是关于这个云端的环境!这个也必然用Hadoop来搭建,因此我选择在自己的电脑上的虚拟机中搭建一个伪分布式的环境以供开发项目所需,因为我需要将所有的数据文件全部上传到这台装有Hadoop的Linux上面,关于Hadoop伪分布式环境的搭建在我最开始接触Hadoop的几篇博文中就已经说很清楚了,不清楚的朋友可以看看我写的那几篇关于Hadoop的入门文章。此处就不再多说Hadoop了。

回到项目的整体上来,首先是根据需求构建出项目的数据关系,抽象出E-R模型,完成数据库表结构的设计,因为MySQL比较小,用起来也方便,所以采用MySQL做为为系统提供支持的数据库管理系统。

表结构设计如下:四张表(user表,file表,dir表,share表)

用户信息表

    

文件信息表

    

文件夹信息表

    

文件分享关系表

    

项目框架结构设计

说完数据库的设计,就该进行实际代码的实现的了,这里我就说说自己的项目。采用的框架是现在比较流行的SSH,同时这个系统中用户的上传可以直接利用struts2中提供的上传功能,所以很轻松,虽然在项目中用到Spring的地方很少,但是不能没有它。我的很多配置都利用Spring来管理的,而Hibernate则是直接为了响应用户对系统操作和对用户对Hadoop中的HDFS的操作,对数据进行持久化的,这样一来可以很方便的进行功能化,模块化的开发,应用这3大框架,确实可以方便不少,在这个分布式系统中,因为是分布式所以就得提供WebService,这里利用Xfire来实现web服务的开发。

贴出项目整体结构图:

        

因为是毕业设计,毕竟不是正规的企业级应用,我虽然在用户数据中采用了一定的加密算法,但是对于黑客级别的人物而言也基本上算不了什么了,对于文件分享中,链接url的生成也采用了一定的加密算法,但是这种加密是可以反解的。因为我后台必须要利用这样的参数进行后续操作。因此至少可以算是考虑到数据安全方面的东西了。

对于一些敏感操作,系统也会以邮件发送的形式发送到用户的注册邮箱中。这样也算是保障账户安全的一种吧。而这样的邮件发送是由开源apache提供实现的。

在项目中,加入log4j进行日志的记录,以便后续开发的数据收集,我相信现在基本上每一个商业级的系统都有自己的一套数据采集和日志监控系统。一方面是维护自己的系统安全,以方便维护,可以更加快捷的定位Bug,解决Bug;另一方面则是现在对用户的操作进行分析,就像百度什么之类“为您推荐”这类栏目,也是根据大数据分析而来。云计算的普及,就必将致使大数据的到来。

效果截图

                           启动Linux中的Hadoop,为应用的链接提供存储支持

#start-all.sh     ------〉启动Hadoop
#jps ------>查看启动状态

    

用户登录成功后的主页显示

用户基本信息管理

    

管理分享页面

管理员登录后的管理设置中心

屏蔽非法用户

由于篇幅有限也就不一一列举系统中效果图了,其实在自己的页面中,基本选择jQuery 提供的库,能选择用页面无刷新操作的基本都选择了无刷新操作,毕竟这样一来用户体验很好,而且还显得更加专业,能想到的优化措施基本都用上了。有时候就有一种感觉,写程序,就像精心培养一株树,总希望其完美的无话可说,可这毕竟是程序!

感谢奋斗中的自己!

   邮箱:it_red@sina.com
个人博客: http://itred.cnblogs.com
版权声明:本文版权归作者和博客园共有,欢迎转载,但请在文章显眼位置标明文章出处。未经本人书面同意,将其作为他用,本人保留追究责任的所有权利。

The Road To Hadoop(网盘系统的实现)的更多相关文章

  1. Layui框架+PHP打造个人简易版网盘系统

    网盘系统   大家应该都会注册过致命的一些网盘~如百度云.百科介绍:网盘,又称网络U盘.网络硬盘,是由互联网公司推出的在线存储服务,服务器机房为用户划分一定的磁盘空间,为用户免费或收费提供文件的存储. ...

  2. 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang

    网盘系统2.0   上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...

  3. 玩转Windows Azure存储服务——网盘

    存储服务是除了计算服务之外最重要的云服务之一.说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工 ...

  4. SSH教程从零打造在线网盘系统前言&目录

    本系列教程内容提要 本系列教程是一个学习教程,是关于Java工程师的SSH(Struts2+Spring+Hibernate)系列教程,本教程将会分为四个部分和大家一同打造一个在线网盘系统,由于教程是 ...

  5. vps搭建个人网盘不二之选—kodexplorer介绍,包含安装步骤

    之前给大家介绍过seafile.h5ai等网盘系统,今天给大家介绍下kodexplorer网盘系统.Kodexplorer,也叫芒果云.可道云.kodcloud,总之名字改了不少.但其本身作为一个网盘 ...

  6. 和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 网盘项目. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列. 今天给大家带 ...

  7. VPS教程:搭建个人网盘教程—kodexplorer

    kodexplorer网盘系统.Kodexplorer,也叫芒果云.可道云.kodcloud,总之名字改了不少.但其本身作为一个网盘文件系统,还是有很多可圈可点的地方. seafile.h5ai.ko ...

  8. 2020西湖论剑一道web题[网盘]

    题目: 一个网盘系统 图片: 解题手法 上传".htaccess"文件,改成可以执行lua脚本 内容为: SetHandler lua-script 编写lua脚本,而后进行get ...

  9. 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...

随机推荐

  1. JavaScript 对数据处理的5个API

    JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...

  2. js中参数不对应问题

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...

  3. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  4. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  5. 如何在ASP.Net创建各种3D图表

    我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...

  6. SDWebImage源码解读之SDWebImageCache(上)

    第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...

  7. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  8. Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  9. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  10. AngularJS 系列 学习笔记 目录篇

    目录: AngularJS 系列 01 - HelloWorld和数据绑定 AngularJS 系列 02 - 模块 (持续更新)