2012-02-27 53 views
0

我有存儲在文件系統HDFS 2個文件:你在一個Hadoop MapReduce工作的意見

  • tbl_userlog:<website url (non canonical)> <tab> <username> <tab> <timestamp>

    • 例如:www.website.com,foobar87,201101251456
  • tbl_websites:<website url (canonical)> <tab> <total hits>

    • 例如:website.com,25889

我已經寫的連接本網站上的2檔的作業序列的Hadoop,執行對總點擊量的過濾器>每網站n和然後爲每個用戶計算他訪問過的網站總數> n總點擊數。該序列的細節如下:這canonicizes在tbl_userlog網址

  1. 脈譜圖唯一的工作(即去除WWW,HTTP://從URL字段://和https)
  2. 一個地圖這對URL進行排序tbl_websites -only工作
  3. 的身份映射簡化工作,這需要2個以前的工作作爲KeyValueTextInput的輸出,爲了將它們送至一個CompositeInput利用與jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
  4. 定義Hadoop本地連接特徵的
  5. 一個Map和Reduce作業,它在前一個作業的結果中對總點擊次數> n進行過濾,將結果分組n在混洗階段,並在Reduce階段對每個用戶的網站數量進行計數。

爲了鏈這些步驟,只需要調用作業順序中所描述的順序的。每個單獨的作業都會將其結果輸出到HDFS,然後鏈中的以下作業將依次進行檢索和處理。

由於我是新來的Hadoop,我想問一下您的諮詢:

  1. 是否有鏈這些工作更好的辦法?在此配置中,所有中間結果都寫入HDFS,然後回讀。
  2. 你是否看到這份工作有任何設計缺陷,或者可以通過使用我已經錯過的一些Hadoop功能來更優雅地編寫它?

我使用Apache Hadoop的0.20.2,並使用更高級別的框架,如豬或蜂房是不可能在項目的範圍。

在此先感謝您的答覆!

+0

該算法的意圖是什麼?是否要查找每個用戶訪問的網站數量,因爲該網站的總點擊次數> n?另外,你能澄清這個問題應該是什麼嗎?您是否正在尋找一個工作流程管理工具(如oozie,由另一張海報推薦)還是您正在尋找特定工作流程的驗證? – 2012-02-27 23:41:52

+0

@Pradeep Gollakota:是的,這項工作的目標是爲每個用戶找到他訪問過的總點擊量> n的網站數量。我不在尋找任何管理工具(儘管我會看看Oozie,看起來很有前途),但我只是在尋找對我的特定工作流程和設計的驗證。我的問題尤其是:您如何使用_only plain Hadoop_設計此工作流程? – Namux 2012-02-28 09:01:04

回答

0

我覺得你有什麼將與一些警告工作。在我開始列出它們之前,我想明確兩個定義。只有地圖的作業是一個具有定義的Mapper的作業,並且具有0個縮減器的run。如果作業使用> 0 IdentityReducers運行,那麼作業不是純地圖作業。Reduce only作業是一個定義了Reducer的作業,並且使用IdentityMapper運行。

  1. 您的第一份工作可以是純地圖工作,因爲您所做的只是對網址進行規範化。但是如果你想使用CompositeInputFormat,你應該使用一個IdentityReducer來運行多於0的reducer。
  2. 對於你的第二份工作,我不知道你是什麼意思的地圖專業工作。按照它的性質排序是一個減少的任務。你可能意味着它有一個定義的映射器,但沒有Reducer。但爲了對URL進行排序,您應該使用超過0個Reducer的IdentityReducer運行。
  3. 你的第三份工作是一個有趣的想法,但你必須小心CompositeInputFormat。爲了能夠使用這種輸入格式,必須滿足兩個條件。第一個是在兩個輸入目錄中必須有相同數量的文件。這可以通過爲Job1和Job2設置相同數量的減速器來實現。第二個條件是輸入文件不能被分割。這可以通過使用不可拆分的壓縮(如bzip)來實現。
  4. 這份工作發佈聽起來不錯。儘管您可以過濾前一個作業的縮減器中的網址,併爲自己節省一些I/O。

顯然有不止一個解決方案的軟件問題,所以雖然你的解決方案將工作,我不會推薦它。對於這項任務有4個MapReduce工作是有點貴的恕我直言。我想到的實現是使用Secondary Sort的M-R-R工作流程。

+0

您好@Pradeep,感謝您的詳細解釋。我花了一些時間重新思考這項工作,並提出了一個解決方案,包含2個Map + _r_ IdentityReducers作業(一個用於canonicizig url和排序用戶,另一個用於過濾總點擊和排序網站)以及1個Map + Reduce作業,使用CompositeInputFormat 。 我對你的M-R-R +二級排序實現感興趣,你能詳細一點嗎? – Namux 2012-03-05 09:47:05

0

就鏈式作業而言,你應該看看Oozie,這是一個工作流程管理器。我還沒有使用它,但那是我開始的地方。

+0

感謝您的回答,我會看看Oozie。但我的要求是使用普通的Hadoop實現此工作流程。你看到任何可以優化的東西嗎? – Namux 2012-02-28 09:17:27