simhash用來進行海量文本近似去重的mapreduce版本

 

其實這個內容和原來的文章是放在一起的,但之前只看了Online版,後來纔看的batch版。發現其實batch版本更有意思且更適用。

online版可以看我博客裏的翻譯:

 

http://blog.csdn.net/lgnlgn/archive/2010/11/14/6008498.aspx

 

簡單介紹一下simhash和mapreduce吧

simhash用來近似計算文本之間的相似度實際上就是考察兩個fingerprint的漢明距離,漢明距離小於閾值的就認爲相似文本。

那麼在海量文本中近似查重問題就是海量指紋中如何快速確定是否存在漢明距離小於閾值的指紋。

online版的算法做了空間與時間的折中,將指紋集複製多份,對待查的指紋在每份集合中 查找出一部分指紋精確相同的一批指紋,然後對這一批指紋挨個檢查漢明距離。複製得越多,挨個檢查的需要就越小。每份指紋集的查詢採用並行的方式提高效率。

 

mapreduce是一個分佈式計算框架,目前網上的介紹也很多了,用最簡單的方式可以描述成:

map: (K1,V1) ➞ list(K2,V2)

reduce: (K2,list(V2)) ➞ list(K3,V3)

 

 

在batch版本中,需要對一批指紋M(比如100萬)在80億個指紋S中進行檢查,

 

100W個指紋約爲8MB,80億個指紋有64G,

海量的指紋集在分佈式文件系統中會被切開成很多份(一般每份64M)

 

mapper中,將M排序,並複製多份,對S進行遍歷,每條指紋按online版的方式進行查重, 如果找到了,就返回M中對應哪條指紋

reduce的時候把這些重複的指紋收集起來就行了

 

由於M並不大 在分佈式系統中分發並不會造成網絡瓶頸,而且M不大 因此可以在內存中複製多份。

 

 整個mapreduce的過程非常簡單~這個算法也算是學習mapreduce的一個好例子了~

 另外simhash這篇論文涉及了查找、壓縮、空間時間折中,是一篇非常值得細讀的文章。

發佈了36 篇原創文章 · 獲贊 27 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章