【问题标题】:Parsing large XML to TSV将大型 XML 解析为 TSV
【发布时间】:2012-02-24 07:05:41
【问题描述】:

我需要将几个 XML 解析为 TSV,XML 文件的大小约为 50 GB,我基本上怀疑我应该选择解析这个的实现我有两个选项

  1. 使用 SAXParser
  2. 使用 Hadoop

我对 SAXParser 实现有一定的了解,但我认为可以访问 Hadoop 集群,我应该使用 Hadoop,因为这就是 hadoop 的用途,即大数据

如果有人可以提供一个提示/文档,说明如何在 Hadoop 中执行此操作,或者为如此大的文件提供高效的 SAXParser 实现,或者我应该为 Hadoop 或 SAXparser 做什么,那就太好了?

【问题讨论】:

    标签: hadoop xml-parsing saxparser bigdata


    【解决方案1】:

    我经常在 Hadoop 中处理大型 XML 文件。我发现它是最好的方法(不是唯一的方法……另一种是编写 SAX 代码),因为您仍然可以以类似 dom 的方式对记录进行操作。

    对于这些大文件,要记住的一件事是,您肯定希望在映射器输出上启用压缩:Hadoop, how to compress mapper output but not the reducer output... 这会加快速度。

    我已经写了一个关于我如何处理这一切的简要概述,也许它会有所帮助:http://davidvhill.com/article/processing-xml-with-hadoop-streaming。我使用 Python 和 Etrees,这让事情变得非常简单......

    【讨论】:

      【解决方案2】:

      我不了解 SAXparser。但是,如果您有一个具有足够数据节点的 hadoop 集群,Hadoop 肯定会完成您的工作。 50Gb 不算什么,因为我在集群上对超过 300GB 的数据执行操作。用java写一个map reduce作业,hadoop的文档可以在http://hadoop.apache.org/找到

      【讨论】:

        【解决方案3】:

        在 hadoop 上通过每个 XML 文件有一个映射器来处理 XML 相对来说是微不足道的。这种方法适用于大量相对较小的 XML

        问题在于,在您的情况下,文件很大并且数量很小,因此不拆分 hadoop 的好处将受到限制。考虑到hadoop的开销,好处是负面的...... 在 hadoop 中,我们需要能够将输入文件拆分为逻辑部分(称为拆分)以有效地处理大文件。 一般来说,XML 看起来不像“可拆分”格式,因为没有明确定义的块划分,可以独立处理。同时,如果 XML 中包含“记录”,则可以实现某种拆分。
        关于在 haoop 中拆分 XML 的好讨论在这里: http://oobaloo.co.uk/articles/2010/1/20/processing-xml-in-hadoop.html 建议使用 Mahout 的 XML 输入格式。

        关于您的情况-我认为只要您的文件数量不大于单个系统上的核心数量-hadoop 将不是有效的解决方案。
        同时——如果你想随着时间的推移积累它们——你也可以从作为可扩展存储的 hadoop 中获益。

        【讨论】:

          【解决方案4】:

          我认为 SAX 传统上被错误地与处理大型 XML 文件联系在一起......实际上,VTD-XML 通常是最佳选择,在性能、灵活性、代码的可读性和可维护性……在内存问题上,VTD-XML的内存模型只有对应XML文档大小的1.3x~1.5X。

          与 SAX 相比,VTD-XML 有另一个显着优势:其无与伦比的 XPath 支持。正因为如此,VTD-XML 用户通常报告说,与 SAX 解析数百 MB XML 文件相比,性能提高了 10 到 60 倍。

          http://www.infoq.com/articles/HIgh-Performance-Parsers-in-Java#anch104307

          阅读这篇全面比较Java中现有XML解析框架的论文。

          http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf

          【讨论】:

            猜你喜欢
            • 2021-01-21
            • 2012-07-14
            • 1970-01-01
            • 2017-10-30
            • 1970-01-01
            • 2011-05-09
            • 2014-06-15
            • 2013-01-17
            • 2018-09-23
            相关资源
            最近更新 更多