首页 > 代码库 > Livy原理详解

Livy原理详解

Livy的概述(引自社区)

  Livy(当前是alpha版本)是一个提供rest接口和spark集群交互的服务。它可以提交spark job或者spark一段代码,同步或者异步的返回结果;也提供sparkcontext的管理,通过restfull接口或RPC客户端库。Livy也简化了与spark与应用服务的交互,这允许通过web/mobile与spark的使用交互。其他特效还包含:

  1 长时间运行的SparkContext,允许多个spark job和多个client使用。

  2 在多个spark job和客户端之间共享RDD和Dataframe 

  3 多个sparkcontext可以简单的管理,并运行在集群中而不是Livy Server,以此获取更好的容错性并行度。   

  4 作业可以通过重新编译的jar、片段代码、或Java/Scala的客户端API提交。

  5 通过认证保 

 

Livy结合了spark job server和Zeppelin的优点,并解决了spark job server和Zeppelin的缺点。

1. 支持jar和snippet code

2. 支持SparkContext和Job的管理

3. 支持不同SparkContext运行在不同进程,同一个进程只能运行一个SparkContext

4. 支持Yarn cluster模式

5. 提供restful接口,暴露SparkConte

技术分享

(图片摘自livy社区)

 

livy与spark jobserver和Zeppelin的对比

技术分享

 

livy的API介绍文档

https://github.com/cloudera/livy#prerequisites

 

 livy的三种提交任务方式

 (1) 使用Using the Programmatic API,通过程序接口提交作业。

    a) 需要继承com.cloudera.livy.Job接口编程,通过LivyClient提交

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

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

 

Livy执行作业流程   

技术分享

 

(图片摘自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请求作业结果。

 

 还存在什么问题

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

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

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

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

 

Livy原理详解