文档章节

MapReduce 中的文件名通配与过滤

大数据之路
 大数据之路
发布于 2014/05/14 03:48
字数 767
阅读 2.5K
收藏 5

1、通配符的使用与简介

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

public FileStatus[] globStatus(Path pathPattern) throws IOException  

public 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的命名存入目录。假设整个文件列表如下:
/2007/12/30  
/2007/12/31  
/2008/01/01  
/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


2、PathFilter对象

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

package org.apache.hadoop.fs;  
 
public interface PathFilter {  
   boolean accept(Path path); 
}

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

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

public class RegexExcludePathFilter implements PathFilter {  
    
  private final String regex;  
 
  public RegexExcludePathFilter(String regex) {  
    this.regex = regex;  
  }  
 
  public boolean accept(Path path) {  
    return !path.toString().matches(regex);  
  }  
}
这个过滤器只留下与正则表达式不同的文件。我们将它与预先剔除一些文件集合的通配配合:过滤器用来优化结果。例如:
fs.globStatus( new Path("/2007/*/*"),   
               new RegexExcludeFilter("^.*/2007/12/31$")
)

3、Referer:

http://stackoverflow.com/questions/17618535/filestatus-use-to-recurse-directory

本文转载自:http://book.51cto.com/art/201004/196479.htm

大数据之路
粉丝 1624
博文 514
码字总数 330865
作品 0
武汉
架构师
私信 提问
Hadoop中的MapReduce(5)

在MapReduce中,它也是主从结构,主节点:JobTracker,从节点:TaskTracker。主节点只有一个从节点有很多个,主节点在主机上,从节点分布到其他机器上。 JobTracker: 作用: 1、负责接收用户...

肖鋭
2014/02/23
114
0
Hive分区过多有何坏处以及分区时的注意事项

1.当分区过多且数据很大时,可以使用严格模式,避免出发一个大的mapreduce任务。当分区数量过多且数据量较大时,执行宽范围的数据扫描会触发一个很大的mapreduce任务。在严格模式下,当where...

无精疯
2018/04/21
641
0
视频jourk--hadoop2.x介绍与安装

一、 hadoop介绍 1.hadoop的由来:(google三篇论文) (2003)GFS --> HDFS (2004)MapReduce --> MapReduce (2006)BigTable --> HBase(Hadoop DataBase) 2.hadoop的著名案例 Facebook : HiveQ......

一枚Sir
2014/08/14
330
0
大数据经典学习路线(及供参考)之 一

1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此...

柯西带你学编程
2018/05/22
0
0
Hadoop到底是什么? 到底能做什么?

调研Hadoop颇久,就是想知道hadoop是什么?hadoop能做什么?怎么用hadoop?最主要是这三块,至于投入和风险也会随之出来(浓缩了我几十页的调研方案啊!!!) hadoop是什么? Hadoop是一个开...

天呀鲁哇
2015/03/13
353
3

没有更多内容

加载失败,请刷新页面

加载更多

spring-boot-maven-plugin not found的解决方案。

通过IDE创建一个springboot项目, <plugin> <groupId>org.springframework.boot</groupId>//这行红色 <artifactId>spring-boot-maven-plugin</artifactId>//这行红色</plugin> 提示sprin......

一片云里的天空
今天
52
0
OSChina 周三乱弹 —— 我可能是个憨憨

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @宇辰OSC :分享Hare Je的单曲《Alan Walker-Faded(Hare Je remix)》: #今日歌曲推荐# 可以放松大脑的一首纯音乐 《Alan Walker-Faded(Har...

小小编辑
今天
99
0
搞定SpringBoot多数据源(3):参数化变更源

春节将至,今天放假了,在此祝小伙伴们新春大吉,身体健康,思路清晰,永远无BUG! 一句话概括:参数化变更源意思是根据参数动态添加数据源以及切换数据源,解决不确定数据源的问题。 1. 引言...

mason技术记录
昨天
99
0
sql 基础知识

sql 基础知识 不要极至最求一条sql语句搞定一切,可合理拆分为多条语句 1. sql 变量定义与赋值 Sql 语句中,直接在SELECT使用@定义一个变量,如:[@a](https://my.oschina.net/a8856225a)。 ...

DrChenXX
昨天
57
0
MacOSX 安装 TensorFlow

TensorFlow是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的。 准备 安装 Anaconda TensorFlow 安装的...

叉叉敌
昨天
79
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部