上一篇的例子采纳Livy默认的Local模式运行Spark工作。本篇咱们尝试一下其余模式。因为批改配置文件须要重启,而每次重启服务都要设置SPARK_HOME
和HADOOP_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是如何反对多种运行模式的。