对于在YARN上运行的spark应用程序,哪种部署模式更好 - 客户端或集群

时间:2016-11-02 21:30:00

标签: hadoop apache-spark yarn

我理解YARN上Spark应用程序的客户端和集群模式之间的主要区别。

主要差异包括

  1. 驱动程序在哪里运行 - clinet模式下的Local,集群模式下的Application Master
  2. 客户端运行时间 - 在clinet模式下,客户端需要运行整个持续时间, 在集群模式下,客户端无需在AM处理它时运行
  3. 交互式使用 - spark shell和pyspark。群集模式不适合这些 要求驱动程序在客户端上运行
  4. 安排工作 - 在客户端模式下,客户端通过直接与容器通信来安排工作。 在群集模式下,A通过直接与容器通信来安排工作
  5. 在两种相似的情况下

    1. 谁处理来自YARN的执行者请求 - 应用程序主机
    2. 谁启动执行程序进程 - YARN节点管理器
    3. 我的问题是 - 在现实场景(生产环境)中,我们不需要交互模式,客户端不需要长时间运行 - 集群模式是一个明显的选择吗?

      客户端模式是否有任何好处,如:

      • 在客户端计算机上运行驱动程序而不是AM
      • 允许客户安排工作,而不是AM

2 个答案:

答案 0 :(得分:2)

从文档中

  

常见的部署策略是从a。提交您的应用程序   与您的工作人员物理位置相同的网关机器   机器(例如独立EC2集群中的主节点)。在这   设置,客户端模式是合适的。在客户端模式下,驱动程序是   直接在客户端spark-submit进程中启动,用   连接到控制台的应用程序的输入和输出。从而,   此模式特别适用于涉及的模式   REPL(例如Spark shell)。

     

或者,如果您的应用程序是从远程机器提交的   从工作机器(例如,在您的笔记本电脑上本地),这是常见的   使用群集模式来最小化驱动程序之间的网络延迟   和遗嘱执行人。请注意,目前不支持群集模式   对于独立群集,Mesos群集或python应用程序。

看起来,主要原因是当我们从远程运行spark-submit时,为了减少执行程序和驱动程序之间的延迟,首选集群模式。

答案 1 :(得分:1)

根据我的经验,在生产环境中,唯一合理的模式是集群模式,有两个例外:

  • 当hadoop节点没有应用程序所需的资源时,例如:执行结束时,spark job会对无法从hadoop节点访问的服务器执行ssh
  • 当您使用spark streaming并且想要正常关闭它时(终止群集模式应用程序会强制关闭流式传输,如果您在客户端模式下运行,则可以调用ssc.stop(stopGracefully = true)