我想加载和解析一些PB级的XML数据。在对如何在Hadoop中处理XML进行了大量研究之后,我开始知道XML必须在Map Reduce中作为整个文件进行处理。
如果我将整个XML作为单个输入拆分到我的Map Reduce,那么它将不会利用hadoop的分布式和并行处理功能,因为只有一个映射器将进行处理。
我理解正确吗?如何克服这个问题?
请建议
你可以尝试使用Mahout的XMLInputFormat。XMLInputFormat 负责使用指定的开始和结束标记来确定 XML 输入文件中的记录边界。
您可以使用此链接作为有关如何使用 XMLInputFormat 解析 XML 文件的参考。
如果你有一个 PB 大小的 XML 数据块,你就有问题了。您更有可能拥有数百万或数十亿条单独的 XML 记录。如果是这种情况,你有一个相当简单的方法:创建数百万个XML文件,这些文件的大小与HDFS系统的块大小大致相同(略小)。然后编写一组MapReduce作业,其中第一个映射器提取XML数据并输出任何有用的(名称,值)对,并且化简器从需要关联的各种XML文件中收集所有不同的(名称)对。
如果 XML 数据集随时间而变化,您可能希望查看对流式处理数据集的支持。