【问题标题】:What conditions should cluster deploy mode be used instead of client?什么情况下应该使用集群部署模式而不是客户端?
【发布时间】:2017-03-09 02:39:22
【问题描述】:

文档https://spark.apache.org/docs/1.1.0/submitting-applications.html

将部署模式描述为:

--deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client)

使用此图fig1 作为指导(取自http://spark.apache.org/docs/1.2.0/cluster-overview.html):

如果我启动 Spark 工作:

./bin/spark-submit \
  --class com.driver \
  --master spark://MY_MASTER:7077 \
  --executor-memory 845M \
  --deploy-mode client \
  ./bin/Driver.jar

那么Driver Program 将是MY_MASTER,如fig1 MY_MASTER 中所指定的那样

如果我改为使用--deploy-mode cluster,那么Driver Program 将在工作节点之间共享?如果这是真的,那么这是否意味着fig1 中的Driver Program 框可以被删除(因为它不再被使用),因为SparkContext 也将在工作节点之间共享?

应该使用cluster 代替client 的条件是什么?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    不,当deploy-mode为client时,驱动程序不一定是主节点。您可以在笔记本电脑上运行 spark-submit,驱动程序将在笔记本电脑上运行。

    相反,当deploy-mode为cluster时,则使用集群管理器(主节点)寻找一个有足够可用资源的从节点来执行驱动程序。结果,驱动程序将在其中一个从节点上运行。由于它的执行是委托的,你无法从驱动程序中获取结果,它必须将其结果存储在文件、数据库等中。

    • 客户端模式
      • 想得到工作结果(动态分析)
      • 更易于开发/调试
      • 控制驱动程序的运行位置
      • 始终启动应用程序:将 Spark 作业启动器公开为 REST 服务或 Web UI
    • 集群模式
      • 更容易分配资源(让主人决定):一劳永逸
      • 像其他工作人员一样从 Master Web UI 监控您的驱动程序
      • 最后停止:完成一项作业,释放分配的资源

    【讨论】:

    • 在客户端模式要点,为什么你说:“更容易开发/调试”?
    • 所以,听起来像:客户端模式意味着驱动程序是运行 spark-submit 的任何机器?那么如果有一个集群,并且部署模式是客户端,那么驱动就是你提交的机器,只要集群配置正确,它会在集群上并行运行吗?另外,听起来像:集群模式意味着您提交的机器需要成为主节点?
    【解决方案2】:

    我想这可以帮助你理解。在文档https://spark.apache.org/docs/latest/submitting-applications.html 它说“一种常见的部署策略是从与您的工作机器物理位于同一位置的网关机器(例如,独立 EC2 集群中的主节点)提交您的应用程序。在此设置中,客户端模式是合适的。在客户端模式下,驱动程序直接在作为集群客户端的 spark-submit 进程中启动。应用程序的输入和输出附加到控制台。因此,这种模式特别适用于涉及 REPL 的应用程序(例如 Spark shell )。

    或者,如果您的应用程序是从远离工作机器的机器提交的(例如,在您的笔记本电脑上本地),通常使用集群模式来最大限度地减少驱动程序和执行程序之间的网络延迟。请注意,Mesos 集群或 Python 应用程序目前不支持集群模式。”

    【讨论】:

      【解决方案3】:

      HADR 呢?

      • 在集群模式下,YARN 会重新启动驱动程序而不杀死执行程序。
      • 在客户端模式下,如果您的驱动程序被杀死,YARN 会自动杀死所有执行程序。

      【讨论】:

        猜你喜欢
        • 2019-11-15
        • 1970-01-01
        • 2019-08-13
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 2019-09-15
        相关资源
        最近更新 更多