Apache Livy 安装部署使用示例

article/2025/10/13 8:01:21

Livy 安装部署使用示例

      • 1. Apache Livy 简介
      • 2. 安装前置要求
      • 3.下载安装包配置相关配置文件
      • 4. 启动服务配置使用
      • 5.提交任务获取运行结果
      • 6.拓展参考


1. Apache Livy 简介

官网:https://livy.apache.org/

Livy是一个提供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提交。

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

  1. 支持jar和snippet code
  2. 支持SparkContext和Job的管理
  3. 支持不同SparkContext运行在不同进程,同一个进程只能运行一个SparkContext
  4. 支持Yarn cluster模式
  5. 提供restful接口,暴露SparkContext

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHen0wyM-1648538166777)(/Users/yangkezhen/Library/Application Support/typora-user-images/image-20220329114534773.png)]

2. 安装前置要求

  1. Spark 版本要求 1.6版本以上,支持的scala 版本为2.10 或者scala 2.11

  2. 设置环境变量

    # 选择自己版本的Spark 和Hadoop 的目录
    export SPARK_HOME=/usr/lib/spark
    export HADOOP_CONF_DIR=/etc/hadoop/conf
    
  3. 注意:Spark3.0 版本及3.1 3.2 版本采用的是scala 2.12 与Livy 要求的不一致会导致报错,Livy 暂时不支持Scala 的2.12 版本

3.下载安装包配置相关配置文件

下载地址:https://livy.apache.org/download

Livy官网:https://livy.apache.org/get-started/

1.下载相关压缩包
livy-0.5.0-incubating-bin.zip
2.解压到指定目录
tar -zxvf livy-0.5.0-incubating-bin.zip -C ../app/
3.软连接
ln -s livy-0.5.0-incubating-bin livy

修改相关配置文件

livy.conf

livy.spark.master = yarn
livy.spark.deployMode = cluster
livy.environment = production
livy.impersonation.enabled = true
livy.server.csrf_protection.enabled false
livy.server.port = 8998
livy.server.session.timeout = 3600000
livy.server.recovery.mode = recovery
livy.server.recovery.state-store=filesystem
livy.server.recovery.state-store.url=/tmp/livy

livy-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_231
export HADOOP_HOME=/home/hadoop/app/hadoop
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop/bin/hadoop/etc/hadoop
export SPARK_CONF_DIR=/home/hadoop/app/spark/conf
export SPARK_HOME=/home/hadoop/app/spark/
export LIVY_LOG_DIR=/home/hadoop/app/livy/log
export LIVY_PID_DIR=/home/hadoop/app/livy/pid-dir
export LIVY_SERVER_JAVA_OPTS="-Xmx2g"

Spark-blacklist.sh

spark.master
spark.submit.deployMode# Disallow overriding the location of Spark cached jars.
spark.yarn.jar
spark.yarn.jars
spark.yarn.archive# Don't allow users to override the RSC timeout.
livy.rsc.server.idle-timeout

修改Hadoop 配置文件 core-site.xml

 <property><name>hadoop.proxyuser.livy.groups</name><value>*</value>
</property>
<property><name>hadoop.proxyuser.livy.hosts</name><value>*</value>
</property>

HDFS 上面创建livy 的用户目录

hdfs dfs -mkdir -p /user/livy
hdfs dfs -chown livy:supergroup /user/livy

4. 启动服务配置使用

启动Hadoop 和Livy

sh /home/hadoop/app/livy/bin/livy-server start

进入log 目录查看启动日志

22/03/28 19:56:29 INFO LineBufferedStream: stdout: Welcome to
22/03/28 19:56:29 INFO LineBufferedStream: stdout:       ____              __
22/03/28 19:56:29 INFO LineBufferedStream: stdout:      / __/__  ___ _____/ /__
22/03/28 19:56:29 INFO LineBufferedStream: stdout:     _\ \/ _ \/ _ `/ __/  '_/
22/03/28 19:56:29 INFO LineBufferedStream: stdout:    /___/ .__/\_,_/_/ /_/\_\   version 2.4.5
22/03/28 19:56:29 INFO LineBufferedStream: stdout:       /_/
22/03/28 19:56:29 INFO LineBufferedStream: stdout:
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Using Scala version 2.11.12, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_231
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Branch HEAD
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Compiled by user centos on 2020-02-02T19:38:06Z
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Revision cee4ecbb16917fa85f02c635925e2687400aa56b
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Url https://gitbox.apache.org/repos/asf/spark.git
22/03/28 19:56:29 INFO LineBufferedStream: stdout: Type --help for more information.
22/03/28 19:56:29 WARN LivySparkUtils$: Current Spark (2,4) is not verified in Livy, please use it carefully
22/03/28 19:56:30 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
22/03/28 19:56:30 INFO RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
22/03/28 19:56:30 INFO StateStore$: Using FileSystemStateStore for recovery.
22/03/28 19:56:30 INFO BatchSessionManager: Recovered 0 batch sessions. Next session id: 0
22/03/28 19:56:30 INFO InteractiveSessionManager: Recovered 0 interactive sessions. Next session id: 0
22/03/28 19:56:30 INFO InteractiveSessionManager: Heartbeat watchdog thread started.
22/03/28 19:56:30 INFO WebServer: Starting server on http://hadoop01:12889

访问Livy 对应web 地址:http://localhost:8998

5.提交任务获取运行结果

新建Session

post http://localhost:8998/sessions
{ "kind":"spark"}执行结果为:
{"id": 0, -- session id "appId": null,"owner": null,"proxyUser": null,"state": "starting", -- session 状态"kind": "spark","appInfo": { -- app 信息"driverLogUrl": null,"sparkUiUrl": null},"log": ["stdout: ","\nstderr: ","\nYARN Diagnostics: "]
}

提交代码片段测试:

1.提交代码片段
POST  http://localhost:8998/sessions/0/statements
参数:{  "code":"sc.makeRDD(List(1,2,3,4)).count"}2.查看执行结果:
GET http://localhost:8998/sessions/0/statements/0
结果为:
{"id": 0,"code": "sc.makeRDD(List(1,2,3,4)).count","state": "available","output": {"status": "ok","execution_count": 0,"data": {"text/plain": "res0: Long = 4\n"}},"progress": 1.0
}

提交Jar 包测试:

POST http://localhost:8998/batches
参数:
{"file":"hdfs://hadoop01:9000/data/jars/spark-examples_2.11-2.4.5.jar","className":"org.apache.spark.examples.SparkPi","name":"SparkPi"
}获取执行结果:
GET http://localhost:8998/batches{"from": 0,"total": 1,"sessions": [{"id": 2,"state": "success","appId": "application_1648535069074_0001","appInfo": {"driverLogUrl": null,"sparkUiUrl": "http://hadoop01:8088/proxy/application_1648535069074_0001/"},"log": ["\t queue: root.hadoop","\t start time: 1648535413833","\t final status: UNDEFINED","\t tracking URL: http://hadoop01:8088/proxy/application_1648535069074_0001/","\t user: hadoop","22/03/29 14:30:14 INFO ShutdownHookManager: Shutdown hook called","22/03/29 14:30:14 INFO ShutdownHookManager: Deleting directory /tmp/spark-75f3b2db-7972-463c-894a-2f1190584242","22/03/29 14:30:14 INFO ShutdownHookManager: Deleting directory /tmp/spark-f9de9d4c-d5ef-4c39-875a-30228cd8164c","\nstderr: ","\nYARN Diagnostics: "]}]
}

配置提交参数进行测试:需要注意参数的类型

POST http://localhost:8998/batches{"file":"hdfs://hadoop01:9000/data/jars/spark-examples_2.11-2.4.5.jar","className":"org.apache.spark.examples.SparkPi","name":"SparkPi","proxyUser":"hadoop","driverMemory":"1g","executorMemory":"2g","numExecutors":2,"queue":"root.default"}查询结果为:根据提交时返回的ID 匹配对应的结果
http://localhost:8998/batches
{"id": 6,"state": "starting","appId": "application_1648535069074_0003","appInfo": {"driverLogUrl": null,"sparkUiUrl": null},"log": ["\t queue: root.default","\t start time: 1648535958201","\t final status: UNDEFINED","\t tracking URL: http://hadoop01:8088/proxy/application_1648535069074_0003/","\t user: hadoop","22/03/29 14:39:18 INFO ShutdownHookManager: Shutdown hook called","22/03/29 14:39:18 INFO ShutdownHookManager: Deleting directory /tmp/spark-3167a453-a1d8-436a-b20c-412c9fb33ac9","22/03/29 14:39:18 INFO ShutdownHookManager: Deleting directory /tmp/spark-b048a123-8e7e-4d4a-8fde-9ff8c047f685","\nstderr: ","\nYARN Diagnostics: "]}

Yarn 上的信息为:

在这里插入图片描述

Starting with version 0.5.0-incubating, each session can support all four Scala, Python and R interpreters with newly added SQL interpreter. The kind field in session creation is no longer required, instead users should specify code kind (spark, pyspark, sparkr or sql) during statement submission.

创建SQL 方式的Session 初始化的是SparkSession 并不能直接查存在Hive 表里面的数据,这个部分还需进一步实现

6.拓展参考

有兴趣的可以参考如下文章对Livy 进行个性化定制

1.https://www.freesion.com/article/92911087759/

2.livy在交互式查询中的深度定制


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

相关文章

Livy REST API使用教程

Livy概述 用过Spark的朋友对Livy一定不陌生&#xff0c;Livy是Apache Spark下的一个REST服务&#xff0c;通过Livy&#xff0c;你只要可以发送Http请求&#xff0c;就可以提交Spark任务。Livy在很多Spark数据平台上都作为一个提交任务的重要工具&#xff0c;你可以不知道Livy是…

最全livy代码实战

livy分析应用实战 Github地址&#xff1a;最全livy代码实战 Apache Livy提供Rest service来与Apache Spark进行交互&#xff0c;通过Rest interface或RPC client来简化spark job和spark code snippet的提交&#xff0c;同步或异步获取结果&#xff0c;并提供对spark context的管…

livy部署和使用

部署 使用版本&#xff1a;apache-livy-0.7.1 环境&#xff1a;spark(配置中已添加hive-site.xml) , hive ,hadoop(hdfsyarn) 基于centos livy只需要配置两个文件(livy-env.sh,livy.conf)&#xff1a; livy-env.sh 中添加环境变量配置 export JAVA_HOME/usr/local/jdk/jdk1.8…

Spark开源REST服务——Apache Livy(Spark 客户端)

文章目录 一、概述二、Apache Livy模块介绍1&#xff09;Client2&#xff09;router3&#xff09;权限管理4&#xff09;生成 Spark App5&#xff09;交互式 Driver6&#xff09;状态数据存储 三、Apache Livy架构1&#xff09;Livy架构2&#xff09;Livy执行作业流程 四、环境…

spark系列-应用篇之通过livy提交Spark任务

#前言 上一篇使用yarn api的提交spark任务比较麻烦&#xff0c; 这次我们使用livy来提交spark任务。livy的使用十分简单&#xff0c;功能上比yarn api还要强大&#xff0c;支持提交spark代码片断&#xff0c;session共享 #安装 下载livy0.5.0&#xff0c;下载完成后进行解压。…

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

背景&#xff1a; Apache Spark 是一个比较流行的大数据框架、广泛运用于数据处理、数据分析、机器学习中&#xff0c;它提供了两种方式进行数据处理&#xff0c;一是交互式处理&#xff1a;比如用户使用spark-shell&#xff0c;编写交互式代码编译成spark作业提交到集群上去执…

Livy简单使用 架构解读

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

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

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

Livy:基于Apache Spark的REST服务

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

Livy安装使用

本次部署的livy是0.7.0版&#xff0c;zip包下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip 安装java jdk1.8 步骤&#xff1a; 一、将下载好的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任务&#xff0c;并同步或者异步地获得任务的结果&#xff0c;以及管理spark context&#xff0c;上述功能通过简单的REST接口或者RPC服务来实现。livy也可以简…

livy部署及应用

一、介绍 Livy把spark交互式和批处理都搬到了web上&#xff0c;提供restful接口&#xff0c;Livy一方面接收并解析客户端提交的REST请求&#xff0c;转换成相应的操作&#xff0c;另一方面它管理着客户端所启动的spark集群 Livy会为用户运行多个session&#xff0c;每个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; 实现代…