Apache spark 应该在什么条件下使用集群部署模式而不是客户端?
医生 将部署模式描述为:Apache spark 应该在什么条件下使用集群部署模式而不是客户端?,apache-spark,Apache Spark,医生 将部署模式描述为: --deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client) 将此图图1用作指南(摘自): 如果我开始一项有火花的工作: ./bin/spark-submit \ --class com.driver \ --master spark://MY_MAST
--deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client)
将此图图1
用作指南(摘自):
如果我开始一项有火花的工作:
./bin/spark-submit \
--class com.driver \
--master spark://MY_MASTER:7077 \
--executor-memory 845M \
--deploy-mode client \
./bin/Driver.jar
然后,驱动程序
将是我的主程序
,如图1所示
如果改用--deploy mode cluster
,那么驱动程序将在工作节点之间共享?如果这是真的,那么这是否意味着fig1
中的Driver Program
框可以删除(因为它不再使用),因为SparkContext
也将在工作节点之间共享
应该使用集群
来代替客户端
?否,当部署模式为客户端
时,驱动程序不一定是主节点。您可以在笔记本电脑上运行spark submit,驱动程序也可以在笔记本电脑上运行
相反,当部署模式为集群时,则使用集群管理器(主节点)查找具有足够可用资源的从节点,以执行驱动程序。因此,驱动程序将在其中一个从节点上运行。由于它的执行是委托的,您无法从驱动程序获得结果,它必须将其结果存储在文件、数据库等中
- 客户端模式
- 想要获得作业结果(动态分析)
- 易于开发/调试
- 控制驱动程序运行的位置
- 始终启动应用程序:将Spark作业启动器作为REST服务或Web UI公开
- 集群模式
- 更易于资源分配(由主控决定):开火并忘记
- 像其他工作人员一样,从主Web UI监视驱动程序
- 结束时停止:完成一个作业,释放分配的资源
我想这可能有助于您理解文件中的内容
它说:“一种常见的部署策略是从网关计算机提交应用程序,该网关计算机与您的工作计算机(例如,独立EC2集群中的主节点)物理上位于同一位置。在此设置中,客户端模式是合适的。在客户端模式中,驱动程序直接在spark submit进程中启动,该进程充当群集的客户端。应用程序的输入和输出连接到控制台。因此,此模式特别适合于涉及REPL的应用程序(例如spark shell)
或者,如果您的应用程序是从远离工作机器的机器(例如,在笔记本电脑上本地)提交的,则通常使用群集模式来最小化驱动程序和执行程序之间的网络延迟。请注意,目前Mesos群集或Python应用程序不支持群集模式。“HADR如何
- 在集群模式下,纱线重新启动驱动程序而不会杀死执行器
- 在客户端模式下,如果您的驱动程序被杀死,纱线会自动杀死所有执行器
在客户端模式下,为什么说“更易于开发/调试”?因此,听起来像:客户端模式意味着驱动程序是运行spark submit的机器?所以,如果有一个集群,部署模式是client,那么驱动程序就是您提交的机器,只要集群配置正确,它就会在集群上并行运行?另外,它听起来像:集群模式意味着您提交的机器需要成为主节点?