2011-07-17 30 views
6

我正在使用Hadoop Map Reduce来研究维基百科数据转储(以bz2格式压缩)。由于这些转储非常大(5T),我无法将xml数据解压缩到HDFS中,只能使用hadoop提供的StreamXmlRecordReader。 Hadoop确实支持解压缩bz2文件,但它可以任意分割页面并将其发送给映射器。因为这是xml,所以我们需要分割为一个标签。反正有用hadoop提供的内置bz2解压缩和流xml记录读取器吗?如何读取压缩bz2(bzip2)维基百科转储到流xml记录读取器的hadoop映射减少

+0

为什么需要按标签拆分页面? – svick

+0

我们希望它们能被标签拆分,以便能够在python中使用解析器来获取我们需要分析的数据(我们将对以前的修订和所有页面的文本进行不同类型的分析)。 –

+0

通过拆分标签将不可行,因为有很多页面长度超过100Gb。查看我关于刚刚发布的InputReader的完整答案。 – DrDee

回答

0

您的问题与描述的here相同。所以我的答案也是一样的你应该在TextInputFormat上创建你自己的变体。在那里你创建一个新的RecordReader,它跳过行,直到它看到一条逻辑行的开始。

7

维基媒体基金会刚刚发布了Hadoop Streaming接口的InputReader,它能够读取bz2压缩的完整转储文件并将其发送给您的映射器。发送给映射器的单位不是整个页面,而是两个修订版本(因此您可以在两个修订版本上实际运行差异)。这是最初的版本,我相信会有一些错误,但请给它一个旋转并帮助我们测试它。

该InputReader需要Hadoop 0.21,因为Hadoop 0.21支持bz2文件的流式传输。源代码位于:https://github.com/whym/wikihadoop