如何处理在Hadoop中的多个文件夹(How to Process multiple folders

2019-10-19 06:04发布

我有以下问题。 我有20万个的XML文件。 我有200个文件夹和每个文件夹具有2000的XML文件。 我有这个在我的HDFS。 体系结构如下

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

我需要写一个映射程序来读取这些文件,并做一些Xpath的过程。

如果我给RootFolder输入路径则映射器应阅读的文件夹和处理XML文件

这是应该有200任务。 而每个文件夹应该由一个单一的映射器读取

如何处理多个文件夹?

Answer 1:

从我的理解,你有2个问题:

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

答:您可以利用CombineFileInputFormat对于这种情况。 它将为一组指定的文件PathFilter (在你的情况下,过滤器应该接受同一文件夹中的文件),并将其分配给单个maptask。 即,每个文件夹maptask可以实现的。 为了得到更好的控制,请延长CombineFileInputFormat和使你自己,这就是我在我的情况下做的。

2:需要包括子文件夹内的文件也作为地图的任务(S)输入,通过指定唯一的根文件夹。

答:在新的API发布, FileInputFormat可以递归及其子文件夹取得文件到任何水平。 欲了解更多信息,你可以看到JIRA 这里 。

或者,如果你想自己,子类做FileInputFormat并覆盖listStatus方法。



文章来源: How to Process multiple folders in HADOOP