我有存儲在文件系統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網址
- 脈譜圖唯一的工作(即去除WWW,HTTP://從URL字段://和https)
- 一個地圖這對URL進行排序tbl_websites -only工作
- 的身份映射簡化工作,這需要2個以前的工作作爲KeyValueTextInput的輸出,爲了將它們送至一個CompositeInput利用與
jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
定義Hadoop本地連接特徵的
- 一個Map和Reduce作業,它在前一個作業的結果中對總點擊次數> n進行過濾,將結果分組n在混洗階段,並在Reduce階段對每個用戶的網站數量進行計數。
爲了鏈這些步驟,只需要調用作業順序中所描述的順序的。每個單獨的作業都會將其結果輸出到HDFS,然後鏈中的以下作業將依次進行檢索和處理。
由於我是新來的Hadoop,我想問一下您的諮詢:
- 是否有鏈這些工作更好的辦法?在此配置中,所有中間結果都寫入HDFS,然後回讀。
- 你是否看到這份工作有任何設計缺陷,或者可以通過使用我已經錯過的一些Hadoop功能來更優雅地編寫它?
我使用Apache Hadoop的0.20.2,並使用更高級別的框架,如豬或蜂房是不可能在項目的範圍。
在此先感謝您的答覆!
該算法的意圖是什麼?是否要查找每個用戶訪問的網站數量,因爲該網站的總點擊次數> n?另外,你能澄清這個問題應該是什麼嗎?您是否正在尋找一個工作流程管理工具(如oozie,由另一張海報推薦)還是您正在尋找特定工作流程的驗證? – 2012-02-27 23:41:52
@Pradeep Gollakota:是的,這項工作的目標是爲每個用戶找到他訪問過的總點擊量> n的網站數量。我不在尋找任何管理工具(儘管我會看看Oozie,看起來很有前途),但我只是在尋找對我的特定工作流程和設計的驗證。我的問題尤其是:您如何使用_only plain Hadoop_設計此工作流程? – Namux 2012-02-28 09:01:04