我使用dask_yarn
(knit
的一部分)来启动Dask Yarn集群,如下所示:
import dask_yarn
cluster = dask_yarn.DaskYARNCluster(env='/home/hadoop/reqs/dvss.zip', lang='en_US.UTF-8')
cluster.start(n_workers=4, memory=5120, cpus=3)
这会在AM的核心节点上请求1个vCore,并将其余的vCore提供给工作人员。
在Spark中,我可以选择以yarn-client
模式运行应用程序,这将使驱动程序在主节点上运行,然后工作人员可以自由使用所有核心节点资源。是否可以对dask_yarn
执行相同的操作?
答案 0 :(得分:0)
我认为你可能误解了spark中两种部署模式的含义。
有两种部署模式可用于在YARN上启动Spark应用程序。在集群模式下,Spark驱动程序在应用程序主进程内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后消失。在客户端模式下,驱动程序在客户端进程中运行,应用程序主服务器仅用于从YARN请求资源。
据此我了解ApplicationMaster始终存在,因此必须分配一些资源。问题是是否需要在纱线之外单独的客户流程。
对于knit
,还总有一个ApplicationMaster和一个客户端进程 - 它有效地实现了客户端模式。此外,使用Dask调度程序的python进程将运行。这可能有点浪费,我们希望不需要(java)客户端进程,但它很小。
对于ApplicationMaster的要求,YARN标准实际上非常轻。请注意,YARN是资源分配服务,并且在容器请求时实际上不会耗尽系统资源。