Spark 的 Yarn-cluster 模式和 Yarn-client 模式

Spark 支持 Yarn 集群的部署模式,在 Spark On Yarn 模式下,每个 Spark 的 Executor 作为一个 Yarn container 在运行,同事支持多个任务在同一个 container 中运行。

Yarn 的 Application Master 概念:在 Yarn 中,每个 application 都有一个 Application 都有一个 Application Master 进程,它是 Application 启动的第一个容器,负责从 ResourceManager 中申请资源,分配资源,同时通知 NodeManager 来为 Application 启动 Container。

Spark On Yarn 有两种模式,一种是 Yarn-client 模式,一种是 Yarn-cluster 模式。一般情况下,Yarn-client 模式使用在调试模式下,Yarn-cluster 模式使用在生产环境中。

1,Yarn-cluster 模式

在 Yarn-cluster 模式下,driver 运行在 Appliaction Master 上,Appliaction Master 进程同时负责驱动 Application 和从 Yarn 中申请资源,该进程运行在 Yarn container 内,所以启动 Application Master 的 client 可以立即关闭而不必持续到 Application 的生命周期,下图是 Yarn-cluster 模式:

在 Yarn-cluster 模式中,当用户向 Yarn 中提交一个应用程序后,Yarn 将分两个阶段运行该应用程序:

  1. 第一个阶段是把 Spark 的 driver 作为一个 ApplicationMaster 在 Yarn 集群中先启动;
  2. 第二个阶段是由 ApplicationMaster 创建应用程序,然后为它向 ResourceManager 申请资源,并启动 Executor 来运行 Task,同时监控它的整个运行过程,直到运行完成。

应用的运行结果不能在客户端显示(可以在 history server 中查看),所以最好将结果保存在 HDFS 而非 stdout 输出,客户端的终端显示的是作为 Yarn 的 job 的简单运行状况。

2,Yarn-client 模式

在 Yarn-client 中,driver 运行在 client 上,通过 ApplicationMaster 向 RM 获取资源。本地 driver 负责与所有的 executor container 进行交互,并将最后的结果汇总。结束掉终端,相当于 kill 掉这个 Spark 应用。因为 driver 在客户端,所以可以通过 webUI 访问 driver 的状态,默认是 http://hadoop1:4040 访问,而 Yarn 通过 http:// hadoop1:8088 访问。工作流程如下图:

具体的执行流程如下图所示:

对比两种模式可以看出一点,Yarn-client 模式下的 driver 进程执行在本地机器上,而 Yarn-cluster 模式下的 driver 进程执行在 Yarn 集群上面。

参考:www.cnblogs.com/ITtangtang/…

你可能感兴趣的:(Spark 的 Yarn-cluster 模式和 Yarn-client 模式)