Spark Livy 指南及livy部署访问实践

article/2025/10/13 8:32:05

背景:

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的架构图:

image.png
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


http://chatgpt.dhexx.cn/article/voseATb5.shtml

相关文章

Livy简单使用 架构解读

Livy使用 —— 关于Session的操作 官网案例:http://livy.incubator.apache.org/examples/ REST API:http://livy.incubator.apache.org/docs/latest/rest-api.html 通过REST API的方式去获取到session,返回活的交互式session 打开Postman&a…

【云原生】Apache Livy on k8s 讲解与实战操作

文章目录 一、概述二、开始编排部署1)部署包准备1)构建镜像2)创建livy chart模板3)修改yaml编排4)开始部署5)测试验证6)卸载 一、概述 Livy是一个提供Rest接口和spark集群交互的服务。它可以提交…

Livy:基于Apache Spark的REST服务

原文:http://geek.csdn.net/news/detail/208943 Apache Spark提供的两种基于命令行的处理交互方式虽然足够灵活,但在企业应用中面临诸如部署、安全等问题。为此本文引入Livy这样一个基于Apache Spark的REST服务,它不仅以REST的方式代替了Spar…

Livy安装使用

本次部署的livy是0.7.0版,zip包下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip 安装java jdk1.8 步骤: 一、将下载好的livy的zip包用命令unzip去解压(如果…

livy的安装使用

2019独角兽企业重金招聘Python工程师标准>>> livy简介 Livy是一个提供rest接口和spark集群交互的服务。它可以提交spark job或者spark一段代码,同步或者异步的返回结果;也提供sparkcontext的管理,通过restfull接口或RPC客户端库。Livy也简化了与spark与应用服务的交…

Livy任务提交源码解析

文章目录 简介任务路由代码断任务远程Driver上建立RpcServerLivyServer接收客户端提交代码断任务LivyServer向远程Driver的RpcServer提交任务远程Driver的RpcServer接收任务Driver执行代码断任务Batch任务LivyServer接收batch任务创建BatchSession以提交Spark任务创建SparkYarn…

livy简介

livy简介 什么是livy Livy通过提供REST服务来简化与Spark集群的交互。它可以通过job或者代码片段的方式来提交Spark任务,并同步或者异步地获得任务的结果,以及管理spark context,上述功能通过简单的REST接口或者RPC服务来实现。livy也可以简…

livy部署及应用

一、介绍 Livy把spark交互式和批处理都搬到了web上,提供restful接口,Livy一方面接收并解析客户端提交的REST请求,转换成相应的操作,另一方面它管理着客户端所启动的spark集群 Livy会为用户运行多个session,每个sessio…

C/C++ 实现字符串IP与整数型IP的相互转换

#include <stdio.h> int main() {char ip[32] "192.168.1.151"; //IP值char scIPAddress[32] ""; //存储字符串IPunsigned int nIPAddress 0; //存储整形IPint nTmpIP[4] {0}; //分割IPint i0;//字符串转整形sscanf(ip,"%d.%d.%d.%…

数字字符串转化成 IP 地址

数字字符串转化成 IP 地址 1、参考资料 https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e 2、题目要求 题目描述 现在有一个只包含数字的字符串&#xff0c;将该字符串转化成IP地址的形式&#xff0c;返回所有可能的情况。 例如&#xff1a; 给出的字…

IP地址(IPV6)与long数组之间的转换

IP地址&#xff08;IPV6&#xff09;与long数组之间的转换 《IP地址&#xff08;IPV4&#xff09;与int类型之间的转换》《IP地址&#xff08;IPV6&#xff09;与long数组之间的转换》 一、前言 IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#…

如何将字符数串和IP地址进行转换?

这一部分主要是网络编程中会使用&#xff0c;将数串和IP地址进行转换&#xff0c;在进行转换之前&#xff0c;我们需要知道IP地址在linux系统中的结构体定义 地址类型结构体 具体如下表&#xff1a; 结构体功能特性struct sockaddr套接字地址结构IPv4/IPv6通用struct sockad…

如何将IP地址字符串转换为数字数组

如何将IP地址字符串转换为数字数组 最近在做一个项目用到LWIP&#xff0c;通过触摸屏幕上的数字键盘输入要设置的IP地址和网关地址&#xff0c;然后再用输入的地址去设置重新设置lwip。那么问题就来了&#xff0c;输入的IP地址字符串应该怎么去转换成 ip[4] 数组呢&#xff1f…

IP地址字符串和数组相互转换

需求描述&#xff1a; 将字符串“192.168.2.126”&#xff0c;转成Byte类型&#xff0c;存放在字节数组中。数组内容为 192,168,2&#xff0c;126。反之亦然。 实现方法&#xff1a; 通过C# 库中的IPAddress类完成。 IPAddress类 对应的命名空间是using System.Net; 实现代…

花3个月面过华为测开岗,拿个30K不过分吧?

计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在一家初创…

华为OD德科面试+机试记录

一、机试&#xff08;6.25&#xff09; 三道编程题&#xff0c;难度偏中。由于时间久远&#xff0c;只记得其中两道题目 1、找车位&#xff08;动态规划&#xff09; 2、题目不记得了&#xff0c;后面如果找到会补充&#xff08;双指针&#xff09; 3、高效的任务规划&#x…

准备4个月过华为测试岗,拿个23k应该不多吧

我大学是学的编程专业&#xff0c;写代码能力非常一般&#xff0c;之前有一个学校项目经验和两段实习。第一份实习是在进大三之前的暑假在广州一家软件公司做前端&#xff0c;第二份实习时大三暑假两个月在一家刚创业的公司做全栈。 我面试的是测试开发&#xff0c;在2022年初…

vSphere Client连接主机提示远程服务器响应时间过长

问题现象 使用VMware vSphere Client连接EXSi主机时&#xff0c;提示“由于远程服务器响应时间过长&#xff0c;请求失败&#xff08;操作超时&#xff09;”。 解决方法 打开Windows注册表&#xff0c;找到HKEY_CURRENT_USER\Software\VMware\VMware Infrastructure Clien…

官网下载eclipse出现mirror.kakao.com 的响应时间过长+解决方法

Eclipse官网:https://www.eclipse.org/downloads/ 问题&#xff1a;官网下载eclipse出现mirror.kakao.com 的响应时间过长 原因&#xff1a;防火墙导致 解决:选择下载国内的镜像 详细过程如下&#xff1a; 每次下载都出现类似下图这样无法访问页面的界面 出现这个的原因大概…