分布式计算,Job和task

Job是关于整个输入数据和面向整个集群(还没有分机器)的概念,task一般是处理输入数据的子集,并且和集群中的具体一台机器相联系。


Vod deploy系统的架构

cluster job 相当于job, vserver job相当于task,VodController 相当于JobTracker,VServer Com+相当于 taskTracker

输入首先是一个cluster job 的 priority queue,但默认都赋一样的优先级,退化成普通的queue,这里的queue是一个逻辑结构,实际是用数据库表实现,先后顺序用order by实现。逻辑上是每一个cluster对应一个queue,job里用clusterId指定了哪个集群


JobTracker (vodController) 负责由job 生成task,并且根据一定的策略分配节点(veserver),对于hadoop的jobTracker,首先是要对输入的大文件进行data  partition,然后分给不同的task node处理i,而VOD deploy系统,task就是拷贝相同的媒体文件,没有data partition这一步。


每个task node(vserver com+)对应一个 task队列,也是逻辑上的队列,实现是所有的server的 task 都放在一个数据库表,用serverId区分,每个server用自己的serverId 取task。


taskTracker和 JobTracker之间有heartbeat,并且定时上报task进度,执行情况以及server 状态(磁盘空间,available带宽)。task Tracker服务启停会register和unregister自己。这样JobTracker知道有哪些taskTracker


当一个job 的所有task都成功结束,job才会被mark成success,可以允许partially success的状态。

hadoop 的各个组件通信都是基于RPC的,包括JobTracker和taskTracker之间也是,JobClient通过RPC向JobTracker提交job,JobTracke通过RPCr向taskTracker 分配task, taskTracker通过RPC向jobTracker汇报status,是双向RPC。

Vod deploy系统则不是直接call, 而是用的持久化队列,即把job放入队列,jobTracker定时取,牺牲了一定的即时性,好处是解耦,没有单点failure,这种自己用timer去pull的模式就是解决单点failure,因为只要有一个role负责assign、去call,这个role就是single failure point。LoadBalancer就是单点失败点,而如果改为,请求放到一个全局队列,各个web server自己去取,就没有SPF问题。

总结一下分布式计算的通用问题

1)计算节点管理(register, 心跳, membership, 用量、状态汇报)

2)JobTracker这个role,负责接收job,分成task, 分配给计算节点

3)TaskTracker 这个role代表 计算节点,

4)task的状态、进度,job的状态、进度,

3)通信问题 RPC push v.s. 每个组件配个队列,自己pull


分布式计算,Job和task_第1张图片

你可能感兴趣的:(系统分析设计,架构)