【发布时间】:2014-10-19 00:52:21
【问题描述】:
我正在尝试处理找到here 的维基百科转储。特别是文件 - enwiki-latest-pages-articles-multistream.xml.bz2。这大约是 46GB 未压缩。我目前在 Java (xerces) 中使用 STAX 解析器,并且能够每秒提取 15K 页面元素。然而,瓶颈似乎是解析器,我玩弄了 aalto-xml,但它没有帮助。
由于我在 Storm spout 中解析每个页面元素,因此这是一个瓶颈。但是,我认为我可以简单地在 ... 标签之间发出文本,并让几个螺栓并行处理每个页面元素。这将减少 Storm spout 必须执行的工作量。但是,我不确定在这里采取的具体方法。如果我使用解析器来提取标签之间的内容,那么这意味着它将解析从标签开头到结尾的每个元素。有没有办法在标准 SAX/STAX 解析器中消除这种开销?
【问题讨论】:
-
我不知道怎么可能。为了知道你想要原始 XML 的标签已经关闭,我认为它需要解析里面的所有 XML 内容。否则,它遇到的结束标记可能与您实际想要的结束标记不明确,而另一个由于引入的命名空间而受到影响,例如似乎要实现这一点需要通常不安全的假设,这可能只能应用于特定情况。
-
Xerces不是 Stax 解析器;也许您正在考虑 SAX?至于使用阿尔托;因为它的速度至少是 Xerces 的 2 倍,如果你没有观察到变化,你可能会错误地使用它(比如不重用XMLInputFactory——创建这些是非常昂贵的),或者瓶颈可能不在 XML 解析中和/还是一代?
标签: java xml bigdata apache-storm