<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
|
|
51CTO旗下网站
|
|
移动端

3.5.5 查询文件系统(2)

《Hadoop权威指南(中文版)》第3章Hadoop分布式文件系统,本章着眼于Hadoop的文件系统,特别深入地讲解HDFS。本节为大家介绍查询文件系统。

作者:周傲英/曾大聃译来源:清华大学出版社|2010-04-23 15:11

3.5.5  查询文件系统(2)

我们可以使用这个程序得到一个路径集的整个目录列表。

  1.     % hadoop ListStatus hdfs://localhost/ hdfs://localhost/user/tom  
  2. hdfs://localhost/user  
  3. hdfs://localhost/user/tom/books  
  4. hdfs://localhost/user/tom/quangle.txt 

文件格式

在一?#35762;?#20316;中处理批量文件,这个要求很常见。举例来说,处理日志的MapReduce作业可能会分析一个月的文件,这些文件被包含在大量目录中。Hadoop有一个通配的操作,可以方便地使用通配符在一个表达式中核对多个文件,不需要列举每个文件和目录来指定输入。Hadoop为执行通配提供了两个FileSystem方法:

  1. public FileStatus[] globStatus(Path pathPattern) throws IOException  
  2. ublic FileStatus[] globStatus(Path pathPattern, 
    PathFilter filter) throws IOException 

globStatus()返回了其路径匹配于所供格式的FileStatus对象数组,按路径排序。可选的PathFilter命令可以进一步指定限制匹配。

Hadoop支持的一系列通配符与Unix bash相同(见表3-2)。

表3-2:通配符及其作用

通配符

名称

匹配

*

星号

匹配0或多个字符

问号

匹配单一字符

[ab]

字符类别

匹配{a,b}中的一个字符


续表

通配符

名称

匹配

[^ab]

非字符类别

匹配不是{a,b}中的一个字符

[a-b]

字符范围

匹配一个在{a,b}范围内的

字符(包括ab)a在字典

顺序上要小于或等于b

[^a-b]

非字符范围

匹配一个不在{a,b}范围内

的字符(包括ab)a在字

典顺序上要小于或等于b

{a,b}

或选择

匹配包含ab中的一个的语句

\c

转义字符

匹配元字符c


假设有日志文件存储在按日期分层组织的目录结构中。如此一来,便可以假设2007年最后一天的日志文件就会以/2007/12/31的命名存入目录。假设整个文件列表如下:

  1. /2007/12/30  
  2. /2007/12/31  
  3. /2008/01/01  
  4. /2008/01/02 

以下是一些文件通配符及其扩展。

通配符

扩展

/*

/2007/2008

/*/*

/2007/12 /2008/01

/*/12/*

/2007/12/30 /2007/12/31

/200?

/2007 /2008

/200[78]

/2007 /2008

/200[7-8]

/2007 /2008

/200[^01234569]

/2007 /2008

/*/*/{31,01}

/2007/12/31 /2008/01/01

/*/*/3{0,1}

/2007/12/30 /2007/12/31

/*/{12/31,01/01}

/2007/12/31 /2008/01/01


PathFilter对象

通配格式不是总能够精确地描述我们想要访问的文件集合。比如,使用通配格式排除一个特定的文件就不太可能。FileSystem中的listStatus()和globStatus()方法提供了可选的PathFilter对象,使我们能够通过编程方式控制匹配:

  1. package org.apache.hadoop.fs;  
  2.  
  3. ublic interface PathFilter {  
  4.    boolean accept(Path path);  

PathFilter与java.io.FileFilter一样,是Path对象而不是File对象。

例3-7展示了一个PathFilter,用于排除匹配一个正则表达式的路径。

例3-7:一个PathFilter,用于排除匹配一个正则表达式的路径

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

这个过滤器只留下与正则表达式不同的文件。我们将它与预先剔除一些文件集?#31995;?#36890;配配合:过滤器用来优化结果。例如:

  1. fs.globStatus(new Path("/2007/*/*"),   
  2. ew RegexExcludeFilter("^.*/2007/12/31$")) 

<pre><ol class="dp-xml"><li class="alt"><span><span>fs.globStatus(new&nbsp;Path(&quot;/2007/*/*&quot;),&nbsp; &nbsp;</span></span></li><li><span>ew&nbsp;RegexExcludeFilter(&quot;^.*/2007/12/31$&quot;))&nbsp;</span></li></ol></pre>
<p>&nbsp;</p>

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你?#19981;?/dt>

订阅专栏+更多

笑熬浆糊之职场那些事

笑熬浆糊之职场那些事

IT人的职场心法
共22章 | Bear_Boss

62人订阅学习

Redis?#23435;?#31192;籍

Redis?#23435;?#31192;籍

?#23435;?#26631;配技术
共15章 | one叶孤舟

133人订阅学习

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

247人订阅学习

读 书 +更多

C#2005编程进阶与参考手册

本书非常详细而全面地介绍了C#程序设计语言。本书不是“5分钟学习C#”式的手册,也不是那种教您“照猫画虎”地创建一些与您的?#23548;?#24037;作需要...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

澳洲幸运5官方
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
东阿彩票大奖 血流成河之九莲宝灯 亚特兰大老鹰主场球馆 法国斯特拉斯堡地图 川崎前锋悉尼FC预测 南粤36选7走势图带坐标 1.99版三国全面战争 伊蒂哈德衣服 吉林快3走势图-遗漏分布 河北快3走势图8月10号