gearmand中的Map/Reduce

本文详细介绍了Gearman协议中的SUBMIT_REDUCE_JOB原语及其如何简化Map/Reduce计算过程。通过新增的SUBMIT_REDUCE_JOB原语,用户可以更轻松地实现Map/Reduce计算任务,特别是与流行的数据处理框架相整合。该原语增加了Reducerfunctionname参数,使得任务分配和处理更加灵活。文章还提供了Sequence图来直观展示SUBMIT_REDUCE_JOB原语的工作流程,帮助读者深入理解其工作原理。

除了gearman协议中的定义的提交job到jobServer的下列原语:SUBMIT_JOB,SUBMIT_JOB_BG,SUBMIT_JOB_LOW,SUBMIT_JOB_LOW_BG,SUBMIT_JOB_HIGH,SUBMIT_JOB_HIGH_BG,gearmand添加了两条原语:SUBMIT_REDUCE_JOB和SUBMIT_REDUCE_JOB_BACKGROUND。从名字上看我们就知道SUBMIT_REDUCE_JOB_BACKGROUND是SUBMIT_REDUCE_JOB的后台版本。

 

一看SUBMIT_REDUCE_JOB名字,我们就可以猜这条原语可能与流行的Map/Reduce有关。是的,这条原语就是专门为简化利用gearman协议进行Map/Reduce计算设计的。虽然,利用已有的gearman协议能够进行Map/Reduce计算,但是如果利用SUBMIT_REDUCE_JOB原语,可以使Map/Reduce计算更加简单,更加自然。

 

SUBMIT_REDUCE_JOB原语是如何工作的呢?先看看此原语的参数:

  • Function name
  • Unique Id
  • Reducer function name
  • Unused
  • data

在看看SUBMIT_JOB的参数:

  • Function name
  • Unique Id
  • data

SUBMIT_REDUCE_JOB比SUBMIT_JOB多了两个参数,一个是Reducer function name,另一个是Unused。从字面上我们知道,Unused参数现在不用,保留以后扩展使用。因此,实质上,SUBMIT_REDUCE_JOB只比SUBMIT_JOB多一个参数Reducer function name,其他参数一样。实际上,SUBMIT_REDUCE_JOB中的参数Function name,UniqueId,data与SUBMIT_JOB原语中的Functionname, Unique Id, data参数意义完全一样。那么,SUBMIT_REDUCE_JOB中的Reducer function name参数是什么意思呢?

 

首先看看SUBMIT_REDUCE_JOB工作的Sequence图,读懂下面的Sequence图就完全理解SUBMIT_REDUCE_JOB的工作机理了(此Sequence图只画出了与SUBMIT_REDUCE_JOB紧密相关的部分,其他部分在此图中省略了)



1)worker向job server注册,告诉job server它有function name功能,可以处理function name的job

2)worker(reducer)向jobserver注册,告诉job server它可以处理功能为reducer function name的job

3)client向job server提交一个job,提交job的命令不再是SUBMIT_JOB,而是SUBMIT_REDUCE_JOB,SUBMIT_REDUCE_JOB包含如下参数:

§        function name

§        unique Id

§        reducer function name

§        data

4)job server返回一个JOB_CREATED命令,表示已经接受并将提交的job放到了内部queue中,此job在jobserver中由job handle唯一标示

5)worker向job server发送GRAB_JOB_ALL命令,而不是GRAB_JOB命令

6)job server返回JOB_ASSIGN_ALL命令给worker,此命令包含如下参数:

§        job handle

§        function name

§        unique id

§        reducer function name

§        data

如果在5)步worker向job server发送的命令不是GRAB_JOB_ALL,而是GRAB_JOB命令,job server就不会向worker返回JOB_ASSIGN_ALL命令,而是JOB_ASSIGN命令,JOB_ASSIGN命令中不会包含reducer function name参数。

7)worker处理收到的job数据

8)由于处理job中,产生了大量数据,必须要用WORK_DATA命令发送数据回client。

9)在正常的WORK_DATA处理流程中,WORK_DATA会先发送给job server,然后job server在将数据转发给相应的client。但是,由于worker收到的job中包含reducer function name,所以worker不会把命令WORK_DATA真发送给job server,而是利用SUBMIT_JOB命令向jobserver提交一个传统的job,SUBMIT_JOB命令包含如下参数:

§        Reducer function name

§        Unique id

§        data

10)                   Job server向worker返回一个jobhandle

11)                   Worker(reducer)向job server发送GRAB_JOB命令

12)                   Job server向worker(reducer)返回命令JOB_ASSIGN命令,JOB_ASSIGN命令包含如下参数:

§        Job handle

§        Reducer function name,此参数就是在3)步client向jobserver提交的job中的第三个参数reducer function name

§        Unique id

§        data

13)                   worker(reducer)处理收到的job

14)                   worker(reducer)处理完收到的job,向job server发送WORK_COMPLETE命令,WORK_COMPLETE命令包含如下参数:

§        job handle

§        data, job处理完后返回的数据

15)                   job server利用WORK_COMPLETE将处理结果转发给worker

16)                   worker收到结果后,对结果进行聚集Aggregate处理

17)                   收到所有在9)步提交的job的结果并进行聚集Aggregate处理后,表示在6)接收到的job就处理完毕了,worker向jobserver发送WORK_COMPLETE命令

18)                   Job server向client转发收到的WORK_COMPLETE命令


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值