下面将以一个完整的SQL语句为例,介绍提交后经过ODPS处理的全流程:
提交作业:
-
通过console提交一个SQL语句。
-
调用SDK计算配置信息中的签名。
-
发送
RESTful 请求给HTTP服务器。
-
HTTP
服务器发送请求到云账号服务器做用户认证。
-
认证通过后,请求就会以
Kuafu通信协议方式发送给 Worker。
-
Worker判断该请求作业是否需要启动Fuxi
Job。如果不需要,本地执行并返回结果。
-
如果需要,则生成一个
instance, 发送给 Scheduler。
-
Scheduler把instance信息注册到
OTS,将其状态置成 Running。
-
Scheduler
把 instance 添加到 instance 队列。
-
Worker把
Instance ID返回给客户端。
运行作业:
-
Scheduler会把instance拆成多个Task,并生成任务流DAG图。
-
把可运行的Task
放入到优先级队列TaskPool中。
-
Scheduler
有一个后台线程定时对TaskPool 中的任务进行排序。
-
Scheduler
有一个后台线程定时查询计算集群的资源状况。
-
Executor在资源未满的情况下,轮询TaskPool,请求Task。
-
Scheduler判断计算资源。若集群有资源,就将该Task发给Executor。
-
Executor调用SQL
Parse Planner,生成SQL Plan。
-
Executor
将 SQL Plan 转换成计算层的 FuXi Job 描述文件。
-
Executor
将该描述文件提交给计算层运行,并查询 Task 执行状态。
-
Task
执行完成后,Executor更新 OTS 中的 Task信息,并汇报给 Scheudler。
-
Schduler
判断 instance 结束,更新 OTS 中 instance 信息,置为 Terminated。
查询状态:
客户端接收到返回的 Instance ID 后,可以通过 Instance ID 来查询作业状态:
-
客户端会发送另一个 REST 的请求,查询作业状态。
-
HTTP
服务器根据配置信息,去云账号服务器做用户认证。
-
用户认证通过后,把查询的请求发送给
Worker。
-
Worker
根据 InstanceID 去 OTS 中查询该作业的执行状态。
-
Worker
将查询到的执行状态返回给客户端。
阅读(1327) | 评论(0) | 转发(0) |