上一篇的例子采纳Livy默认的Local模式运行Spark工作。本篇咱们尝试一下其余模式。因为批改配置文件须要重启,而每次重启服务都要设置SPARK_HOMEHADOOP_CONF_DIR比拟麻烦。咱们首先批改一下conf/livy-env.sh

cp conf/livy-env.sh.template conf/livy-env.shvi conf/livy-env.sh# 将环境变量增加进来,每次重启会主动使环境变量失效HADOOP_CONF_DIR=/etc/hadoop/confSPARK_HOME=/home/spark-2.4.1-bin-hadoop2.7
许多apache软件都采纳同样的套路,例如spark, zeppelin。所以弄的货色多了,即便没有文档领导也能猜测出配置的形式

Standalone集群模式

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

spark://vm3198:7077

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

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

重启服务

bin/livy-server stopbin/livy-server start

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

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

driver其实运行在livy所在的服务器上,作为livy的子过程,由livy治理。尽管从过程关系上与local模式没什么区别。然而咱们晓得,实质上,local模式其实是在一个过程中通过多个线程来运行driver和executor的;而standalone模式时,这个过程仅仅运行driver,而真正的job是在spark集群运行的。显然,standalone模式更正当一些。

笔者尝试通过批改livy.spark.deploy-mode = cluster,然而这种模式下无奈胜利运行session。所以standalone模式中,只能采纳client模式

yarn模式

咱们晓得,生产环境最好配合yarn来运行spark工作。所以必须要试验一下yarn模式。因为yarn-client模式实质上与standalone区别不大。所以间接抉择yarn-cluster模式。

批改conf/livy.conf,设置如下参数,设置yarn-cluster模式:

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利用:

进一步到spark界面查看executor:

留神到这次同样启动了1个driver和2个executor,然而区别在于driver并不是启动在livy所在服务器的。这与yarn-cluster模式的行为始终。

再次查看livy的webui,看到刚刚创立的这个利用:

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

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

进一步,咱们还是通过python代码提交两个job。查看ui界面看到两个工作曾经执行胜利:

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

...20/10/01 20:04:18 INFO driver.RSCDriver: Connecting to: vm3198:1000020/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是如何反对多种运行模式的。