首页 > Web开发 > 详细

将小文件合并大文件上传

时间:2015-08-15 14:40:16      阅读:313      评论:0      收藏:0      [点我收藏+]

自定义方法将本地多个小文件合并成一个大文件上传到HDFS上。

技术分享
package test;

import java.net.URI;

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.LocalFileSystem;
import org.apache.hadoop.fs.Path;

public class PutMerge {

    public static void main(String[] args) throws Exception {

        //配置环境变量
        System.setProperty("hadoop.home.dir", "F:\\JAVA\\hadoop-2.2.0");
        Configuration conf = new Configuration();

        /**
         * 获取HDFS
         * 其中URI的使用,可以使得下面对于HDFS的路径使用简写
         */
        FileSystem dfs = FileSystem.get(new URI("hdfs://hadoop01:9000"), conf);

        //输出流
        FSDataOutputStream outputStream = dfs.create(new Path("/wc/test/a/a.data"), true);

        /**
         * 获取本地FS
         */
        LocalFileSystem lfs = FileSystem.getLocal(conf);

        /**
         * 获取要上传的路径
         * 由于是文件家,所以使用 listStatus()方法
         */
        FileStatus[] listStatus = lfs.listStatus(new Path("e:\\b"));

        //缓冲区
        byte[] buffer =new byte[1024];
        int len=0;

        //循环遍历文件夹
        for(FileStatus file : listStatus){

            //打印当前读取的文件名
            System.out.println(file.getPath().toString());

            //输入流
            FSDataInputStream inputStream = lfs.open(file.getPath());

            //循环读取,输出
            while((len=inputStream.read(buffer))>0){

                outputStream.write(buffer, 0, len);
            }            
            inputStream.close();
        }
        outputStream.close();
    }
}
View Code

 

将小文件合并大文件上传

原文:http://www.cnblogs.com/skyl/p/4732318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!