作者yauhh (哟)
看板Cloud
标题Re: MapReduce (Re: [情报] 利用智慧型手机建构云端
时间Tue Aug 24 04:09:30 2010
: → hilorrk:@@ 两位前辈请息怒... 08/24 00:16
这情况很正常. 在BBS或mailing-list常有这种严肃讨论.
而我个人经验,mailing-list遇到的讨论对象,比较不会有刁蛮不承认自己犯错的.
: → 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
你说的第一句话有一点错.请以分散式的观点思考系统环境,
环境中存在多少个map的instances,多少个reduce的instances?
最少,每个map都要知道它该读哪个档案分段,而根据map的规格,
map并没有自己包含了判断它要读哪个分段的程式码.
包含了判读正确档案位置的程式,是旧世界的写法. 可以Google寻找一些介绍
MapReduce的投影片,有一些会列出旧的平行程式写法,和MapReduce平行程式写法.
所以接下来你说对了,是master polling. (polling? 其实这个词也不对啊!)
Master必须要整理几种资讯:
1. 要处理的资料有多少档案.
2. 能使用的map worker有多少个.
基本上是把map fork在每个map worker没错.
但是把执行档fork成一些程序就行了吗? 当然不只,而是还要告诉每个程序要读
哪个档案或哪个分段位置(chunk index).
Map worker会执行map,把档案喂进map,然後map丢出一些key-value,是放在
local store; 线上的记忆体可能不足以处理这些突然抛出的key-value.
接下来,reduce会自动理解它要从哪个map读结果吗?
起码也要看map worker和reduce worker是不是一对一对应. 通常不是.
那要怎麽做?
前面说 map 出来的东西是local store的. Reduce worker要拿到map的local store,
如果map worker和reduce worker各在不同的电脑,当然是一些类似档案传输的动作.
根据key-value的规格,是
map(key0, value0) -> {(key,value)} [local store] ->
grouping( {(key,value)} ) ->
(key1,{value1}) [input to reduce] -> reduce(key1, {value1})
中间grouping的客制弹性很大,有些是说map worker做一个map之後的处理,
有些是说把key-value送到一个集中位置处理,也有人说是map worker将key-value
分割,分别送到几个固定的reduce worker那边.
甚至一组工作的定义,可能要有个规格定义明白,哪个map之後要接哪个map/reduce,
哪个reduce要接哪个map/reduce. 并不是只有worker自己知道要从哪里取资料而已.
Worker哪有那麽聪明啊. 分散式系统重要的是讯息沟通.
Map做完了要告诉master,然後master要通知reduce,reduce worker会向map worker
请求资料. 这些概念还蛮简单.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.209.34
1F:推 hilorrk:我知道master必须informed其他worker location of data啦. 08/24 06:28
2F:→ hilorrk:用MapReduce当然就不可能像以前写MPI还要在code里切割分配 08/24 06:29
3F:→ hilorrk:我的意思是..由master传输process和location受限於master 08/24 06:30
4F:→ hilorrk:网路是没办法的吧?相较下来map task从DFS读取大量data及运 08/24 06:31
5F:→ hilorrk:算才是真正的平行所在?(当然还包括reduce) 08/24 06:33
6F:→ hilorrk:至於map worker的grouping及reduce worker的merge要如何实 08/24 06:41
7F:→ hilorrk:现 这又是另一个问题了...确实有看到不少model就是了 08/24 06:42
8F:→ hilorrk:不知我的概念是否还有哪里有需要指正的地方? 08/24 06:58
9F:推 ledia:哈哈, 别担心, 你是对的, 对拒绝学习的人可以不用这麽认真 08/26 09:43
10F:推 ledia:MapReduce 只是云端的一小部份, 如果像某些人想要又拿来传 08/26 09:46
11F:→ ledia:资料, 又拿来解决 synchronization, 还真是浪费了 MapReduce 08/26 09:47
12F:→ ledia:message passing, voting, dynamic routing 等等 08/26 09:50
13F:→ ledia:这些 building block 没概念, 抱着 MapReduce 一直玩, 还说 08/26 09:50
14F:→ ledia:别人不能承认错误 ? 噗哧 XD 08/26 09:51
15F:→ yauhh:hilorrk,文章并没有明确讲由master传一个process出去,事实上 08/26 20:01
16F:→ yauhh:的确不这麽做,因为每一台电脑的Pid不一样. 08/26 20:01
17F:→ yauhh:ledia,我说你啊,你没有指出我有什麽错啊. 我在谈的就是 08/26 20:02
18F:→ yauhh:MapReduce的Framework,而不是特定工作. 是你自己一直把问题 08/26 20:03
19F:→ yauhh:牵到map的层次而已. 你知道我讲mapper是指map master吗? 08/26 20:03
20F:→ yauhh:而我的确指出你的错误,只是你还是要嘴硬不想回一句"抱歉错了 08/26 20:04
21F:→ yauhh:只能说,因为我还关心着MapReduce,所以目前文章还是反覆读, 08/26 20:04
22F:→ yauhh:实作也正在默默进行. 这些过程全都不干你的事. 08/26 20:05
23F:→ yauhh:反正你有MQ server就满意了. 08/26 20:06
24F:→ hilorrk:的确啦..我说传送process不是很严谨 应该是从user的程式 08/26 20:12
25F:→ hilorrk:fork出一个process在worker上~不过也不能用每一台电脑的 08/26 20:12
26F:→ hilorrk:pid不一样来说啦 毕竟一个worker上可能有多个task~ 08/26 20:13
27F:→ hilorrk:我的重点在於 挺好奇y大所说的从master传输(assign?)task 08/26 20:16
28F:→ hilorrk:给map worker时如何作到您所意指的"分散式资源分配" 08/26 20:16
29F:→ hilorrk:就我认知当中 这点的确得依赖於master对外传输的速度@@ 08/26 20:18
30F:→ hilorrk:还有请两位息息怒..交流上难免会有意见不同处 我相信L大和 08/26 20:19
31F:→ hilorrk:Y大在资讯领域都有很深的见解 希望能就技术层面来讨论就好 08/26 20:20
32F:→ hilorrk:不要伤了皇城之内的和气啊XD(误 08/26 20:20
33F:→ yauhh:最後这不用管,反正该有的分寸我自己也会抓好. 养新板不容易 08/26 20:29