java—用storm并行处理wikipedia的xml数据转储

2nc8po8w  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(458)

我正在处理维基百科的垃圾。尤其是文件-enwiki-latest-pages-articles-multistream.xml.bz2。这是大约46gb未压缩。我目前正在使用java(xerces)中的stax解析器,能够每秒提取15k个页面元素。然而,瓶颈似乎是解析器,我曾玩弄过aalto-xml,但它没有帮助。
因为我正在分析storm spout中的每个页面元素,所以这是一个瓶颈。然而,我想我可以简单地发出文本之间。。。标记并有几个螺栓并行处理这些页面元素中的每一个。这将减少雨水口必须执行的工作量。然而,我不确定在这里采取的具体方法。如果我使用解析器来提取标签之间的内容,那就意味着它将从标签的开始到结束解析每个元素。有没有办法消除标准sax/stax解析器中的这种开销?

dojqjjoe

dojqjjoe1#

没有办法对xml文档进行随机访问,但是许多javaxml解析器跳过未使用的内容的效率更高:例如aalto和woodstox延迟了字符串值的解码(以及 String 对象),因此如果跳过令牌,则不需要分配。
有一件事要确保与斯塔克斯是不使用 Event api,除非有缓冲内容的特殊需要——它不提供比基本流式api更多的功能( XMLStreamReader ),但由于 XMLEvent 无论是否需要,它都是构造的。另一方面,流式api只指示事件/令牌的类型,让调用者决定是否需要内容(属性、文本值),并且可以避免大多数对象分配。

yrdbyhpb

yrdbyhpb2#

我也试过类似的方法来并行化。
不管怎样,由于我在很多任务中使用wikipedia数据,只需生成一篇文章就可以了,这样我就可以并行运行许多实验了。它只需要几分钟运行,然后我有一个转储,我可以饲料Spark(在你的情况下风暴)非常容易。
如果您想使用我们的工具,请检查:https://github.com/idio/wiki2vec

相关问题