背景:

Apache Spark 是一个比较流行的大数据框架、广泛运用于数据处理、数据分析、机器学习中,它提供了两种方式进行数据处理,一是交互式处理:比如用户使用spark-shell,编写交互式代码编译成spark作业提交到集群上去执行;二是批处理,通过spark-submit 提交打包好的spark 应用jar到集群中进行执行。

这两种运行方式都需要安装spark客户端配置好yarn集群信息,并打通集群网络访问权限,这种方式存在增加client所在节点资源使用负担和故障发生的可能性,同时client节点故障带来的单点问题。其次是这种方式难以管理、审计以及进行权限管理和控制。

社区有开发一个基于spark 的REST服务livy,apache livy提供通过restful接口或者编程接口提交spark任务,支持提交scala、pyspark、sparkr交互式代码执行spark任务,这样可以通过livy restapi服务作为中转用来解决k8s集群中提交spark任务跑在yarn集群的问题。

Livy基本架构

Livy交互式批处理都搬到了web上,提供restful接口,Livy一方面接收并解析客户端提交的REST请求,转换成相应的操作,另一方面它管理着客户端所启动的spark集群,下面是Livy的架构图:


livy基本架构

Livy会为用户运行多个session,每个session就是一个常驻的spark context也可以成为一个spark集群。用户通过restful接口在对应的spark context执行代码,Livy服务端通过RPC协议与Spark集群进行通信。根据交互方式不同,Livy将会话分成两种类型:

交互式会话(interactive session):交互式会话在其启动后可以接收用户所提交的代码片段,在远端spark集群中编译并执行。

批处理会话(batch session):用户可以通过Livy以批处理的方式启动Spark应用。

这两种方式与原生spark是类似的,其中交互式会话它们的主要不同点是,spark-shell会在当前节点上启动REPL来接收用户的输入,而Livy交互式会话则是在远端的Spark集群中启动REPL,所有的代码、数据都需要通过网络来传输。

Livy具体实现

Livy的各个功能模块如下图所示:

Client模块:spark任务提交请求客户端,可以通过任何http请求发送,不在livyserver模块中

任务请求路由router:用来暴露请求url,router核心功能就是通过client不同请求的uri及参数,指派给不同的类和函数进行处理。该模块的核心该模块核心类是 SessionServlet,有两个子类:InteractiveSessionServlet接收处理/sessions/下的所有请求,BatchSessionServlet接收处理/batches/ 下的所有请求,分别用来路由对session及batch相关的请求。

权限管理:权限管理由AccessManager类管理,权限管理类通过嵌入到Servlet过滤器中的成员变量进行权限方面的判断操作

其他重要特性

多用户支持

Livy引入了Hadoop中的代理用户(Proxy user )模式,代理用户模式广泛使用于多用户的环境,如HiveServer2,在此模式中超级用户可以代理普通用户去访问资源,并拥有普通用户相应的权限。有了代理用户模式的支持,不同的用户启动的会话会以相应的用户去访问资源。

失败恢复

Livy服务器是单点,所有操作都需要通过livy服务转发到Spark集群中,如何确保Livy服务端失效的时候, 所有会话不受影响,livy服务器恢复过来后能够与已有的会话重新建立连接以继续使用?

Livy提供的实效恢复机制,通过持久化会话的元信息,livy从失败中恢复会读取相关的元信息进行恢复,要开启失败恢复,需要对livy进行配置。

端到端安全

livy可以配置keberos认证、Https/SSl、及SASL RPC这三种安全机制,保障完整的端到端的安全,确保没有经过认证的用户,匿名的连接无法与livy服务中的任何一个环节进行通信。

Livy安装配置

1、livy的下载

https://livy.incubator.apache.org/get-started/

https://www.apache.org/dyn/closer.lua/incubator/livy/0.7.1-incubating/apache-livy-0.7.1-incubating-bin.zip

2、解压livy后,在livy-env.sh中添加

export SPARK_HOME=/usr/lib/sparkexport HADOOP_CONF_DIR=/etc/hadoop/confexport  HADOOP_USER_NAME=hdfs

livy.conf相关配置

https://blog.csdn.net/RONE321/article/details/100517580

livy.impersonation.enabled=truelivy.repl.enable-hive-context=truelivy.server.host=0.0.0.0livy.server.port=8998livy.spark.deploy-mode=clusterlivy.spark.master=yarnlivy.server.session.timeout=5h #设置为5小时

4、开启livy服务

./bin/livy-server start

实战 livy 远程提交 spark作业

使用livy-session来执行spark-shell

https://livy.incubator.apache.org/docs/latest/rest-api.html

  • 创建新的spark会话
curl -X POST --data '{"kind": "scala","proxyUser": "house"}' -H "Content-Type: application/json" http://192.168.106.11:8998/sessions
  • 获取回话列表
curl http://192.168.106.11:8998/sessions
  • 运行交互式代码
curl http://192.168.106.11:8998/sessions/{{sessionId}}/statements -X POST -H 'Content-Type: application/json' -d '{"code":"var a = 1;var b=a+1"}'
  • 获取结果
curl http://192.168.106.11:8998/sessions/{{sessionId}}/statements/{{statId}}
  • 删除会话
curl -X DELETE http://192.168.106.11:8998/sessions/{{sessionId}}

使用livy来执行 batch处理任务

livy session用来处理处理交互式请求,便于做ad-hoc即席查询,而livy batches方式用来处理非交互式请求相当于spark-submit操作。创建批处理任务案例如下:

curl -X POST -H "Content-Type: application/json"  http://192.168.106.11:8998/batches --data '{ "conf": {"spark.master":"yarn-cluster"}, "file": "/user/hdfs/spark-examples-1.6.1-hadoop2.6.0.jar", "className": "org.apache.spark.examples.SparkPi", "name": "Scala Livy Pi Example", "executorCores":1, "executorMemory":"512m", "driverCores":1, "driverMemory":"512m", "queue":"default", "args":["100"]}'

总结

本文简单介绍了spark的运行方式,并介绍了基于Spark的REST服务livy。并详细介绍了其基本架构、核心功能。Livy不仅涵盖了Spark所提供了所有处理交互方式,还有多种企业级特性。

参考文档

https://github.com/apache/incubator-livy

https://www.cnblogs.com/shenh062326/p/6391057.html

https://cloud.tencent.com/developer/article/1042686

Livy - Getting Started

Apache Zeppelin 0.10.0 Documentation: Livy Interpreter for Apache Zeppelin

https://segmentfault.com/t/livy

https://www.yisu.com/zixun/56785.html

https://cloud.tencent.com/developer/article/1194700

https://www.modb.pro/db/107142

Spark Livy 指南及livy部署访问实践相关推荐

  1. livy使用样例_使用Spark的REST服务Livy

    Apache Livy简介 Apache Livy是由Cloudera Labs贡献的基于Apache Spark的开源REST服务,它不仅以REST的方式代替了Spark传统的处理交互方式,同时也提 ...

  2. livy使用样例_[Spark]使用Spark的REST服务Livy

    Apache Livy简介 Apache Livy是由Cloudera Labs贡献的基于Apache Spark的开源REST服务,它不仅以REST的方式代替了Spark传统的处理交互方式,同时也提 ...

  3. Spark编程指南(Python版)

    Spark编程指南 译者说在前面:最近在学习Spark相关的知识,在网上没有找到比较详细的中文教程,只找到了官网的教程.出于自己学习同时也造福其他初学者的目的,把这篇指南翻译成了中文,笔者水平有限,文 ...

  4. Spark编程指南V1.4.0(翻译)

    Spark编程指南V1.4.0 ·        简介 ·        接入Spark ·        Spark初始化 ·        使用Shell ·        在集群上部署代码 ·  ...

  5. Spark编程指南——Python版

    摘要:对于1个年仅5岁的开源项目来说,其远谈不上尽善尽美,就比如文档相关.本文翻译自Spark Programming Guide,选取了其中使用Python的部分. 自开源之日至今,Spark已经5 ...

  6. Spark编程指南笔记

    Spark编程指南笔记 标签: spark 编程 笔记 | 发表时间:2015-02-02 16:00 | 作者: 分享到: 出处:http://blog.javachen.com/rss.xml 本 ...

  7. Mendix基于腾讯云部署最佳实践

    本实践由腾讯云与西门子数字化工业软件授权发布,未经允许不得转载. 1.  概述 本文档介绍了西门子企业级应用开发平台Mendix应用快速托管到腾讯云容器服务(简称TKE)的最佳实践.该方案仅用于非生产 ...

  8. MaxCompute Spark开发指南

    0. 概述 本文档面向需要使用MaxCompute Spark进行开发的用户使用.本指南主要适用于具备有Spark开发经验的开发人员. MaxCompute Spark是MaxCompute提供的兼容 ...

  9. spark on yarn 完全分部署_大数据Spark面试题(一)

    1.spark的有几种部署模式,每种模式特点?(☆☆☆☆☆) 1)本地模式 Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定.将Spark应用以多线程的方式直接运行在本地, ...

最新文章

  1. python 调用linux内核api_Linux系统调用及用户编程接口(API)学习
  2. Linux select/poll机制原理分析
  3. 一图尽览华为云数据库全套安全解决方案
  4. go语言 格式化输出
  5. GhostNet 解读及代码实验(附代码、超参、日志和预训练模型)
  6. bat脚本实现微信多开
  7. python中文件分类_利用Python将文件进行分类整理
  8. 手机玩exe游戏的模拟器_手机就能玩Switch游戏,蛋蛋模拟器+盖世小鸡X2手柄体验...
  9. 清梦_飘云羽逸_新浪博客
  10. 路易斯安那州立大学计算机科学,路易斯安那州立大学
  11. python单位转换编程_如何使用python编程将一组DNA序列转换为蛋白...
  12. Redhat Enterprise Linux 6.5下安装Oracle11g R2
  13. 关于onKeyDown方法
  14. “TrueType 造字程序”的具体用法
  15. 爬虫系列 | 1、什么是爬虫,玩爬虫的正确姿势有哪些
  16. python拯救爱情
  17. 【机器学习实战】KNN
  18. 高通QSPR读写NV
  19. 送你一招超级快速网站,系统搬家教程,上百G内容的网站快速搬家---快速服务器搬家记录-不同IDC服务商的大文件服务器搬家支招-一颗优雅草科技伊凡
  20. 机器学习 逻辑回归算法应用案例

热门文章

  1. 使用matplotlib模拟线性回归
  2. 短视频+内容营销,引流电商带货新浪潮
  3. 面试可以问面试官哪些问题?这些问题需要弄清楚
  4. el-cascader设置下拉框样式不生效的问题
  5. java开发周报_java第六周周报
  6. 147所双一流高校, 博士生毕业发表论文要求汇总
  7. Postfix邮件系统安装与配置:Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPF
  8. leaf框架源码分析
  9. 11.数据结构:认识一棵树
  10. JSP页面forEach使用