`
zhouchaofei2010
  • 浏览: 1102937 次
  • 性别: 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是常用的关系...

    实验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

    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中NameNode节点的配置、备份和恢复.doc

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

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

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

    HDFS实例基本操作

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

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

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

    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的核心组件之一,它提供了一个分布式、...

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

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

    hdfs官方设计文档(中文)

    Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,设计为部署在廉价硬件上的。HDFS对...

    14、HDFS 透明加密KMS

    【HDFS 透明加密KMS】是Hadoop分布式文件系统(HDFS)提供的一种安全特性,用于保护存储在HDFS中的数据,确保数据在传输和存储时的安全性。HDFS透明加密通过端到端的方式实现了数据的加密和解密,无需修改用户的应用...

Global site tag (gtag.js) - Google Analytics