作者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