2009-06-02 50 views
7

我一直在尋找MapReduce一段時間,它似乎是一個實現容錯分佈式計算的好方法。我閱讀了大量有關該主題的論文和文章,在一系列虛擬機上安裝了Hadoop,並進行了一些非常有趣的測試。我真的認爲我瞭解地圖和縮小步驟。MapReduce是如何分析http服務器日誌的好方法?

但是,這是我的問題:我不明白它如何可以幫助HTTP服務器日誌分析。

我的理解是,大公司(例如Facebook)使用MapReduce來計算他們的http日誌,以加快從這些中抽取受衆統計數據的過程。我工作的公司雖然比Facebook小,但每天都有大量網絡日誌來計算(100Go每月增長5%到10%)。現在我們在一臺服務器上處理這些日誌,並且它工作得很好。但是,即時分發計算作業是一個即將開始的有用優化。

這裏是我現在不能回答的問題,任何幫助將不勝感激:

  • 能MapReduce的概念真正被應用到網絡日誌分析?
  • MapReduce是最聰明的做法嗎?
  • 如何在各種計算實例之間拆分Web日誌文件?

謝謝。
薩科

回答

16

MapReduce概念真的可以應用於Weblogs分析嗎?

是的。

你可以將你的hudge日誌文件分成10,000或1,000,000行(對於你的日誌文件類型來說是一個很好的塊 - 對於apache日誌文件我會選擇一個更大的數目),將它們提供給一些mapper提取特定的內容(如瀏覽器,IP地址,...,用戶名,...),從每個日誌行,然後通過計算時代每一個出現)的數量(簡體減少:

192.168.1.1,FireFox x.x,username1 
    192.168.1.1,FireFox x.x,username1 
    192.168.1.2,FireFox y.y,username1 
    192.168.1.7,IE 7.0,username1 

您可以提取瀏覽器,無視版本,使用地圖操作來獲得這個名單:

FireFox 
FireFox 
FireFox 
IE 

然後降低到得到這個: 火狐,3 IE,1

是MapReduce的做的最聰明的方式?

這很聰明,但你需要非常大才能獲得任何好處......分割PETABYTES的原木。

爲了做到這一點,我寧願使用消息隊列和一致的存儲引擎(如數據庫)來處理客戶端,這些客戶端從隊列中提取工作,執行作業並將結果推送到另一個隊列,在一段時間內沒有執行任務供其他人處理。這些客戶端將是一些小程序,可以做一些特定的事情

您可以從1個客戶端開始,然後擴展到1000 ...您甚至可以在局域網上的所有PC上運行客戶端作爲屏幕保護程序,並在8核服務器上運行8個客戶端,你的雙核電腦......

隨着拉:你可以有100或10個客戶端的工作,多核機器可以有多個客戶端運行,並且任何客戶端完成將可用於下一步。你不需要做任何散列或分配工作。這是100%的動態。

http://img355.imageshack.us/img355/7355/mqlogs.png

你會如何分割各種計算實例之間的Web日誌文件?

按元素或行的數量(如果它是基於文本的日誌文件)。

爲了測試MapReduce,我想建議您使用Hadoop。

+1

首先,對於延遲抱歉。 非常感謝您的高質量答案。它有很大幫助! – Nicolas 2009-06-11 10:01:39

1
  • 能MapReduce的概念真正被應用到網絡日誌分析?

當然。你存儲什麼樣的數據?

  • MapReduce是最聰明的做法嗎?

它可以讓你一次查詢多個商品機器,所以是的,它可以是有用的。或者,您可以嘗試Sharding

  • 如何在各種計算實例之間拆分Web日誌文件?

通常情況下,您將使用consistent hashing algorithm分發您的數據,以便您稍後可以輕鬆地添加更多實例。你應該在任何一個普通的數據庫中作爲你的主鍵來散列。它可能是一個用戶ID,一個IP地址,引用者,頁面,廣告;無論您的日誌記錄的主題是什麼。

+0

在這裏你可以找到一致哈希的一個很好的解釋:http://michaelnielsen.org/blog/?p=613 – tuinstoel 2009-07-24 18:38:21

相關問題