在单个操作中处理一批文件,这是很常见的需求。比如说处理日志的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输出,将不匹配的去除。
相关推荐
在本文中,我们将探讨一个具体的NIFI应用场景,即如何将从MySQL数据库中查询得到的JSON数据转换成TXT格式,并存储到HDFS(Hadoop分布式文件系统)中。这个场景在大数据处理和分析中非常常见,因为MySQL是常用的关系...
(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件 (2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件...
在这个例子中,`Configuration`和`FileSystem`类分别来自`hadoop-common.jar`和`hadoop-hdfs.jar`。确保这些JAR包在运行时可用,程序才能正常工作。 总结起来,与HDFS交互时,理解和正确使用相关的JAR包至关重要。...
在分布式文件系统中,HDFS(Hadoop Distributed File System)扮演着核心角色,而HDFS的源码分析则是深入了解HDFS架构和实现机理的关键。本文将对HDFS源码进行详细的分析和整理,涵盖了HDFS的目录结构、对象序列化、...
在HDFS中,基本命令是最基础也是最常用的命令,掌握这些命令是使用HDFS的基础。本节我们将详细介绍HDFS中的基本命令。 -help命令 HDFS中的-help命令用于显示HDFS的帮助信息。该命令可以显示所有可用的命令和参数。...
HDFS 文件系统基本文件命令、编程读写 HDFS HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。它是 Hadoop 云计算平台的核心组件之一,提供了高效、可靠、可扩展的数据存储...
* org.apache.hadoop.fs.Path:该类表示 HDFS 中的一个文件路径。 * org.apache.hadoop.conf.Configuration:该类提供了 HDFS 的配置信息,包括文件系统的块大小、副本因子等。 HDFS Java API 的使用 HDFS Java ...
标题中的知识点主要涉及Python连接HDFS进行文件上传下载以及Pandas转换文本文件到CSV的操作。在描述中,提到了Python在Linux环境下与HDFS交互的需求,以及使用Pandas进行数据处理的场景。从标签中我们可以进一步了解...
1. **上传文件**:在Java代码中,我们可以使用`FileSystem`类的`copyFromLocalFile`方法将本地文件上传到HDFS。这个方法接受两个布尔参数,第一个表示是否删除源文件,第二个表示是否覆盖目标文件。如果目标文件已...
HDFS 中 NameNode 节点的配置、备份和恢复 HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的分布式文件系统,它提供了高效、可靠、可扩展的文件存储解决方案。 NameNode 是 HDFS 集群中的中心服务器...
在Hadoop集群中,为了使HDFS Explorer能够通过WebHDFS接口访问HDFS,需要在Hadoop的配置文件`hdfs-site.xml`中启用WebHDFS服务。为此,你需要添加以下配置: ```xml <name>dfs.webhdfs.enabled <value>true ...
2. 使用HDFS API:对于Java应用程序,可以使用Hadoop的FSDataOutputStream类,通过创建一个FileSystem实例,然后调用`create()`方法来上传文件。 三、HDFS的文件下载 1. 命令行工具:使用`hadoop fs -get`命令将...
在Java编程实现部分,学生通过`org.apache.hadoop.conf.Configuration`,`org.apache.hadoop.fs.FileSystem`和`org.apache.hadoop.fs.Path`等类,实现了文件存在性判断和本地文件复制到HDFS的功能。`FileSystem.get...
hdfs文件的查看 hdfs fs -cat /文件名
HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...
标题 "利用JAVA代码将本地文件传入HDFS中" 涉及到的是在Java编程环境中,使用Hadoop Distributed File System (HDFS) API来上传本地文件系统的文件到HDFS的过程。HDFS是Hadoop的核心组件之一,它提供了一个分布式、...
- **文件复制**:`hdfs dfs -copyFromLocal`将本地文件复制到HDFS,`hdfs dfs -copyToLocal`将HDFS中的文件复制到本地。 ##### Java API实践 1. **环境搭建**:首先需要在开发环境中配置好Hadoop相关的依赖,通常...
Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,设计为部署在廉价硬件上的。HDFS对...
【HDFS 透明加密KMS】是Hadoop分布式文件系统(HDFS)提供的一种安全特性,用于保护存储在HDFS中的数据,确保数据在传输和存储时的安全性。HDFS透明加密通过端到端的方式实现了数据的加密和解密,无需修改用户的应用...