网盘是由rest api来实现的,很多不熟悉,所以这里借用Java api来伪实现以下,只要换成api就可以了。REST可参考:
hadoop、openstack web编程必读:什么是REST----RESTful架构起源及讲解
1.网盘如何与Javaweb相结合
作为云技术爱好者,我们都知道网盘。当然如果非云技术爱好者,也都知道网盘:百度网盘,360网盘等。
有一点不同的是,我们在学习云技术,对于非技术人员,感觉网盘是如何神秘。作为从事云技术,不知道网盘是怎么做,有点说不去。
这里来给大家解析,网盘是怎么做成的。其实或许我们大家都接触过,等解析完毕,或许你会忽然大悟。
这里咱们是以hadoop为例。
我们都知道hadoop的文件系统hdfs。我们的网盘则是以它基础。
我们知道网盘是什么?下面以百度网盘为例,我们看到了下图。
是的,我们登录之后,就可以上传文件,下载文件,删除文件等操作。
我们该怎么模拟这个百度网盘:这里先从思想上来打通大家的七经八脉。
首先使用网盘,我们需要注册帐号,在我们的帐号下面会看到自己的网盘。
过程是这样的,那么下面我们从hadoop的角度来讲解该如何实现类似百度网盘。
一、思路
1.首先搭建hadoop环境(不知道怎么搭建环境的,可以查看http://www.aboutyun.com/thread-6487-1-1.htmlHadoop伪分布安装过程:Hadoop单机环境搭建指南(ubuntu))
2.在另外一台pc机上搭建开发环境。(也可以是发布的程序)
二、实现
上面为了节省成本,可以搭建伪分布环境,如果有真实的环境,这样可以理解更深刻。对于网盘也越真实。
我们该如何实现网盘,这里其实我们已经有原材料了。那就是hadoop的HDFS。HDFS其实就是个文件系统。那么网盘的,“网”没有体现。那么剩下的事情就是我们的工作了。
1、创建web程序
我们知道网盘都是web的方式,也就是我们都可以通过浏览器来访问网盘。那么我们可以通过winform来实现吗?完全可以。那么百度winform是什么那?如下图就是我们的百度云管家。那么这里需要什么功底,就看你Java内功深不深厚。我们这里就不详细讲解,该如何实现web或则winform该如何实现了。
2.远程操作HDFS
HDFS编程我们都看了很多遍了。同时我总结了Hadoop编程有两种方式http://www.aboutyun.com/thread-6950-1-1.html
这里不再详细叙述这两种开发方式了。
---------------------------------------------------------------------------------------------------------------------------------------------------
网盘原理
网盘为什么称之为网盘,我们的磁盘为什么就不行。这是指一般情况,是因为我们的磁盘只能给自己的电脑使用。别人是无法访问的,而对其编程也是十分困难的。
那么现在hadoop产生了,我们能否远程操作HDFS文件,答案是可以的。既然可以,那就好办了。我在家可以使用,在公司可以使用,在任何能上网的地方都可以使用了。这就是为我们让HDFS成为网盘打下了基础。
核心代码指导:
1)hadoop包 org.apache.hadoop.fs.FileSystem
我们该如何远程操作HDFS,这里HDAOOP给我们提供了一个包 org.apache.hadoop.fs.FileSystem;这个包给我们远程操作hadoop提供了操作类。
而也就是通过这个包,实现了网盘,所以我们还是记住这个万能的包吧。
2)创建远程连接
String PATH = "hdfs://192.168.159.10:9000/";
上面的HDFS:ip,这个ip地址也就是你安装hadoop电脑的ip地址。也正是因为这个地址,我们才能操作HDFS
3)对HDFS文件的各种操作
上面已经打通了,下面就是我们的具体实践了,
比如我们该如何创建文件夹:比如我们创建hadoop文件夹
1.创建hadoop文件夹
第一步:首先我们实例化:
(这里需要注意的是我们已经倒入包了)
- FileSystem filesystem = getFileSystem();
- private static FileSystem getFileSystem() throws IOException,
- URISyntaxException {
- return FileSystem.get(new URI(PATH), new Configuration());
- }
复制代码
第二步:使用mkdirs函数创建文件夹
// 创建目录- createFile(filesystem,"/hadoop");
-
- private static void createFile(FileSystem filesystem,String path) throws IOException {
- filesystem.mkdirs(new Path(path));
- }
复制代码
2.上传文件通过IOUtils.copyBytes实现
以下实例化步骤都省略:- put(filesystem);
- private static void put(FileSystem filesystem) throws IOException,
- FileNotFoundException {
- final FSDataOutputStream out = filesystem.create(new Path(File));
- final FileInputStream in = new FileInputStream("E:/about云/upload.txt");
- IOUtils.copyBytes(in, out, 2048, true);
- }
复制代码
3.t通过删除文件FileSystem的delete函数实现- removeFile(filesystem,"/hadoop");
- private static void removeFile(FileSystem filesystem) throws IOException {
- filesystem.delete(new Path(path), true);
- }
复制代码
当然上面还有些操作,大家可以查看FileSystem操作类。这里就不在一一举例了。
三、总结
上面通过代码我们讲了网盘是如何实现的,实际的网盘还需要考虑很多的问题。如果个人比较喜欢,可以模拟一下。
来自群组: Hadoop技术组 |