Livy探究(二) -- 运行模式

上一篇的例子采用Livy默认的Local模式运行Spark任务。本篇咱们尝试一下其余模式。由于修改配置文件须要重启,而每次重启服务都要设置SPARK_HOMEHADOOP_CONF_DIR比较麻烦。咱们首先修改一下conf/livy-env.shpython

cp conf/livy-env.sh.template conf/livy-env.sh
vi conf/livy-env.sh

# 将环境变量添加进来,每次重启会自动使环境变量生效

HADOOP_CONF_DIR=/etc/hadoop/conf
SPARK_HOME=/home/spark-2.4.1-bin-hadoop2.7
许多apache软件都采用一样的套路,例如spark, zeppelin。因此弄的东西多了,即便没有文档指导也能猜想出配置的方式

Standalone集群模式

首先咱们须要部署一个spark的standalone集群,此处略过部署的过程。假设集群的master地址以下:web

spark://vm3198:7077

修改conf/livy.conf,设置以下参数,指向部署好的spark集群:apache

livy.spark.master = spark://vm3198:7077

重启服务服务器

bin/livy-server stop
bin/livy-server start

用第一篇中的命令建立session,并运行两个例子,能够发现是可以成功的,这里略过这个过程了。重点来看一看提交到集群上的应用。观察spark集群上的应用咱们看到livy在集群上提交了一个application叫livy-session-0restful

image.png

这个session关联了1个driver和2个executor:session

image.png

driver其实运行在livy所在的服务器上,做为livy的子进程,由livy管理。虽然从进程关系上与local模式没什么区别。可是咱们知道,本质上,local模式实际上是在一个进程中经过多个线程来运行driver和executor的;而standalone模式时,这个进程仅仅运行driver,而真正的job是在spark集群运行的。显然,standalone模式更合理一些。app

笔者尝试经过修改livy.spark.deploy-mode = cluster,可是这种模式下没法成功运行session。因此standalone模式中,只能采用client模式

yarn模式

咱们知道,生产环境最好配合yarn来运行spark任务。因此必需要实验一下yarn模式。因为yarn-client模式本质上与standalone区别不大。因此直接选择yarn-cluster模式。oop

修改conf/livy.conf,设置以下参数,设置yarn-cluster模式:ui

livy.spark.master = yarn-cluster
后来经过日志发现Warning: Master yarn-cluster is deprecated since 2.0. Please use master "yarn" with specified deploy mode instead. 因此更好的配置是 livy.spark.master = yarn,而且 livy.spark.deploy-mode = cluster

因为咱们提早设置了HADOOP_CONF_DIR,因此显然livy是能够知道yarn的RM位置的。重启livy后,建立一个session。咱们经过yarn的webui界面能够看到启动的Spark应用:spa

image.png

进一步到spark界面查看executor:

image.png

注意到此次一样启动了1个driver和2个executor,可是区别在于driver并非启动在livy所在服务器的。这与yarn-cluster模式的行为一直。

再次查看livy的webui,看到刚刚建立的这个应用:

image.png

这里注意到一个细节,Logs列有两个连接,一个是session,一个是drvier。点进去看,能够察觉到:

  • session日志显示的是提交spark任务时client打印的日志
  • drvier日志跳转到yarn日志,显示的是driver运行输出的日志

进一步,咱们仍是经过python代码提交两个job。查看ui界面看到两个任务已经执行成功:

image.png

查看livy服务器上与livy有关的进程,以前不管是local模式仍是standalone模式都存在一个SparkSubmit进程。而此次,在yarn-cluster模式下,并无这个进程。那么问题来了,咱们经过restful接口,提交的代码,到底是如何传输到driver进程,并执行的呢?观察日志咱们大概找到写蛛丝马迹。在driver端,找到以下日志:

...
20/10/01 20:04:18 INFO driver.RSCDriver: Connecting to: vm3198:10000
20/10/01 20:04:18 INFO driver.RSCDriver: Starting RPC server...
20/10/01 20:04:18 INFO rpc.RpcServer: Connected to the port 10001
...

带着这些问题,下一篇咱们一块儿去源码中找一下线索。

总结

本篇咱们分别针对standalone和yarn-cluster模式,实验了livy的工做方式。了解了livy是如何支持多种运行模式的。

相关文章
相关标签/搜索