gpt4 book ai didi

hadoop - 如果没有,如何处理 Spark RDD 分区。执行者 < 没有。 RDD分区

转载 作者:可可西里 更新时间:2023-11-01 14:20:55 24 4
gpt4 key购买 nike

我想了解 Spark Streaming 中的一个基本知识。我有 50 个 Kafka 主题分区和 5 个执行程序,我使用的是 DirectAPI,所以没有。 RDD 分区的数量将为 50。如何在 5 个执行程序上处理该分区?将在每个执行器上一次启动 1 个分区,或者如果执行器有足够的内存和内核,它将在每个执行器上并行处理超过 1 个分区。

最佳答案

Will spark process 1 partition at a time on each executors or if the executor has enough memory and cores it will process more than 1 partition in parallel on each executor.

Spark 将根据您正在运行的作业可用的内核总数来处理每个分区。

假设您的流式传输作业有 10 个执行器,每个执行器有 2 个核心。这意味着您将能够同时处理 10 x 2 = 20 个分区,假设 spark.task.cpus 设置为 1。

如果你真的想知道细节,看Spark Standalone里面从CoarseGrainedSchedulerBackend请求资源,你可以看它的makeOffers:

private def makeOffers() {
// Filter out executors under killing
val activeExecutors = executorDataMap.filterKeys(executorIsAlive)
val workOffers = activeExecutors.map { case (id, executorData) =>
new WorkerOffer(id, executorData.executorHost, executorData.freeCores)
}.toIndexedSeq
launchTasks(scheduler.resourceOffers(workOffers))
}

这里的关键是 executorDataMap,它包含从执行器 ID 到 ExecutorData 的映射,它告诉系统中每个这样的执行器使用了多少核心,并且根据那个和分区的首选位置,对这个任务应该运行哪个执行者进行有根据的猜测。

这是一个从 Kafka 消费的实时 Spark Streaming 应用的示例:

Spark Tasks

我们有 5 个分区,其中有 3 个执行程序在运行,其中每个执行程序都有 2 个以上的核心,这使得流能够同时处理每个分区。

关于hadoop - 如果没有,如何处理 Spark RDD 分区。执行者 < 没有。 RDD分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com