作者ledia (下班後才下棋)
看板Cloud
標題Re: MapReduce (Re: [情報] 利用智慧型手機建構雲端
時間Fri Aug 20 10:16:03 2010
※ 引述《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)
1F:推 hilorrk:是不是類似inverted index的作法? 08/20 10:27
2F:→ yauhh:我沒有要file indexing.不過你提了一件相當好的概念,worker 08/20 11:09
3F:→ yauhh:每次執行起來是主動從queue中取一項工作消化掉. 08/20 11:09
4F:→ yauhh:你的方法仍有基本的問題,就是同一份程式多個"mapper"同時去 08/21 11:49
5F:→ yauhh:拿資料,就會要彼此一致化. 程式又變難寫了. 而這個問題就是 08/21 11:49
6F:→ yauhh:MapReduce打算要避開的. MapReduce是程式一定要好寫才行. 08/21 11:50
7F:→ ledia:我說的這些東西 (such as MQ) 都是現成的, 不知道有什麼麻煩 08/23 19:12
8F:→ ledia:建議你多看看, 再評論 XD 08/23 19:13
9F:→ yauhh:我認為就你所講的,你並沒有多看看喔. 才建議你多看看. 08/23 19:50
10F:→ yauhh:你MQ當然沒問題,問題是在你的程式啊,你要不要做鎖定?一定要 08/23 19:51
11F:→ yauhh:另外,既然MQ是現成,沒麻煩,那你以為我不知道MQ是什麼東西嗎? 08/23 19:53
12F:→ yauhh:而且我覺得,目前是想要談MapReduce該怎麼作,然而你卻回答 08/23 19:55
13F:→ yauhh:普通的非MapReduce.這樣談有什麼好處? 任何好架構,你都一個 08/23 19:56
14F:→ yauhh:大絕招就把它打翻,那什麼都不用談了. 可你不談沒關係,不要都 08/23 19:56
15F:→ yauhh:只用你的想法來堵住別人也來討論的機會. 就我所看,你所講的 08/23 19:57
16F:→ yauhh:其實我也知道. 可是跟你講分散系統要分配資源,你竟然聽不懂? 08/23 19:58
17F:→ yauhh:那就表示是你應該要多加油. 08/23 19:58
18F:→ yauhh:...嗯,上面我有講錯,或許鎖定是用MQ作到,不過,問題發生在另 08/23 20:05
19F:→ yauhh:一面.本來MapReduce是講分散,結果你跑出一個MQ,又把計算給 08/23 20:06
20F:→ yauhh:集中了. 雖然是可以分好幾個map各自算,但是你MQ讓這些map依 08/23 20:06
21F:→ yauhh:序排隊,結果問題又回來了! 我想,請你別雞同鴨講了吧 08/23 20:07
22F:→ ledia:哈哈, 送資料為什麼要用到 MapReduce, 你這才是誤用 08/23 23:45
23F:→ ledia:資料分出去自然 mapper 就可以做自己的運算 08/23 23:46
24F:→ ledia:要我多跟你一點講一些是可以, 可不可以態度好一點 08/23 23:47
25F:→ ledia:懶得跟你說了, 自己慢慢摸吧~ 08/23 23:49
26F:→ hilorrk:@@ 兩位前輩請息怒... 08/24 00:16
27F:→ hilorrk:就我所知 google的MapReduce並沒有送"資料"吧~ 08/24 00:16
28F:→ hilorrk:而是master assign map/reduce task給worker 而worker再去 08/24 00:17
29F:→ hilorrk:DFS取資料...所要傳輸的是程式的fork? 08/24 00:18
30F:→ hilorrk:而且採取的是類似master去polling 而非worker主動要工作? 08/24 00:21
31F:→ hilorrk:不知這樣理解對不對...改天要來好好研究一下了- -|| 08/24 00:21
32F:→ yauhh:ledia你的習慣是一點都不承認你犯過的錯誤.這一點都不意外. 08/24 03:27
33F:→ yauhh:你懶得說真是最好哦. 因為你推文跟回文真的是雞同鴨講而已. 08/24 03:29
34F:→ yauhh:hilorrk,你說的第一句話有錯誤.請以分散式的範圍思考環境, 08/24 03:30
35F:→ yauhh:環境中存在多少個map的instances,多少個reduce的instances. 08/24 03:30
36F:→ yauhh:最少,每個map都要知道它該讀哪個檔案分段,而根據map的規格, 08/24 03:31
37F:→ yauhh:---- 文太長,回文! 08/24 03:32