Yarn的两种deploy-mode模式
程序员文章站
2022-05-19 13:38:13
...
区别
yarn 有两种模式,分别是 client 和 cluster,那么它们有什么区别呢?
-
Driver的运行位置:
client:Driver运行在Client端(即提交作业的机器);
cluster:Driver运行在ApplicationMaster中; -
客户端是否能退出
client:因为client会和请求到的Container进行通信来完成作业的调制和执行,所以不能退出;
cluster:clinet只要提交完作业后就可以关掉,因为作业已经在yarn运行了; -
ApplicationMaster的职责
clinet:到Yarn Resource Manager去申请资源;
cluster:除了要申请资源,还要处理作业调度; -
运行的输出日志的位置
clinet:日志会输出到控制台,便于测试
cluster:因为日志在Driver上,所以需要通过命令$ yarn logs -applicationId <app ID>
(前提是要配置属性 yarn.log-aggregation-enable)或者在Spark Web UI上来查看日志
以下是两张对比图
案例
下面就在两个不同的模式下进行测试
1、使用 client 模式,这个Pi的例子就是官网提供的,我们直接执行一下
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
在Web UI上查看结果
可以看到,用了26s执行成功了
2、使用 cluster 模式
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster\
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
在Web UI上查看结果,一直处于Pending状态,猜想可能是资源不够,遂将其kill,后来将参数调小后,就可以执行成功,如下
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
在Web UI上查看结果
猜想原因可能是Driver运行在ApplicationMaster中所以拿到的内存达不到4G