HDFS中PathFilter类

简介:

  在单个操作中处理一批文件,这是很常见的需求。比如说处理日志的MapReduce作业可能需要分析一个月内包含在大量目录中的日志文件。在一 个表达式中使用通配符在匹配多个文件时比较方便的,无需列举每个文件和目录来指定输入。hadoop为执行通配提供了两个FIleSystem方法:


1 public FileStatus[] globStatus(Path pathPattern) throw IOException
2 public FileStatus[] globStatus(Path pathPattern, PathFilter filter) throw IOException

  globStatus()方法返回与路径想匹配的所有文件的FileStatus对象数组,并按路径排序。hadoop所支持的通配符与Unix bash相同。

  第二个方法传了一个PathFilter对象作为参数,PathFilter可以进一步对匹配进行限制。PathFilter是一个接口,里面只有一个方法accept(Path path)。

下面看一个例子演示PathFilter的作用:

  RegexExcludePathFilter.java:该类实现了PathFilter接口,重写了accept方法

 1 class RegexExcludePathFilter implements PathFilter{
 2     private final String regex;
 3     public RegexExcludePathFilter(String regex) {
 4         this.regex = regex;
 5     }
 6     @Override
 7     public boolean accept(Path path) {
 8         return !path.toString().matches(regex);
 9     }
10
11 }

  该方法就是打印符合通配的路径:

 1 //通配符的使用
 2     public static void list() throws IOException{
 3         Configuration conf = new Configuration();
 4         FileSystem fs = FileSystem.get(conf);
 5         //PathFilter是过滤布符合置顶表达式的路径,下列就是把以txt结尾的过滤掉
 6         FileStatus[] status = fs.globStatus(new Path(“hdfs://master:9000/user/hadoop/test/“),new RegexExcludePathFilter(“.txt”));
 7         //FileStatus[] status = fs.globStatus(new Path(“hdfs://master:9000/user/hadoop/test/*”));
 8         Path[] listedPaths = FileUtil.stat2Paths(status);
 9         for (Path p : listedPaths) {
10             System.out.println(p);
11         }
12     }

如果注释第6行,取消第7行的注释,则输出结果如下:
hdfs://master:9000/user/hadoop/test/a.txt
hdfs://master:9000/user/hadoop/test/b.txt
hdfs://master:9000/user/hadoop/test/c.aaa
hdfs://master:9000/user/hadoop/test/c.txt
hdfs://master:9000/user/hadoop/test/cc.aaa

如果注释第7行,取消第6行的注释,则输出结果如下:

hdfs://master:9000/user/hadoop/test/c.aaa
hdfs://master:9000/user/hadoop/test/cc.aaa

 

由此可见,PathFilter就是在匹配前面条件之后再加以限制,将匹配PathFilter的路径去除掉。其实由accept方法里面的 return !path.toString().matches(regex);可以看出来,就是将匹配的全部去除掉,如果改为return path.toString().matches(regex);就是将匹配regex的Path输出,将不匹配的去除。

 

相关文章
|
8月前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS中的块是什么?
【4月更文挑战第9天】【Hadoop】HDFS中的块是什么?
|
5月前
|
存储 分布式计算 运维
Hadoop重新格式化HDFS的方案
【8月更文挑战第8天】
151 2
|
6月前
|
分布式计算 Hadoop
hadoop格式化HDFS问题
【7月更文挑战第15天】
166 12
|
存储 分布式计算 安全
分布式文件系统(HDFS产生背景及定义 HDFS优缺点 HDFS体系架构 HDFS文件块大小)
分布式文件系统(HDFS产生背景及定义 HDFS优缺点 HDFS体系架构 HDFS文件块大小)
270 0
|
8月前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS 读写流程
【4月更文挑战第9天】【Hadoop】HDFS 读写流程
|
存储 机器学习/深度学习 分布式计算
HDFS最基础使用
HDFS最基础使用
128 0
|
机器学习/深度学习 分布式计算 资源调度
配置 HDFS-启动 HDFS 测试|学习笔记
快速学习配置 HDFS-启动 HDFS 测试
配置 HDFS-启动 HDFS 测试|学习笔记
|
存储 分布式计算 监控
hadoop之hdfs概念(7)
hadoop之hdfs概念(7)
229 0
hadoop之hdfs概念(7)
|
存储 机器学习/深度学习 分布式计算
Hadoop(HDFS)概述、HDFS产生背景、HDFS定义、HDFS优缺点、HDFS组成架构、HDFS文件块大小(面试重点)
Hadoop(HDFS)概述、HDFS产生背景、HDFS定义、HDFS优缺点、HDFS组成架构、HDFS文件块大小(面试重点)
Hadoop(HDFS)概述、HDFS产生背景、HDFS定义、HDFS优缺点、HDFS组成架构、HDFS文件块大小(面试重点)