上一篇的例子采用Livy默认的Local模式运行Spark任务。本篇咱们尝试一下其余模式。由于修改配置文件须要重启,而每次重启服务都要设置SPARK_HOME
和HADOOP_CONF_DIR
比较麻烦。咱们首先修改一下conf/livy-env.sh
:python
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。因此弄的东西多了,即便没有文档指导也能猜想出配置的方式
首先咱们须要部署一个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-0
:restful
这个session关联了1个driver和2个executor:session
driver其实运行在livy所在的服务器上,做为livy的子进程,由livy管理。虽然从进程关系上与local模式没什么区别。可是咱们知道,本质上,local模式实际上是在一个进程中经过多个线程来运行driver和executor的;而standalone模式时,这个进程仅仅运行driver,而真正的job是在spark集群运行的。显然,standalone模式更合理一些。app
笔者尝试经过修改livy.spark.deploy-mode = cluster,可是这种模式下没法成功运行session。因此standalone模式中,只能采用client模式
咱们知道,生产环境最好配合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
进一步到spark界面查看executor:
注意到此次一样启动了1个driver和2个executor,可是区别在于driver并非启动在livy所在服务器的。这与yarn-cluster
模式的行为一直。
再次查看livy的webui,看到刚刚建立的这个应用:
这里注意到一个细节,Logs列有两个连接,一个是session,一个是drvier。点进去看,能够察觉到:
进一步,咱们仍是经过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: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是如何支持多种运行模式的。