[英]How Spark RDD partitions are processed if no. of executors < no. of RDD partition
我想了解火花流的基本內容。 我有50個Kafka主題分區和5個執行程序,我使用DirectAPI所以沒有。 RDD分區將為50.如何在5個執行程序上處理此分區? 將在每個執行程序上一次激活進程1分區,或者如果執行程序有足夠的內存和核心,它將在每個執行程序上並行處理多個分區。
將在每個執行程序上一次激活進程1分區,或者如果執行程序有足夠的內存和核心,它將在每個執行程序上並行處理多個分區。
Spark將根據您正在運行的作業可用的核心總量來處理每個分區。
假設您的流媒體作業有10個執行器,每個執行器有2個核心。 這意味着假設spark.task.cpus
設置為1,您將能夠同時處理10 x 2 = 20個分區。
如果您真的想要詳細信息,請查看來自CoarseGrainedSchedulerBackend
Spark Standalone請求資源,您可以查看它的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
,它包含從executor id到ExecutorData
的映射,它告訴系統中每個這樣的執行者正在使用多少核心,並根據這個和分區的首選位置,對這個執行者進行有根據的猜測。任務應該運行。
以下是來自Kafka的實時Spark Streaming應用程序的示例:
我們有5個分區,運行3個執行程序,每個執行程序有2個以上的核心,這使得流程可以同時處理每個分區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.