【问题标题】:Processing XML with Hadoop MapReduce使用 Hadoop MapReduce 处理 XML
【发布时间】:2014-12-17 06:47:46
【问题描述】:

我想加载和解析一些 PB 的 XML 数据。在对如何在 hadoop 中处理 XML 进行了大量研究之后,我了解到 XML 必须在 Map Reduce 中作为整个文件进行处理。

如果我将整个 XML 作为单个输入拆分提供给我的 Map Reduce,那么它将不会利用 hadoop 的分布式和并行处理功能,因为只有一个 Mapper 会进行处理。

我的理解正确吗?如何克服这个问题?

请推荐

【问题讨论】:

    标签: xml hadoop xml-parsing mapreduce


    【解决方案1】:

    您可以尝试使用 Mahout 的 XMLInputFormat。 XMLInputFormat 负责使用指定的开始和结束标记来确定 XML 输入文件中的记录边界。

    您可以使用link 作为参考,了解如何使用 XMLInputFormat 解析您的 XML 文件。

    【讨论】:

    • 我怀疑如果我将 XML 放在 hadoop 中,它会被分发吗?如果是,那么它将如何处理?
    • 是的,将 XML 的文件放入 hadoop 将根据块大小进行分配。根据块大小,XML 文件将在 DataNode 之间进行拆分和分发。使用 MapReduce 进行处理时,您必须注意找出 record boundaries 以确保正确处理所有 XML 记录,即使记录被拆分为多个 HDFS 块,因为您可以使用 Mahout 的 XMLInputFormat。
    • 抱歉只是想确认一下..你的意思是要启动多个映射器来解析 XML ?
    • 是的。将根据您的输入拆分启动多个映射器。
    • 目前我正在运行一个 MapReduce 代码来解析 XML 它在输出目录中创建 23 个部分文件,为了避免这种情况,我将不得不使用 XmlInputFormat 而不是 TextInputFormat 对吗?如果我使用 XmlInput 格式,那么整个 XML 将在一个输入拆分中,或者它也将有多个输入拆分和多个映射器
    【解决方案2】:

    如果您有一个大小为 PB 的 XML 数据块,那么您就有问题了。您更有可能拥有数百万或数十亿条单独的 XML 记录。如果是这种情况,您有一个相当简单的方法:创建数百万个大小与 HDFS 系统的块大小大致相同(略小一点)的 XML 文件。然后编写一组 MapReduce 作业,其中第一个映射器提取 XML 数据并输出任何有用的 (name,value) 对,reducer 从需要关联的各种 XML 文件中收集所有不同的 (name) 对。

    如果 XML 数据集随时间变化,您可能希望查看对流数据集的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2019-01-20
      相关资源
      最近更新 更多