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

Java 如何在HADOOP中处理多个文件夹,java,xml,hadoop,hdfs,Java,Xml,Hadoop,Hdfs,我有以下问题。我有20万个xml文件。我有200个文件夹,每个文件夹有2000个xml文件。我的HDFS里有这个。架构如下 RootFolder Folder001 1.xml 2.xml 2000.xml Folder002 2001.xml 我需要编写一个映射程序来读取文件并执行一些Xpath过程 如果我给出RootFolder输入路径,那么映射程序应该读取文件夹并处理xml文件 也就是说应该有200个任务。每个文件夹都

我有以下问题。我有20万个xml文件。我有200个文件夹,每个文件夹有2000个xml文件。我的HDFS里有这个。架构如下

RootFolder 
   Folder001
       1.xml
       2.xml
       2000.xml
   Folder002
       2001.xml
我需要编写一个映射程序来读取文件并执行一些Xpath过程

如果我给出RootFolder输入路径,那么映射程序应该读取文件夹并处理xml文件


也就是说应该有200个任务。每个文件夹都应该由一个映射器读取


如何处理多个文件夹?

据我所知,您有两个问题:

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

答:您可以在此场景中使用
CombineFileInputFormat
。它将为指定的
路径过滤器
对文件进行分组(在您的情况下,过滤器应接受相同文件夹的文件),并将其分配给单个maptask。i、 e,可以实现每个文件夹的映射任务。为了获得更好的控制,请扩展
CombineFileInputFormat
并使其成为您自己的,这就是我在本例中所做的

2:需要通过仅指定根文件夹,将子文件夹中的文件也包括在内,作为映射任务的输入

答:在新的API版本中,
FileInputFormat
可以从其子文件夹递归获取文件,直至任何级别。 有关更多信息,请参见jira


或者,如果您想自己做,可以子类化
FileInputFormat
并重写
listStatus
方法。

每个文件夹都应该由一个映射器读取?你为什么需要它?看起来很不自在,你描述的工作想要完成的更具体,也许你问的是B,但实际上想要AOkay。我需要在单个文件中为每个文件夹提取和写入Xpath值。所以总共应该有200个输出文件No。。如果我为每个xml创建一个映射器,那么将有大约20万个映射器,这将降低性能。我没有任何子目录。你能给我一些代码示例吗?你介意看看CombineInputFromat[link]()的源代码吗?它将告诉你如何将每个文件夹中的文件输入到每个映射任务中。你最好做一个它的子类。