2010-05-21 41 views
9

嘿,剛開Hadoop和好奇在MapReduce的最好的辦法是,如果你的日誌文件看起來像這樣來算獨立訪問者開始......使用Hadoop來計算獨特訪客的最佳方式是什麼?

DATE  siteID action username 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview tom 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview bob 
05-05-2010 siteA pageview mike 

和你想找出每個站點每個站點的唯一訪問者?

我在想映射器會發出siteID \ t用戶名 ,並且reducer會保留每個key的set()唯一用戶名,然後發出該set的長度。但是,這可能會將數百萬用戶名存儲在內存中,這似乎不正確。任何人都有更好的方法?

我使用python流的方式

感謝

回答

3

你可以做它作爲一個2級操作:

第一步,發出(username => siteID),並有減速的崩潰只是多使用set發生siteID - 因爲您的網站通常遠少於用戶,所以應該沒問題。

然後在第二步中,您可以發出(siteID => username)並做一個簡單的計數,因爲重複項已被刪除。

1

使用輔助排序對用戶標識進行排序。這樣,您就不需要在內存中存儲任何內容 - 只需將數據流式傳輸,並且每次看到特定站點ID的值更改時都會增加獨特的計數器。

這是一些documentation

1

我的形式給出類似於什麼tzaman給出了與一個較小的扭轉

  1. 地圖輸出:(用戶名,SITEID)=>( 「」)
  2. 減少輸出:(SITEID)=>(1)
  3. 地圖:身份映射
  4. 減少:longsumreducer(即簡單地概括)

注意,第一降低並不需要去通過任何的r ecords被呈現。您可以簡單地檢查關鍵字並生成輸出。

HTH

相關問題