设为首页 加入收藏

TOP

hdfs有多级目录 合并文件下载到本地(递归下载)
2018-12-01 00:15:37 】 浏览:51
Tags:hdfs 多级 目录 合并 文件下载 本地 下载
package com.hdfs;


import java.io.FileOutputStream;
import java.io.OutputStream;


import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;


import com.beicai.utils.MyUtils;
/**
*
* @described hdfs有多级目录 合并下载到本地
*
*/
public class HdfsWork2 {
public static void main(String[] args) throws Exception {
myMerge();
}

public static void myWrite(Path path,FileSystem fs,OutputStream fsdos) throws Exception{
FileStatus[] fst = fs.listStatus(path);
FSDataInputStream fsdis = null;
for(int i=0;i<fst.length;i++){
if(fst[i].isDirectory()){
myWrite(fst[i].getPath(),fs,fsdos);
} else {
fsdis = fs.open(fst[i].getPath());
int read = 0;
byte[] buffer = new byte[255];
while((read=fsdis.read(buffer))>0){
fsdos.write(buffer, 0, read);
}
IOUtils.closeStream(fsdis);
}
}
}

public static void myMerge() throws Exception{
FileSystem fs = MyUtils.getFileSystem();
LocalFileSystem lfs = MyUtils.getLocalFileSystem();
Path localPath = new Path("D:/data/file0913.txt");
Path hdfsPath = new Path("/data2");

//FSDataOutputStream fsdos = lfs.create(localPath);
//用上面的,报空指针异常,是因为系统原因,改成普通的文件输出流就好了
FileOutputStream fsdos = new FileOutputStream(localPath.toString());
myWrite(hdfsPath,fs,fsdos);
IOUtils.closeStream(fsdos);
}
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇cdh-管理HDFS高可用性群集 下一篇hadoop与s3之间互相传输文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目