文件元数据:Filestatus 任何文件系统的一个重要特征是定位其目录结构及检索其存储的文件和目录信息的能力。FileStatus类封装了文件系统中文件和目录的元数据,包括文件长度、块大小、副本、修改时间、所有者、所属组以及许可信息。 代码:
FileSystem的getFileStatus()提供了获取一个文件或目录的状态对象的方法。例3-5展示了它的用法。 例3-5:展示文件状态信息
如果文件或目录不存在,即会抛出FileNotFoundException异常。如果你只对文件或目录是否存在有兴趣,exists()方法会更方便
查找一个文件或目录的信息很实用,但有时我们还需要能够列出目录的内容。这就是listStatus()方法的功能:
传入参数是一个文件时,它会简单地返回长度为1的FileStatus对象的一个数组。当传入参数是一个目录时,它会返回0或者多个FileStatus对象,代表着此目录所包含的文件和目录。 重载方法允许我们使用PathFilter来限制匹配的文件和目录,示例参见后文。如果把路径数组作为参数来调用listStatus方法,其结果是与依次对每个路径调用此方法,再将FileStatus对象数组收集在一个单一数组中的结果是相同的,但是前者更为方便。这在建立从文件系统树的不同部分执行的输入文件的列表时很有用。例3-6是这种思想的简单示范。注意FIleUtil中stat2Paths()的使用,它将一个FileStatus对象数组转换为Path对象数组。 例3-6:显示一个Hadoop文件系统中一些路径的文件信息
文件格式 在一步操作中处理批量文件,这个要求很常见。举例来说,处理日志的MapReduce作业可能会分析一个月的文件,这些文件被包含在大量目录中。Hadoop有一个通配的操作,可以方便地使用通配符在一个表达式中核对多个文件,不需要列举每个文件和目录来指定输入。Hadoop为执行通配提供了两个FileSystem方法:
globStatus()返回了其路径匹配于所供格式的FileStatus对象数组,按路径排序。可选的PathFilter命令可以进一步指定限制匹配。 Hadoop支持的一系列通配符与Unix bash相同(见表3-2)。 表3-2:通配符及其作用
以下是一些文件通配符及其扩展。
PathFilter对象 通配格式不是总能够精确地描述我们想要访问的文件集合。比如,使用通配格式排除一个特定的文件就不太可能。FileSystem中的listStatus()和globStatus()方法提供了可选的PathFilter对象,使我们能够通过编程方式控制匹配:
PathFilter与java.io.FileFilter一样,是Path对象而不是File对象。 例3-7展示了一个PathFilter,用于排除匹配一个正则表达式的路径。
参考:Hadoop权威指南第2版中文版 (责任编辑:IT) |