共计 1959 个字符,预计需要花费 5 分钟才能阅读完成。
本篇内容介绍了“怎么在 Yarn 集群中分配 Container”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
YarnAllocator 从字面意思来看,也应该知道是在 Yarn 集群中分配 Container 的。
private[yarn] class YarnAllocator(
driverUrl: String,
driverRef: RpcEndpointRef,
conf: YarnConfiguration,
sparkConf: SparkConf,
amClient: AMRMClient[ContainerRequest],
appAttemptId: ApplicationAttemptId,
securityMgr: SecurityManager,
localResources: Map[String, LocalResource],
resolver: SparkRackResolver,
clock: Clock = new SystemClock)
其中 driverUrl 就是 Driver 的地址。当用 YarnAllocator 分配 Container 来运行 Executors 时,这些 Executors 要联系的 Driver 地址就是构造函数里的 driverRef 参数。
requestTotalExecutorsWithPreferredLocalities 方法是分配多个 Executor 的,先将分配请求保存在队列里,然后在守护线程中异步的创建 Executor。
def requestTotalExecutorsWithPreferredLocalities(
requestedTotal: Int,
localityAwareTasks: Int,
hostToLocalTaskCount: Map[String, Int],
nodeBlacklist: Set[String]): Boolean = synchronized {
this.numLocalityAwareTasks = localityAwareTasks
this.hostToLocalTaskCounts = hostToLocalTaskCount
if (requestedTotal != targetNumExecutors) { logInfo(s Driver requested a total number of $requestedTotal executor(s). )
targetNumExecutors = requestedTotal
allocatorBlacklistTracker.setSchedulerBlacklistedNodes(nodeBlacklist)
true
} else {
false
}
}
targetNumExecutors 就是说明要申请创建多少个 Executor 的意思。具体的实际创建动作是在 runAllocatedContainers 中执行的。
launcherPool.execute(() = {
try {
new ExecutorRunnable( Some(container),
conf,
sparkConf,
driverUrl,
executorId,
executorHostname,
executorMemory,
executorCores,
appAttemptId.getApplicationId.toString,
securityMgr,
localResources
).run()
updateInternalState()
} catch {
}
这一段就是在分配的 Container 上创建 Executor 的过程,用 ExecutorRunner 来包装的。其中的 driverUrl 就是构造函数中带过来的 driver 的地址。
可见每个 driver 都会创建一个属于自己的单独的 YarnAllocator。
顺便说一句,很多人以前 Spark 是集群,实际上 Spark 本身只是一种计算方式,可以看成它只是 jar 包。Spark 的 driver 运行时才会去申请 Executor,向 Yarn 申请或者向 Standalone 集群申请。Standalone 集群是指 Master 和 Worker,不是指 Spark core,更不是指 SparkContext。
“怎么在 Yarn 集群中分配 Container”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!