<强>相关文件请自行创建! ! ! 强>
引用>包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(笔记)