Presto调度模块源码阅读(1)-Client提交请求

       当客户端以控制台Console、脚本--execute等方式提交SQL作业时,Presto的Client会将作业相关的参数和脚本封装成一个Restful请求,提交给PrestoServer端。然后再进行后续的诸如解析执行计划、拆分Stage、调度task到Worker端执行等操作。下面就介绍一下Client提交作业到服务端部分的源码。

Main函数

       客户端提交作业的代码是从Presto的main函数开始的:

       在Console的run方法中,如果入参中含有--execute,会直接将值取出作为待执行的SQL语句。否则认为是通过--file指定了SQL文件,此时会通过文件IO读取该文件中的SQL脚本。这种情况对应着通过脚本提交作业的情况,而如果--execute和--file都没有指定,则认为是通过控制台Console的方式提交SQL。

通过脚本提交作业

       通过脚本的方式会直接执行Console类的executeCommand方法。按照“;”切分出SQL语句,并依次调用Console类的process方法来提交作业。

通过控制台提交作业

       这种情况相对麻烦一些,他会执行Console.runConsole方法处理客户提交的请求。Presto为这种方式设置了一个AtomicBoolean existing变量来判断Client是否存在,如果不存在则不再提交后续的SQL(对应在控制台中输入了多条sql语句,并用;间隔,当前边的语句正在执行时退出Console,此时后续的sql就不会被提交了)。

       在runConsole方法中可以看到,他会有一个while循环不断的循环处理LineReader对象读取到的命令,LineReader继承自jline.console.ConsoleReader,是一个专门处理控制台输入的Java类库(官方网址是https://jline.github.io/)。这个类每读取一行输入就会将值传递给一个名为buffer的StringBuilder对象,然后根据“;”和“\\G”来识别一个完整的SQL,并将SQL交给process方法进行调度。最后会将剩下不完整的语句赋值给重新初始化的buffer对象作为下一条SQL的开头。

构建请求并发送

       下面我们看一下process方法,这个方法中最重要的部分是他会在try with resources中调用QueryRunner的startQuery方法,如下:

       这个语法表示小括号中创建的对象如果实现了closable接口,则无论是否出现异常,都会在try catch结束后调用其close方法。

       如下是startQuery方法:

       然后我们一路点进去,经过QueryRunner的startInernalQuery、StatementClientFactory的newStatementClient方法之后,我们来到了StatementClientV1的构造函数:

       在buildQueryRequest方法中,会构建一个目标Rest地址为/v1/statement的请求,

       随后在JsonResponse.execute中会发起这个请求。

       然后我们搜索一下Rest地址/v1/statement,发现他的目标服务类为StatementResouce。

       以上就是Client提交查询请求,到PrestoServer端响应的过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,098评论 2 89
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,926评论 0 10
  • 最近一直在探索自己,包括喜欢什么,不喜欢什么,想要什么生活,自己到底是个什么样子的人,看似具体,实则抽象。总觉得自...
    momentx零阅读 143评论 0 0
  • 患者女性,60岁。因为反复的头晕,心累气短,到处求医问药。从阿坝到成都,跑遍了各大医院,做了所有的检查都基本正常,...
    慈朴守中阅读 594评论 0 0