Hadoop 1.x 实现文件上传合并功能

来源:互联网 发布:梦里花落知多少封面 编辑:程序博客网 时间:2024/06/15 13:47

     具体的见下面代码中注释

package org.dragon.hadoop.hdfs.util;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.Path;/** * HDFS 实现若干小文件上传后合并功能 * 思路: * 1、本地每个文件打开输入流,进行内容读取 * 2、HDFS文件打开输出流,进行内容写入 * 3、循环上述操作 * 4、关闭流 * @author Administrator * */public class HDFSPutMergeImpl {/** * 复制上传文件,并进行合并 * @param localDir * 本地要上传的文件目录 * @param hdfsFile * HDFS上的文件全路径名称 */public static void putMerge(String localDir,String hdfsFile){//获取配置信息Configuration conf = new Configuration();//本地路径Path localPath = new Path(localDir);//HDFS路径Path hdfsPath = new Path(hdfsFile);try{//获取本地文件系统FileSystem localFs = FileSystem.getLocal(conf);//获取HDFS文件系统FileSystem hdfsFs = FileSystem.get(conf);//获取本地文件系统目录中的所有文件FileStatus[] status = localFs.listStatus(localPath);//打开HDFS文件的输出流FSDataOutputStream fsDataOutputStream = hdfsFs.create(hdfsPath);//循环遍历本地文件for(FileStatus fileStatus:status){//获取文件路径Path path = fileStatus.getPath();//打开输入流FSDataInputStream fsDataInputStream = localFs.open(path);//进行流的读写操作byte[] buffer = new byte[1024];int len = 0;//读到缓冲区while((len = fsDataInputStream.read(buffer))>0){//从缓冲区写入fsDataOutputStream.write(buffer,0,len);}//关闭本次循环流fsDataInputStream.close();}//关闭输出流fsDataOutputStream.close();System.out.println("success!!");}catch(Exception e){e.printStackTrace();}}//测试public static void main(String[] args) {String localDir = "D:/temp/demo";String hdfsFile = "hdfs://hadoop-master.dragon.org:9000/opt/data/test01/all.debug.log";putMerge(localDir, hdfsFile);}}


0 0