簡體   English   中英

如果沒有,將如何處理Spark RDD分區。 遺囑執行人<no。 RDD分區

[英]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應用程序的示例:

Spark任務

我們有5個分區,運行3個執行程序,每個執行程序有2個以上的核心,這使得流程可以同時處理每個分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM