一、介绍
Livy
把spark交互式
和批处理
都搬到了web上,提供restful接口,Livy一方面接收并解析客户端提交的REST请求,转换成相应的操作,另一方面它管理着客户端所启动的spark集群
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,所有的代码、数据都需要通过网络来传输。
二、安装部署
1、下载
解压即可。
2、安装配置
livy只需要配置两个文件(livy-env.sh,livy.conf):
1、livy-env.sh
cp livy-env.sh.template livy-env.sh :
export JAVA_HOME=/home/work/tools/jdk1.8.0_151
export HADOOP_CONF_DIR=/home/work/hadoop3/hadoop-3.3.5/etc/hadoop
export SPARK_HOME=/home/work/hadoop3/spark-3.3.2-bin-hadoop3
export LIVY_SERVER_JAVA_OPTS="-Xmx2g"
#export LIVY_HOME=/home/work/hadoop3/apache-livy-0.7.1-incubating-bin
#export HADOOP_USER_NAME=hdfs
2、livy.conf
cp livy.conf.template livy.conf :
livy.spark.master = yarn
livy.spark.deploy-mode = cluster
livy.server.session.timeout = 1h
livy.repl.jars = local:/home/work/hadoop3/apache-livy-0.7.1-incubating-bin/repl_2.11-jars/commons-codec-1.9.jar,local:/home/work/hadoop3/apache-livy-0.7.1-incubating-bin/repl_2.11-jars/livy-core_2.11-0.7.1-incubating.jar,local:/home/work/hadoop3/apache-livy-0.7.1-incubating-bin/repl_2.11-jars/livy-repl_2.11-0.7.1-incubating.jar
livy.server.yarn.poll-interval = 5s
# 配置 recovery
livy.server.recovery.mode = recovery
livy.server.recovery.state-store = filesystem
livy.server.recovery.state-store.url = hdfs://hadoop01:9000/user/livy/recovery
配置参考:Apache Spark 和 Apache Hadoop 配置属性 - SQL Server Big Data Clusters | Microsoft Learn
3、spark-blacklist.conf
cp spark-blacklist.conf.template spark-blacklist.conf :
# Disallow overriding the master and the deploy mode.
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
4、log4j.properties
cp log4j.properties.template log4j.properties
3、启动
bin/livy-server start
查看启动日志: cat livy-work-server.out
三、同类产品对比
Livy结合了spark job server和Zeppelin的优点,并解决了spark job server和Zeppelin的缺点:
四、Livy执行流程
Livy server启动相应的session,然后提交作业到Yarn集群,当Yarn拉起ApplicationMaster
进程后启动SparkContext
,并连接到Livy Server进行通信。
后续执行的代码会通过Livy server发送到Application进程执行。
具体执行流程说明:
-
live-server启动,启动
BatchSessionManager
,InteractiveSessionManager
。 -
初始化
WebServer
,通过ServletContextListener
启动InteractiveSessionServlet
和BatchSessionServlet
。 -
通过http调用
SessionServlet
的createSession
接口,创建session并注册到sessionManager
,InteractiveSession
和BatchSession
会创建SparkYarnApp
,SparkYarnApp
负责启动Spark作业,并维护yarnclient
,获取作业信息、状态或kill作业。 -
BatchSession
是以jar包的方式提交作业,运行结束后session作业就结束。 -
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请求作业结果。
五、应用实战
Livy的三套接口:
Livy提供三套管理任务的接口分别是:
-
使用
Using the Programmatic API
,通过程序接口提交作业。需要继承com.cloudera.livy.Job
接口编程,通过LivyClient
提交; -
使用
RestAPI
的session接口提交代码段方式运行; -
使用
RestAPI
的batch接口提交jar包方式运行。
1、查看session
curl 'http://hadoop01.com:8998/sessions'
参考:
1)、https://michealkz.blog.youkuaiyun.com/article/details/123822382