如何在HADOOP中处理多个文件夹

时间:2014-01-17 04:39:37

标签: java xml hadoop hdfs

我遇到以下问题。我有200k xml文件。我有200个文件夹,每个文件夹有2000个xml文件。我的HDFS中有这个。架构在下面

RootFolder 
   Folder001
       1.xml
       2.xml
       2000.xml
   Folder002
       2001.xml

我需要编写一个mapper程序来读取文件并执行一些Xpath过程。

如果我提供 RootFolder 输入路径,那么映射器应该读取文件夹并处理xml文件

那应该有200个任务。每个文件夹应由单个映射器

读取

如何处理多个文件夹?

1 个答案:

答案 0 :(得分:1)

根据我的理解,你有两个问题:

1:需要通过单个地图任务映射子文件夹中的所有文件:

答案:您可以在此方案中使用CombineFileInputFormat。它将为指定的PathFilter分组文件(在您的情况下,过滤器应接受相同文件夹的文件)并将其分配给单个maptask。即,可以实现每个文件夹的maptask。为了获得更好的控制,请扩展CombineFileInputFormat并使其成为您自己的,就像我在我的案例中所做的那样。

2:通过仅指定根文件夹,需要将子文件夹中的文件也包含在地图任务的输入中。

Ans:在新的API版本中,FileInputFormat可以将文件从其子文件夹递归到任何级别。 有关详细信息,您可以看到jira here

或者如果您想自己动手,可以继承FileInputFormat并覆盖listStatus方法。