使用Hadoop打造私有云盘之API操作
项目介绍:使用hadoop实现云盘的增删读获取列表功能,hadoop不支持数据修改,特性是一次写入多次读取。主流的网盘也不支持该功能。今天我们用hdfs的FileSystem实现这些操作。
1、上传功能
指定文件的本地路径和hdfs存储路径,通过hadoop提供的IOUtils工具类将流写入到hdfs中。
2、下载功能
指定要访问的hdfs中的文件路径,使用FileSystem的open函数获取Hadoop的输入流,使用Hadoop提供的IOUtils工具类将输入流写入到本地磁盘或者控制太。
3、删除功能
指定要访问的hdfs中的文件路径,使用FileSystem的delete函数删除文件或文件夹,返回一个boolean值,判断是否删除成功。
4、查看文件列表功能
指定要访问的hdfs中的路径,使用FileSystem的listStatus函数获取列表状态数组,遍历显示列表内容。
package hdfs;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;public class FileSystemAceess {
/**
* @param args
* @throws Exception
* @throws URISyntaxException
*/
public static void main(String[] args) throws URISyntaxException, Exception {
// 传入URI访问地址获取FileSystem对象
FileSystem fs = getFileSystem(new URI(args[0]));//上传函数
uploadFile(args, fs);
//下载函数
ReadFile(args, fs);
//删除函数
delete(args, fs);
//获取列表函数
listStatus(args, fs);
}private static void listStatus(String[] args, FileSystem fs)
throws IOException {
// 获取列表信息
String pth = args[2].substring(0, 1);
FileStatus[] listStatus = fs.listStatus(new Path(pth));
System.out.println("类型\t权限\t\t副本数\t块大小\t\t\t文件大小\t\t文件路径");
// 遍历列表信息
for (FileStatus fileStatus : listStatus) {
String fileDir = fileStatus.isDir() ? "文件夹" : "文件";
String permission = fileStatus.getPermission().toString();
short replication = fileStatus.getReplication();
long len = fileStatus.getLen();
long blockSize = fileStatus.getBlockSize();
String path = fileStatus.getPath().toString();
System.out.println(fileDir + "\t" + permission + "\t" + replication
+ "\t" + (blockSize/1024==0?"文件夹":blockSize/1024/1024+"Mb" )+ "\t\t"+(len/1024==0?"文件夹":len+"Byte")+"\t"+path);}
}/**
* FileSystem.delete 删除文件或文件夹
*
* @param args
* 外部传入的参数
* @param fs
* FileSystem文件系统
* @throws IOException
*/
private static void delete(String[] args, FileSystem fs) throws IOException {
//上传前判断是否存在,如果存在删除
if(fs.exists(new Path(args[2]))){
boolean result = fs.delete(new Path(args[2]), true);
if(result){
System.out.println("删除成功!!");
}else{
System.out.println("删除失败!");
}
}
/**
* 第一个参数,删除文件的路径,例如,/a.txt 第二个参数,删除后自动关闭流
*/
boolean result = fs.delete(new Path(args[2]), true);
if (result) {
System.out.println("删除成功!!!");
} else {System.out.println("删除失败!!!");
}
}/**
* FileSystem.open 读取、下载
*
* @param args
* 外部传入的参数
* @param fs
* FileSystem对象
* @throws IOException
*/
private static void ReadFile(String[] args, FileSystem fs)
throws IOException {
// 获取hdfs文件系统的输入流
FSDataInputStream in = fs.open(new Path(args[2]));
// 通过hadoop提供的ioutils工具包在控制台输出内容
IOUtils.copyBytes(in, System.out, 1024, true);
}/**
* FileSystem.create 上传文件
*
* @param args
* @param fs
* FileSystem对象
* @throws Exception
*
*/
@SuppressWarnings("unused")
private static void uploadFile(String[] args, FileSystem fs)
throws Exception {
// 创建文件输入流,指定要上传的文件地址
FileInputStream in = new FileInputStream(args[1]);
// 使用create方法上传,设置上传的路径和文件名
FSDataOutputStream out = fs.create(new Path(args[2]));
// 使用hadoop提供的IOUtils上传
/**
* 第一个参数,输入流也就是指定需要上传的文件路径 第二个参数,输出流是hadoop的存储位置 第三个参数,缓冲区大小 第四个参数,是否上传
*/
IOUtils.copyBytes(in, out, 1024, true);
}// 获取FileSystem对象
static FileSystem getFileSystem(URI uri) throws Exception {
return FileSystem.get(uri, new Configuration());
}}
hadoop插件设置


以上参数根据实际情况设置!
效果图:
读取文件

获取列表信息

使用Hadoop打造私有云盘之API操作的更多相关文章
- 基于Hadoop开发网络云盘系统架构设计方案
基于Hadoop开发网络云盘系统架构设计方案第一稿 引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己 ...
- nextcloud私有云盘的部署
nextcloud在centos系统下搭建自己的私有云盘 搭建一套自己的私有云盘,让数据存储更加方便.可靠.自己搭建的云存储,首先没有什么容量.下载速度的限制,而且本地访问速度很快.一开始以为Next ...
- 基于Hadoop开发网络云盘系统客户端界面设计初稿
基于Hadoop开发网络云盘系统客户端界面设计初稿 前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹 ...
- linux下使用URLOS搭建nextcloud私有云盘系统
Nextcloud是一个免费专业的私有云存储网盘开源项目,可以让你简单快速地在个人/公司电脑.服务器甚至是树莓派等设备上架设一套属于自己或团队专属的云同步网盘,从而实现跨平台跨设备文件同步.共享.版本 ...
- 政务私有云盘系统建设的工具 – Mobox私有云盘
序言 这几年,智慧政务已经成为了政府行业IT建设发展的重要进程.传统办公方式信息传递速度慢.共享程度低.查询利用难,早已成为政府机关获取和利用信息的严重制约因素.建立文档分享共用机制,加强数据整合,避 ...
- 基于Hadoop开发网络云盘系统架构设计方案第一稿
引言 云计算技术的发展,各种网络云盘技术如雨后春笋,层出不穷,百度.新浪.网易都推出了自己的云盘系统,本文基于开源框架Hadoop设计实现了一套自己的网络云盘系统,方案为初步设计方案,不断完善中. 一 ...
- 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”
原创作者:HackLiu 0×00 前言 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...
- Nextcloud私有云盘在Centos7下的部署笔记
搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典.而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储.初一看觉得“口气”不小,刚推出来就重新“定义”了Clo ...
- 使用树莓派制作一套“NAS+私有云盘+下载机”
原创作者:HackLiu 0×00 前言 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司 ...
随机推荐
- codeforce #339(div2)C Peter and Snow Blower
Peter and Snow Blower 题意:有n(3 <= n <= 100 000)个点的一个多边形,这个多边形绕一个顶点转动,问扫过的面积为多少? 思路:开始就认为是一个凸包的问 ...
- PL/SQL — 函数
函数通常用于返回特定的数据.其实质是一个有名字的PL/SQL块,作为一个schema对象存储于数据库,可以被反复执行.函数通常被作为一个表达式来调用或存储过程的一个参数,具有返回值. 一.建立函数 ...
- linq query, using int.parse to convert varchar to int while orderby
var t = from x in context.NewsLetterItem.ToList() //add .ToList at this place where x.APPId == appid ...
- how to run demo city bars using sencha architect
1. create a project using city bars template in sencha architect 2. save your project name as CityBa ...
- 我的PHP之旅--PHP的判断、循环语句
if语句 <?php if ($a = "some string") { // 就算括号中不是bool值,php也会自动转换为bool值 上一节写过各个类型转换bool值 / ...
- 通过I2C总线向EEPROM中写入数据,记录开机次数
没买板子之前,用protues画过电路图,实现了通过i2c总线向EEPROM中写入和读出数据. 今天,在自己买的板子上面写关于i2c总线的程序,有个地方忘了延时,调程序的时候很蛋疼.下面说说我对I2c ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- Ubuntu使用apt-get安装本地deb包
我们都喜欢使用apt-get,因为它实在是让我们大大的省心.但是,有时候我们会为网速慢,安装源不好而烦恼,所以我们可能会将一些常用软件包的deb文件保存在本地以备不时之需.当然了使用dpkg也可以直接 ...
- HTTP Keep-Alive详解
HTTP是一个请求<->响应模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息.在老的HTTP版本中,每个请求都将被创建一个新的客户端->服务器的连接,在这个连接 ...
- maven 依赖排除
在项目中遇到一个问题,项目使用spring 3.x,引用了某些包,这些包又依赖了spring2.x,造成项目无法启动.这种情况就需要用到maven的依赖排除,配置如下: 使用以下代码排除依赖xxxx引 ...