hdfs有多级目录 合并文件下载到本地(递归下载)
2016-09-13 13:46
771 查看
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);
}
}
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);
}
}
相关文章推荐
- 本地多级文件 合并上传到hdfs(递归上传)
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
- day20File类,各方法。递归。删除一带内容的目录。Properties 。记录应用程序运行次数。打印流。切割合并文件。
- secureCRT下乱码,同时操作多会话,上传/下载文件,主机间传输文件,创建多级目录
- iOS 将服务器下载下来的db文件和本地的db文件合并后保存
- 自动化挂载HDFS文件系统到本地目录
- 从HDFS下载文件到本地
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- hdfs中将文件夹下所有.bz2文件进行解压并且合并,然后传到本地
- [Java教程]从HDFS下载文件到本地
- ubuntu---从网页上下载文件到当前目录 和 从本地上传文件到当前目录
- ftp下载目录下所有文件及文件夹内(递归)
- <实战> 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器 推荐
- 文件操作总结-递归删除文件(文件下含有多级目录和文件)
- CaptainGan------使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 将本地文件目录移动(或cp)到hdfs下shell脚本
- 把本地文件夹下的所有文件上传到hdfs上并合并成一个文件
- 以命令方式从FTP 服务器下载文件到本地指定目录
- 自动化挂载HDFS文件系统到本地目录
- hdfs下载文件到本地