hdfs java api 权限_HDFS Java API 详解
Hadoop版本: ?Hadoop 2.6.0
連接HDFS
String?URL="hdfs://hadoop001:9000";
Configuration?conf?=?new?Configuration();
conf.set("fs.defaultFS",?URL);
FileSystem?fs?=?FileSystem.get(conf);
上傳文件到HDFS
//獲取本地文件的輸入流
FileInputStream?in=new?FileInputStream("d://aaa.mp3");
//獲取hdfs的輸出流,默認是覆蓋已存在的同名文件
//上傳到hdfs根目錄/
FSDataOutputStream?output?=?fs.create(new?Path("/bbb.mp3"));
//通過commons中的工具類copy文件到hdfs
IOUtils.copy(in,?output);
簡單方法
/*
*?copyFromLocalFile(Path?src,?Path?dst)
*?該方法對上面的過程進行了封裝,使操作更加簡單。
*/
fs.copyFromLocalFile(new?Path("d://abc.mp3"),?new?Path("/bcd.mp3"));
讀取HDFS文件
Path?inHdfs=new?Path("/bbb.mp3");
if(fs.exists(inHdfs)){
//獲取hdfs的輸入流
FSDataInputStream?in?=?fs.open(inHdfs);
//獲取本地文件的輸出流
FileOutputStream?out=new?FileOutputStream("d://aaa.mp3");
//寫文件到本地磁盤
//或使用IOUtils.copy(in,?output);
byte[]?buf=new?byte[1024];
int?next=0;
while((next=in.read(buf))!=-1){
out.write(buf,?0,?next);
}
}
簡單方法
//copyToLocalFile(Path?src,?Path?dst)
fs.copyToLocalFile(inHdfs,?new?Path("c://aaa.mp3"));
注意:如果要從hdfs復制文件到windows系統,需要設置useRawLocalFileSystem的值為true。否則會拋出空指針異常。
默認是使用HDFS的文件系統,如果是windows系統,需要使用原生的本地文件系統。
(???這里不是很明白,沒讀懂源碼。)
/*
*?delSrc:是否刪除原文件
*?Path?src:源文件
*?Path?dst:目的文件
*?useRawLocalFileSystem:是否使用原生本地文件系統
*/
fs.copyToLocalFile(false,new?Path("/f1/bbb.pdf"),?new?Path("c://abc.pdf"),true);
刪除HDFS文件
/*
*??delete(Path?f,?boolean?recursive)
*??當刪除非空目錄時,recursive必須為true
*/
fs.delete(new?Path("/file1),?true);
創建目錄
//在hdfs的根目錄下創建文件夾
foofs.mkdirs(new?Path("/foo"));
//文件夾的默認權限是755,也可以通過第二個參數設置權限mkdirs(Path,?FsPermission)
如果文件夾的目錄是相對路徑,hdfs會做如下處理:
源碼位置:FileSystem#fixRelativePart()
if?(p.isUriPathAbsolute())?{?//如果是絕對路徑(/開始的路徑),直接使用
return?p;
}?else?{//如果是相對路徑,在當前用戶的home目錄下創建該目錄
return?new?Path(getWorkingDirectory(),?p);
}
例如你在windows系統中執行的操作,假設當前windows的賬戶名是Administrator(管理員賬戶登陸),那么在hdfs中的home目錄即:/user/Administrator。
fs.mkdirs(new?Path("foo"));
執行完上面的代碼,就會在hdfs中創建目錄結構: /user/Administrator/foo
Thanks a lot!
END!
總結
以上是生活随笔為你收集整理的hdfs java api 权限_HDFS Java API 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 阻塞 socket_java
- 下一篇: VC++中的char,wchar_t,T