2024年9月29日发(作者:粟永昌)
旗开得胜
一、简介
DAG并行计算框架是一个可以处理协作型作业的并行编程平台,如果一个复杂问题的子问题之
间有数据依赖,则其就可以构造一个基于DAG的协作型作业。
图1 一个有向无环图DAG实例
一个协作型作业根据子任务间的数据依赖关系可以抽象成一个有向无环图(Directed Acyclic
Graph),如图1所示。子任务之间的数据依赖使得整个作业无法切分为互相无关联的子任务,因
此无法完全并行执行。例如,数据库的多表关联操作就是如此,如图2所示,select A.* B.* from A,B
where A.a = B.a,
1
读万卷书 行万里路
旗开得胜
Task1:A表
查询
A
表
中
间
结
果
集
Task0:Job
预处理
Task3:A表
结果与B表
结果做笛卡
尔积
结
果
集
最终结果集
B
表
中
间
Task2:B表
查询
二,构造作业
一个DAG作业(job),由多个有依赖关系的任务(task)组成,task是DAG图中的节点,
两个节点之间的边是任务的依赖关系。Task执行的是用户层的代码,task的Input和Output数据
由框架负责传输,一个job的构造如下所示:
public static void setJob(Job job){
实例化一个子任务既DAG图的节点
Task task0 = new Task();
设置该任务所要调用的应用层的类
ssName("chIndexFile");
2
读万卷书 行万里路
是否为DAG图的最终节点
(false);
是否为DAG图的起始节点
ry(true);
所使用的应用层jar包
Name("");
设置task名
kName("DispatchIndexFile");
Task task1 = new Task();
ssName("StudentIndex");
(false);
ry(false);
Name("");
kName("HandleStudentIndex");
读万卷书 行万里路
旗开得胜
3
2024年9月29日发(作者:粟永昌)
旗开得胜
一、简介
DAG并行计算框架是一个可以处理协作型作业的并行编程平台,如果一个复杂问题的子问题之
间有数据依赖,则其就可以构造一个基于DAG的协作型作业。
图1 一个有向无环图DAG实例
一个协作型作业根据子任务间的数据依赖关系可以抽象成一个有向无环图(Directed Acyclic
Graph),如图1所示。子任务之间的数据依赖使得整个作业无法切分为互相无关联的子任务,因
此无法完全并行执行。例如,数据库的多表关联操作就是如此,如图2所示,select A.* B.* from A,B
where A.a = B.a,
1
读万卷书 行万里路
旗开得胜
Task1:A表
查询
A
表
中
间
结
果
集
Task0:Job
预处理
Task3:A表
结果与B表
结果做笛卡
尔积
结
果
集
最终结果集
B
表
中
间
Task2:B表
查询
二,构造作业
一个DAG作业(job),由多个有依赖关系的任务(task)组成,task是DAG图中的节点,
两个节点之间的边是任务的依赖关系。Task执行的是用户层的代码,task的Input和Output数据
由框架负责传输,一个job的构造如下所示:
public static void setJob(Job job){
实例化一个子任务既DAG图的节点
Task task0 = new Task();
设置该任务所要调用的应用层的类
ssName("chIndexFile");
2
读万卷书 行万里路
是否为DAG图的最终节点
(false);
是否为DAG图的起始节点
ry(true);
所使用的应用层jar包
Name("");
设置task名
kName("DispatchIndexFile");
Task task1 = new Task();
ssName("StudentIndex");
(false);
ry(false);
Name("");
kName("HandleStudentIndex");
读万卷书 行万里路
旗开得胜
3