对文件夹和子文件夹中的文件运行Mapreduce

时间:2014-09-08 19:15:59

标签: java unix hadoop mapreduce hdfs

我们的日志文件存储在HDFS的年/月/日/小时文件夹中

请参阅下面的结构:

/year=2014/month=8/day=20/hour=1/logA.txt    
/year=2014/month=8/day=20/hour=2/logB.txt    
/year=2014/month=8/day=20/hour=2/logC.txt

如果我将一个日志文件作为输入传递给Java mapreduce程序,它可以工作。

See my working syntax below:
hadoop jar test.jar wc /year=2014/month=8/day=20/hour=1/logA.txt output/

如何将month = 8中的所有文件作为输入传递给我的地图缩减程序?即month = 8每天都有文件夹,每天有几个小时的子文件夹。日志文件存储在小时文件夹中。

我需要在8月份的每一天将每个小时的所有文件传递给我的Mapreduce程序。

2 个答案:

答案 0 :(得分:0)

你尝试过这个吗?    hadoop jar test.jar wc / year = 2014 / month = 8 / output /

答案 1 :(得分:0)

Hadoop FileSystem支持globbing。您可以在FileSystem Javadoc

中找到模式的定义

要回答您的具体问题,您可以使用的模式是:

/year=2014/month=8/day=*/hour=*

如果您没有提供所有细节,并且此模式不起作用,您可以轻松调整它以匹配较少的文件。例如:

/year=2014/month=8/day=*/hour=*/logA.txt

或者,如果您只想处理0到11之间的小时

/year=2014/month=8/day=*/hour={0,1,2,3,4,5,6,7,8,9,10,11}