码迷,mamicode.com
首页 > Web开发 > 详细

将小文件合并大文件上传

时间:2015-08-15 14:40:17      阅读:271      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!