分享

利用hadoop模拟制作百度、360网盘指导

可以带着下面问题来阅读:
1.网盘如何实现上传文件?
2.网盘如何实现远程操作?
3.网盘如何实现删除文件?



思考:
hadoop如何与Javaweb相结合实现网盘



说明:

hdfs是可以制作网盘的,这里只是提供思路,并且需要研究 REST API WebHDFS,相关内容如下:
Hadoop web编程--REST API WebHDFS

hdfs的web开发,实现web对hdfs的操作


Hadoop web初级:通过html调用hadoop WebHDFS REST API
由于还没有研究到REST API WebHDFS,下面是以hdfs api伪实现一下。






作为云技术爱好者,我们都知道网盘。当然如果非云技术爱好者,也都知道网盘:百度网盘,360网盘等。

有一点不同的是,我们在学习云技术,对于非技术人员,感觉网盘是如何神秘。作为从事云技术,不知道网盘是怎么做,有点说不去。

这里来给大家解析,网盘是怎么做成的。其实或许我们大家都接触过,等解析完毕,或许你会忽然大悟。

这里咱们是以hadoop为例。

我们都知道hadoop的文件系统hdfs。我们的网盘则是以它基础。

我们知道网盘是什么?下面以百度网盘为例,我们看到了下图。


是的,我们登录之后,就可以上传文件,下载文件,删除文件等操作。
我们该怎么模拟这个百度网盘:这里先从思想上来打通大家的七经八脉。
首先使用网盘,我们需要注册帐号,在我们的帐号下面会看到自己的网盘。
过程是这样的,那么下面我们从hadoop的角度来讲解该如何实现类似百度网盘。

一、思路
1.首先搭建hadoop环境(不知道怎么搭建环境的,可以查看
Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)


Hadoop伪分布安装过程:Hadoop单机环境搭建指南(ubuntu))


2.在另外一台pc机上搭建开发环境。(也可以是发布的程序)
二、实现
上面为了节省成本,可以搭建伪分布环境,如果有真实的环境,这样可以理解更深刻。对于网盘也越真实。
我们该如何实现网盘,这里其实我们已经有原材料了。那就是hadoop的HDFS。HDFS其实就是个文件系统。那么网盘的,“网”没有体现。那么剩下的事情就是我们的工作了。
1、创建web程序
我们知道网盘都是web的方式,也就是我们都可以通过浏览器来访问网盘。那么我们可以通过winform来实现吗?完全可以。那么百度winform是什么那?如下图就是我们的百度云管家。那么这里需要什么功底,就看你Java内功深不深厚。我们这里就不详细讲解,该如何实现web或则winform该如何实现了。
2.png
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文件的各种操作
上面已经打通了,下面就是我们的具体实践了,

3.png

1.创建hadoop文件夹
比如我们创建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实现
4.png
以下实例化步骤都省略:
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.通过删除文件FileSystem的delete函数实现
removeFile(filesystem,"/hadoop");
private static void removeFile(FileSystem filesystem) throws IOException {
filesystem.delete(new Path(path), true);
}
当然上面还有些操作,大家可以查看FileSystem操作类。这里就不在一一举例了。
三、总结
上面通过代码我们讲了网盘是如何实现的,实际的网盘还需要考虑很多的问题。如果个人比较喜欢,可以模拟一下。





已有(3)人评论

跳转到指定楼层
sicipio 发表于 2014-6-12 08:27:49
希望能分享个例子
回复

使用道具 举报

star4g 发表于 2014-6-18 17:22:10
额。这不就是使用代码上传文件到hdfs咩!

点评

hyj
核心内容是这样的,但是网盘比这个复杂好多  发表于 2014-6-18 17:26
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条