`
zhouchaofei2010
  • 浏览: 1107989 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)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输出,将不匹配的去除。

 

转 :http://www.cnblogs.com/liuling/p/2013-6-18-02.html

分享到:
评论

相关推荐

    7、NIFI综合应用场景-将mysql查询出的json数据转换成txt后存储至HDFS中

    在本文中,我们将探讨一个具体的NIFI应用场景,即如何将从MySQL数据库中查询得到的JSON数据转换成TXT格式,并存储到HDFS(Hadoop分布式文件系统)中。这个场景在大数据处理和分析中非常常见,因为MySQL是常用的关系...

    向hdfs上传Excel文件.doc

    在大数据处理场景中,经常需要将Excel文件上传到Hadoop分布式文件系统(HDFS)中进行进一步的数据处理或分析。然而,由于HDFS本身并不直接支持Excel文件格式,通常的做法是先将Excel文件转换为CSV等更易于处理的格式...

    实验2常用的HDFS操作.doc

    (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件 (2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件...

    hadoop之hdfs中所依赖jar

    在这个例子中,`Configuration`和`FileSystem`类分别来自`hadoop-common.jar`和`hadoop-hdfs.jar`。确保这些JAR包在运行时可用,程序才能正常工作。 总结起来,与HDFS交互时,理解和正确使用相关的JAR包至关重要。...

    hdfs源码分析整理

    在分布式文件系统中,HDFS(Hadoop Distributed File System)扮演着核心角色,而HDFS的源码分析则是深入了解HDFS架构和实现机理的关键。本文将对HDFS源码进行详细的分析和整理,涵盖了HDFS的目录结构、对象序列化、...

    HDFS基本命令.docx

    在HDFS中,基本命令是最基础也是最常用的命令,掌握这些命令是使用HDFS的基础。本节我们将详细介绍HDFS中的基本命令。 -help命令 HDFS中的-help命令用于显示HDFS的帮助信息。该命令可以显示所有可用的命令和参数。...

    大数据实验二-HDFS编程实践

    - **文件复制**:`hdfs dfs -copyFromLocal`将本地文件复制到HDFS,`hdfs dfs -copyToLocal`将HDFS中的文件复制到本地。 ##### Java API实践 1. **环境搭建**:首先需要在开发环境中配置好Hadoop相关的依赖,通常...

    HDFS文件系统基本文件命令、编程读写HDFS

    HDFS 文件系统基本文件命令、编程读写 HDFS HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。它是 Hadoop 云计算平台的核心组件之一,提供了高效、可靠、可扩展的数据存储...

    hdfs-java-api

    * org.apache.hadoop.fs.Path:该类表示 HDFS 中的一个文件路径。 * org.apache.hadoop.conf.Configuration:该类提供了 HDFS 的配置信息,包括文件系统的块大小、副本因子等。 HDFS Java API 的使用 HDFS Java ...

    Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    标题中的知识点主要涉及Python连接HDFS进行文件上传下载以及Pandas转换文本文件到CSV的操作。在描述中,提到了Python在Linux环境下与HDFS交互的需求,以及使用Pandas进行数据处理的场景。从标签中我们可以进一步了解...

    数据科学导论实验报告 实验2:熟悉常用的HDFS操作

    1. **上传文件**:在Java代码中,我们可以使用`FileSystem`类的`copyFromLocalFile`方法将本地文件上传到HDFS。这个方法接受两个布尔参数,第一个表示是否删除源文件,第二个表示是否覆盖目标文件。如果目标文件已...

    HDFS实例基本操作

    2. 使用HDFS API:对于Java应用程序,可以使用Hadoop的FSDataOutputStream类,通过创建一个FileSystem实例,然后调用`create()`方法来上传文件。 三、HDFS的文件下载 1. 命令行工具:使用`hadoop fs -get`命令将...

    HDFS中NameNode节点的配置、备份和恢复.doc

    HDFS 中 NameNode 节点的配置、备份和恢复 HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的分布式文件系统,它提供了高效、可靠、可扩展的文件存储解决方案。 NameNode 是 HDFS 集群中的中心服务器...

    实验二:熟悉常用的HDFS操作

    在Java编程实现部分,学生通过`org.apache.hadoop.conf.Configuration`,`org.apache.hadoop.fs.FileSystem`和`org.apache.hadoop.fs.Path`等类,实现了文件存在性判断和本地文件复制到HDFS的功能。`FileSystem.get...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    在Hadoop集群中,为了使HDFS Explorer能够通过WebHDFS接口访问HDFS,需要在Hadoop的配置文件`hdfs-site.xml`中启用WebHDFS服务。为此,你需要添加以下配置: ```xml <name>dfs.webhdfs.enabled <value>true ...

    实验项目 实战 HDFS 实验报告

    实验结束后,学生应反思实验过程中遇到的问题,分享解决策略,并探讨未解决的问题,以加深对HDFS的理解和应用能力。 总之,这个实验项目全方位覆盖了HDFS的核心概念和技术,旨在培养学生的实践能力和问题解决能力,...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    利用JAVA代码将本地文件传入HDFS中

    标题 "利用JAVA代码将本地文件传入HDFS中" 涉及到的是在Java编程环境中,使用Hadoop Distributed File System (HDFS) API来上传本地文件系统的文件到HDFS的过程。HDFS是Hadoop的核心组件之一,它提供了一个分布式、...

Global site tag (gtag.js) - Google Analytics