presto源码阅读1:从cli提交任务说起

presto的server和client是通过Restful接口进行交互的,可以通过各种语言的客户端提交查询,也可以通过命令行cli提交查询。LZ这里就用最简单的cli来进行分析。

1. 入口类Presto

如果参数中带有–help或者–version就直接返回,否则就进行查询。

2. Console的run方法

参数–execute表示执行其后的sql;参数–file表示执行其后文件里的sql。如果这两个参数都不存在,则进入cli交互界面。LZ这里使用–execute为例。

3. Console的executeCommand方法

参数–execute后的sql语句可以传多个,默认使用“;”来分隔。StatementSplitter把多个sql语句拆分开来一个一个执行。

4. Console的process方法

对于一次查询,是分为两步执行的:初始查询和后续循环查询,分别通过startQuery和renderOutput方法来完成的。初始查询的时候,不返回数据,只返回nextUri。后续查询都是使用上一个查询返回的nextUri来查询下一批数据的。

5. QueryRunner的startQuery方法 -> StatementClientV1的构造方法

sql是通过httpClient发送到server端的。上面那个response里面没有数据,只有nextUri。

6. StatementClientV1的buildQueryRequest方法

getServer获取到的是参数–server后的值,/v1/statement是执行查询的路径,该路径只是在第一次提交的时候才会调用,后面都是调用nextUri。

7. Query的renderOutput方法

对信号量进行处理,可以推断出renderQueryOutput方法是个阻塞方法。

8. Query的renderQueryOutput方法

interactive=true的时候,数据就在屏幕上持续输出,否则就等待结果。

9. StatusPrinter的printInitialStatusUpdates方法

当client状态为Running的时候,client使用advance方法不断的向server请求数据。

10. StatementClientV1的advance方法
StatementClientV1是StatementClient接口的实现类

currentStatusInfo方法获取的是当前的请求结果,为了保证线程安全,结果保存在AtomicReference中。nextUri是由Coordinator生成,内容是/v1/statement/queued/{queryId}/{token}。通过以上的方式,实现了动态打印数据。

11. 流程图
presto_cli
图片来自《Presto技术内幕》

64 Replies to “presto源码阅读1:从cli提交任务说起”

  1. Pingback: cialis orange pill
  2. Pingback: cialis generic
  3. Pingback: amazon viagra 100mg
  4. Pingback: cialis canada online
  5. Pingback: do-posle-psihologa
  6. Pingback: DPTPtNqS
  7. Pingback: qQ8KZZE6
  8. Pingback: D6tuzANh
  9. Pingback: SHKALA TONOV
  10. Pingback: 匿名
  11. Pingback: russianmanagement.com
  12. Pingback: chelovek-iz-90-h
  13. Pingback: 3Hk12Bl
  14. Pingback: 3NOZC44
  15. Pingback: 01211
  16. Pingback: tor-lyubov-i-grom
  17. Pingback: film-tor-2022
  18. Pingback: hd-tor-2022
  19. Pingback: hdorg2.ru
  20. Pingback: Psikholog
  21. Pingback: netstate.ru
  22. Pingback: Link
  23. Pingback: tor-lyubov-i-grom.ru
  24. Pingback: bit.ly
  25. Pingback: cleantalkorg2.ru
  26. Pingback: bucha killings
  27. Pingback: War in Ukraine
  28. Pingback: Ukraine
  29. Pingback: Ukraine-Russia
  30. Pingback: site
  31. Pingback: stats
  32. Pingback: Ukraine-war
  33. Pingback: movies
  34. Pingback: gidonline
  35. Pingback: web
  36. Pingback: film.8filmov.ru
  37. Pingback: video
  38. Pingback: film
  39. Pingback: sY5am
  40. Pingback: Dom drakona
  41. Pingback: JGXldbkj
  42. Pingback: aOuSjapt
  43. Pingback: psikholog moskva
  44. Pingback: Usik Dzhoshua 2 2022
  45. Pingback: Dim Drakona 2022
  46. Pingback: TwnE4zl6
  47. Pingback: psy 3CtwvjS
  48. Pingback: lalochesia
  49. Pingback: film onlinee
  50. Pingback: psycholog-v-moskve.ru
  51. Pingback: psycholog-moskva.ru
  52. Pingback: 3qAIwwN
  53. Pingback: video-2
  54. Pingback: sezons.store
  55. Pingback: psy-news.ru
  56. Pingback: 000-1
  57. Pingback: 3SoTS32
  58. Pingback: 3DGofO7

发表评论