看板 Cloud 關於我們 聯絡資訊
※ 引述《yauhh (喲)》之銘言: : 我想MapReduce是個model,不一定有個完整的底層平台. : 既然是programming model,有可能從一開始寫程式就可以順著這個心法做. : 從檔案文件處理出發,首先要從檔案系統取得檔案清單. 這是map: : TakeFiles(folder, nil): : for each file in dir(folder), : emit(file, nil). : 可以叫好幾台電腦分別處理不同的目錄,把檔案抓出來. : 檔案名字變成許多小片段,送到master node或是一些groupper. : 接著,要把檔案和詞彙配對,好觸發每一個文件詞彙搜集的map工作. : 假設詞彙的數目可以容許一個工作做完,將檔案與詞彙配對的工作是一個reduce: : Pair(file, terms): : for each term in terms, : FindTerm(file, term). : FindTerm是個map: : FindTerm(file, term): : for each word in content(file), : if (word = term), : emit(term, 1). : 有何指教? 我提供一個很 naive 的做法 cralwer 們每抓到一個檔案, 或一個網頁 就把這筆資料依照自己的格式存進 DFS 並且把 (key:content_position) 發給 MQ server 而 indexer 的 mapper 每次從 MQ server 拿一筆資料 (這裡不需要 MapReduce) 之後每次 mapper 拿到一筆資料 IndexFileMapper(file): for each term in tokenizer(file), emit(term, file). IndexFileReducer(term, file_list): StoreToIndexDb(term, uniq(sort(file_list))). -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.51 ※ 編輯: ledia 來自: 140.112.30.51 (08/20 10:16) ※ 編輯: ledia 來自: 140.112.30.51 (08/20 10:18)
hilorrk:是不是類似inverted index的作法? 08/20 10:27
yauhh:我沒有要file indexing.不過你提了一件相當好的概念,worker 08/20 11:09
yauhh:每次執行起來是主動從queue中取一項工作消化掉. 08/20 11:09
yauhh:你的方法仍有基本的問題,就是同一份程式多個"mapper"同時去 08/21 11:49
yauhh:拿資料,就會要彼此一致化. 程式又變難寫了. 而這個問題就是 08/21 11:49
yauhh:MapReduce打算要避開的. MapReduce是程式一定要好寫才行. 08/21 11:50
ledia:我說的這些東西 (such as MQ) 都是現成的, 不知道有什麼麻煩 08/23 19:12
ledia:建議你多看看, 再評論 XD 08/23 19:13
yauhh:我認為就你所講的,你並沒有多看看喔. 才建議你多看看. 08/23 19:50
yauhh:你MQ當然沒問題,問題是在你的程式啊,你要不要做鎖定?一定要 08/23 19:51
yauhh:另外,既然MQ是現成,沒麻煩,那你以為我不知道MQ是什麼東西嗎? 08/23 19:53
yauhh:而且我覺得,目前是想要談MapReduce該怎麼作,然而你卻回答 08/23 19:55
yauhh:普通的非MapReduce.這樣談有什麼好處? 任何好架構,你都一個 08/23 19:56
yauhh:大絕招就把它打翻,那什麼都不用談了. 可你不談沒關係,不要都 08/23 19:56
yauhh:只用你的想法來堵住別人也來討論的機會. 就我所看,你所講的 08/23 19:57
yauhh:其實我也知道. 可是跟你講分散系統要分配資源,你竟然聽不懂? 08/23 19:58
yauhh:那就表示是你應該要多加油. 08/23 19:58
yauhh:...嗯,上面我有講錯,或許鎖定是用MQ作到,不過,問題發生在另 08/23 20:05
yauhh:一面.本來MapReduce是講分散,結果你跑出一個MQ,又把計算給 08/23 20:06
yauhh:集中了. 雖然是可以分好幾個map各自算,但是你MQ讓這些map依 08/23 20:06
yauhh:序排隊,結果問題又回來了! 我想,請你別雞同鴨講了吧 08/23 20:07
ledia:哈哈, 送資料為什麼要用到 MapReduce, 你這才是誤用 08/23 23:45
ledia:資料分出去自然 mapper 就可以做自己的運算 08/23 23:46
ledia:要我多跟你一點講一些是可以, 可不可以態度好一點 08/23 23:47
ledia:懶得跟你說了, 自己慢慢摸吧~ 08/23 23:49
hilorrk:@@ 兩位前輩請息怒... 08/24 00:16
hilorrk:就我所知 google的MapReduce並沒有送"資料"吧~ 08/24 00:16
hilorrk:而是master assign map/reduce task給worker 而worker再去 08/24 00:17
hilorrk:DFS取資料...所要傳輸的是程式的fork? 08/24 00:18
hilorrk:而且採取的是類似master去polling 而非worker主動要工作? 08/24 00:21
hilorrk:不知這樣理解對不對...改天要來好好研究一下了- -|| 08/24 00:21
yauhh:ledia你的習慣是一點都不承認你犯過的錯誤.這一點都不意外. 08/24 03:27
yauhh:你懶得說真是最好哦. 因為你推文跟回文真的是雞同鴨講而已. 08/24 03:29
yauhh:hilorrk,你說的第一句話有錯誤.請以分散式的範圍思考環境, 08/24 03:30
yauhh:環境中存在多少個map的instances,多少個reduce的instances. 08/24 03:30
yauhh:最少,每個map都要知道它該讀哪個檔案分段,而根據map的規格, 08/24 03:31
yauhh:---- 文太長,回文! 08/24 03:32