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原理详解的更多相关文章

  1. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  2. Zigbee组网原理详解

    Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57   [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...

  3. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  4. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  5. 锁之“轻量级锁”原理详解(Lightweight Locking)

    大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意. 原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖 ...

  6. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  7. 节点地址的函数list_entry()原理详解

    本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...

  8. WebActivator的实现原理详解

    WebActivator的实现原理详解 文章内容 上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivato ...

  9. Influxdb原理详解

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

随机推荐

  1. [即时通讯]openfire启动失败解决办法

    当你发现你的电脑上的openfire无论你是重新安装还是重启都无法启动的情况下你可以按照我下面写的那些终端指令来启动你的openfire不用再去重新做你的系统了. 一般你发现你的openfire打开出 ...

  2. c++几个新特性

    template 模板 1.出于通用性考虑,程序库中几乎所有东西都被设计为template形式,不支持template几乎不能使用标准程序库. 2.所谓template,是针对"一个或多个尚 ...

  3. MySQL数据文件的导入、导出

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导 ...

  4. UITableView回调和table相关成员方法详解

    http://blog.csdn.net/kingsley_cxz/article/details/9123959 1.UITableView的datasource实现: //回调获取每个sectio ...

  5. iOS 主动抛出异常

    http://blog.csdn.net/jymn_chen/article/details/38096749 http://blog.sina.com.cn/s/blog_7270a06c0101b ...

  6. tp框架设置 mysql数据库的端口号

    <?php return array( //'配置项'=>'配置值' SHOW_PAGE_TRACE=>true,//开启trace信息 'DB_TYPE' => 'mysql ...

  7. iOS开发——刮奖

    还是直接上代码,有什么问题的话,直接评论. 1.在YYTScratchView.h文件中 // //  YYTScratchView.h //  Demo-刮奖 // //  Created by y ...

  8. adapter中报错:Can't create handler inside thread that has not called Looper.prepare()

    http://stackoverflow.com/questions/9357513/cant-create-handler-inside-thread-that-has-not-called-loo ...

  9. osgEarth基础入门(转载)

    osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...

  10. ajax请求获取到数据,但是仍然不能触发success方法

    这个问题消耗了我的很多时间. 原来是因为.php文件中的 echo echo json_encode($k);  后面少加了个exit; 因为echo echo json_encode($k); 之后 ...