Q:
有一批數據(10億量級),數據內容包括:
列
類型
id
INT
content
String
id為key,全局唯一
content為一個句子
列之間以\t分割
like:
1 “互聯網夠公司的日志無處不在,web日志,js日志,搜索日志,監控日志等等”
2 "對於這些日志的離線分析(Hadoop),wget&rsync雖然人力維護成本較高,但可以滿足功能行需求。但對於這些日志的實時分析需求(例如實時推薦,監控系統),則往往必須要引入一些“高大上”的系統"
計算每行數據的content和其他數據content的相似度
A:
兩輪MapReduce:
第一輪:
按照一定規則分割content,並以分割後的content內容為key,value為id,reduce階段對value做排序後兩兩輸出,實例如下:
原始數據:
10X
20Y
30Z
假設X可以分割為A、B、C, Y可以分割為A、C、D, Z可以分割為A、D
則第一輪mapper的輸出為:
<A,10>
<B,10>
<C,10>
<A,20>
<C,20>
<D,20>
<A,30>
<D,30>
使用分割後的content做key
reducer的輸入為:
A{10,20,30}
B{10}
C{10,20}
D{10}
reduce計算邏輯:對value組按大小排序,排序後按序兩兩輸出,組大小為1的不輸出
reducer輸出為
10,20 ----from A {10,20,30}
10,30 ----from A {10,20,30}
20,30 ----from A {10,20,30}
10,20 ----from C{10,20}
第二輪map-reduce:
對第一輪輸出的數據做聚合,value為出現次數
10,202
10,301
20,301