Livy原理详解

概述git

  当前spark上的管控平台有spark job server,zeppelin,因为spark job server和zeppelin都存在一些缺陷,好比spark job server不支持提交sql,zeppelin不支持jar包方式提交,而且它们都不支持yarn cluster模式,只能以client的模式运行,这会严重影响扩展性。针对这些问题,cloudera研发了Livy,Livy结合了spark job server和Zeppelin的优势,并解决了spark job server和Zeppelin的缺点,下面是他们的对比。github

 

 Livy的三套接口sql

  Livy提供三套管理任务的接口分别是:编程

 (1) 使用Using the Programmatic API,经过程序接口提交做业。session

    a) 须要继承com.cloudera.livy.Job接口编程,经过LivyClient提交 app

2) 使用RestAPI的session接口提交代码段方式运行 性能

(3) 使用RestAPI的batch接口提交jar包方式运行ui

更详细的API文档能够参考连接:https://github.com/cloudera/livy#prerequisitesspa

 

Livy执行做业流程   设计

下面这幅图片是Livy的基本原理,客户端提交任务到Livy server后,Livy server启动相应的session,而后提交做业到Yarn集群,当Yarn拉起ApplicationMaster进程后启动SparkContext,并链接到Livy Server进行通讯。后续执行的代码会经过Livy server发送到Application进程执行。

 

(图片摘自livy社区)

下面是源码级别的详细的执行流程:

  a.live-server启动,启动BatchSessionManager, InteractiveSessionManager。

  b.初始化WebServer,经过ServletContextListener启动InteractiveSessionServlet和BatchSessionServlet。

  c.经过http调用SessionServlet的createSession接口,建立session并注册到sessionManager,InteractiveSession和BatchSession会建立SparkYarnApp,SparkYarnApp负责启动Spark做业,并维护yarnclient,获取做业信息、状态或kill做业。

  d. BatchSession是以jar包的方式提交做业,运行结束后session做业就结束。

  e. InteractiveSession会启动com.cloudera.livy.repl.ReplDriver,ReplDriver继承RSCDriver,初始化期间会经过RPC链接到livy-server,并启动RpcServer;其次会初始化Interpreter(支持PythonInterpreter,SparkInterpreter,SparkRInterpreter)。接收来自livy-server,并启动RpcServer;其次会初始化Interpreter(支持PythonInterpreter,SparkInterpreter,SparkRInterpreter)。接收来自livy-server的信息(代码),而后经过Interpreter执行,livy-server经过RPC请求做业结果。

 

 Livy 还存在的问题

Livy是当前spark上最好的管控平台, 即便不使用Livy,也能够借鉴Livy的设计思路。固然Livy当前还没彻底成熟,下面列举了几个待完善的点,社区也在开发过程当中,但愿Livy后续变得更加完善。

1. 不支持提交SQL  https://issues.cloudera.org/browse/LIVY-19

2. session,app信息都维护在livy-server,livy-server挂掉信息丢失,须要HA。

3. livy-server的性能如何,能并行多少session。

4. 多个livy-server如何管理?

相关文章
相关标签/搜索