应该使用集群部署模式而不是客户端的条件是什么?

blu*_*sky 49 apache-spark

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

将deploy-mode描述为:

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

使用此图表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
Run Code Online (Sandbox Code Playgroud)

然后Driver ProgramMY_MASTER按照指定fig1 MY_MASTER

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

应该cluster用什么条件代替client

G Q*_*ana 92

不,当部署模式是client,驱动程序不一定是主节点.您可以在笔记本电脑上运行spark-submit,并在您的笔记本电脑上运行驱动程序.

相反,当部署模式为时cluster,则集群管理器(主节点)用于查找具有足够可用资源的从站以执行驱动程序.结果,驱动程序将在其中一个从节点上运行.由于委托执行,您无法从驱动程序中获取结果,它必须将其结果存储在文件,数据库等中.

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

  • 所以,听起来像:客户端模式意味着驱动程序是运行spark-submit的哪台机器?因此,如果存在集群​​,并且部署模式是客户端,则驱动程序将是您提交的计算机,并且只要集群配置正确,它将在集群上并行运行?此外,它听起来像:集群模式意味着您在NEEDS上提交的机器是主节点? (3认同)

小智 6

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

或者,如果您的应用程序是从远离工作机器的计算机提交的(例如,在笔记本电脑上本地提交),则通常使用群集模式来最小化驱动程序和执行程序之间的网络延迟.请注意,Mesos群集或Python应用程序当前不支持群集模式."