JAVA API操作小文件合并至HDFS(笔记)

  
  

<强>相关文件请自行创建! ! !

     

包com.hadoop.hdfs;   

进口java.io.IOException;
进口java.net.URI;
进口java.net.URISyntaxException;
进口org.apache.hadoop.conf.Configuration;
进口org.apache.hadoop.fs.FSDataInputStream;
进口org.apache.hadoop.fs.FSDataOutputStream;
进口org.apache.hadoop.fs.FileStatus;
进口org.apache.hadoop.fs.FileSystem;
进口org.apache.hadoop.fs.FileUtil;
进口org.apache.hadoop.fs.Path;
进口org.apache.hadoop.fs.PathFilter;
进口org.apache.hadoop.io.IOUtils;
/* *

  
      <李>合并小文件至HDFS李   <李>   

    */
    公共类MergeSmallFilesToHDFS {
    私有静态文件系统fs=零;
    私有静态文件系统本地=零;

      

    公共静态void main (String [] args)抛出IOException,
    URISyntaxException {
    列表();
    }

      

    /* *   

        <李>数据集合并,并上传至HDFS李   <李>抛出IOException
      抛出URISyntaxException
      /
      公共静态空白列表()抛出IOException URISyntaxException {
      //读取hadoop文件系统的配置配置=
      配置新的配置();
      //文件系统访问接口,注意:hdfs://主:9000年修改成自己的hdfs地址
      =new URI URI URI (“hdfs://主:9000“);
      //创建文件系统对象
      fs=文件系统。得到(uri, conf);
      //获得本地文件系统
      本地=FileSystem.getLocal(参看);
      //过滤目录下的svn文件,注意:文件路径E://Hadoop/73/修改成自己的路径
      FileStatus [] dirstatus=当地。globStatus(新路径(“E://Hadoop/73/“),新RegexExcludePathFilter (“^。 svn“美元));
      //获取73目录下的所有文件路径
      路径[]dirs=FileUtil.stat2Paths (dirstatus);
      FSDataOutputStream=零;
      FSDataInputStream=零;
      (dir路径:dirs) {2019-10-31
      //
      字符串文件名=dir.getName () .replace(“产生绯闻,““);//文件名称
      //只接受日期目录下的。txt文件
      FileStatus [] localStatus=当地。globStatus(新路径(dir +“/“),新RegexAcceptPathFilter (“^。 txt“美元));
      //获得日期目录下的所有文件
      路径[]listedPaths=FileUtil.stat2Paths (localStatus);
      //输出路径,注意:hdfs://主:9000/20191031/修改成自己的hdfs目录地址
      路径块=new路径(“hdfs://主:9000/20191031/?文件名+“.txt");
      System.out.println(“合并后的文件名称:“+文件名+“.txt");
      //打开输出流
      =fs.create(块);
      (路径p: listedPaths) {
      =local.open (p);//打开输入流
      IOUtils。copyBytes(在,4096年,假);//复制数据
      //关闭输入流
      in.close ();
      }
      如果(!=null) {
      //关闭输出流
      out.close ();
      }
      }   
      

    }   

    /* *   

        <李>   李   <李>过滤regex格式的文件   <李>   

      */
      公共静态类RegexExcludePathFilter实现PathFilter {
      私人最终字符串正则表达式;
      公共RegexExcludePathFilter(字符串正则表达式){
      。正则表达式(regex;
      }

        

      公共布尔接受路径(路径){
      布尔标志=path.toString () .matches(正则表达式);
      返回!旗帜;
      }

        李   
      

    }   

    /* *   

        <李>   李   <李>接受regex格式的文件   <李>   

      */
      公共静态类RegexAcceptPathFilter实现PathFilter {
      私人最终字符串正则表达式;
      公共RegexAcceptPathFilter(字符串正则表达式){
      。正则表达式(regex;
      }

        

      @Override
      公共布尔接受路径(路径){
      布尔标志=path.toString () .matches(正则表达式);
      返回国旗;
      }

        李   
      

    }
    }

      李   

JAVA API操作小文件合并至HDFS(笔记)