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

时间:2015-03-02 10:27:17

标签: 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)

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

enter image description here

如果我启动Spark工作:

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

然后Driver ProgramMY_MASTER fig1 MY_MASTER中指定的--deploy-mode cluster

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

应该{​​{1}}使用client代替{{1}}?

3 个答案:

答案 0 :(得分:90)

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

HADR怎么样?

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