博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop对输入路径的过滤问题解决方式
阅读量:4112 次
发布时间:2019-05-25

本文共 2105 字,大约阅读时间需要 7 分钟。

需求:

数据格式如下:

/data/input/news/old.dat

/data/input/news/current.dat

/data/input/news/20131001.txt

......

/data/input/news/20131030.txt

/data/input/news/20131031.txt

我们需要计算分析10月份的新闻,其他的暂时不计算,那么就需要做一个过滤操作,input path为新闻根路径即/data/input/news/

 

思路:

基于PathFilter实现

 

实现代码:

fitler:

class TextPathFilter extends Configured implements PathFilter {	Configuration conf = null;	@Override	public Configuration getConf() {		return conf;	}	@Override	public void setConf(Configuration conf) {		this.conf = conf;	}	@Override	public boolean accept(Path path) {		String regex = conf.get("org.test.filter.regex");		if (regex == null) {			return true;		}		return path.toString().matches(regex);	}}

使用方式:

Configuration conf = new Configuration();conf.set("org.test.filter.regex", "2012[1-12][1-31].txt");........TextInputFormat.setInputPathFilter(job, TextPathFilter.class);

 

其他说明:

0.21.0版本之前会报错,错误信息如下:

Caused by: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://your path        at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:231)        at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:248)        at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:950)        at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:967)        at org.apache.hadoop.mapred.JobClient.access$500(JobClient.java:170)        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:880)        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:833)        at java.security.AccessController.doPrivileged(Native Method)        at javax.security.auth.Subject.doAs(Subject.java:396)        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1177)        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:833)        at org.apache.hadoop.mapreduce.Job.submit(Job.java:476)        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:506)

错误原因:

在进行match的时候返回了null,应该返回一个空的FileStatus[],代码位置在FileSystem.java中

0.21.0版本之后此bug已经修复,因此升级即可

 

转载地址:http://tsqsi.baihongyu.com/

你可能感兴趣的文章
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
tomcat 使用心得(问题)-eclipse 启动tomcat 后 浏览器访问404 --eclipse复制工程显示原来的工程名
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
安卓模拟器请求本地资源,不修改hosts
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>