2011-07-17 58 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