簡體   English   中英

Spark獨立如何實現資源分配

[英]how does Spark standalone implement resource allocation

我一直在閱讀Spark的源代碼,但我仍然無法理解Spark獨立如何實現資源隔離和分配。 例如,Mesos使用LXC或Docker來實現容器以進行資源限制。 那么Spark Standalone如何實現這一點呢。 例如,我在一個執行程序中運行了10個線程,但Spark只給執行程序一個核心,那么Spark如何保證這10個線程只在一個cpu核心上運行。

在下面的測試代碼之后,事實證明Spark Standalone資源分配在某種程度上是偽造的。 我只有一個Worker(執行程序),只給執行程序一個核心(機器總共有6個核心),當下面的代碼運行時,我發現有5個核心100%使用。 (我的代碼啟動了4個帖子)

object CoreTest {
  class MyThread extends Thread {
    override def run() {
      while (true) {
        val i = 1+1
      }
    }
  }
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("core test")
    val sc = new SparkContext(conf)
    val memRDD = sc.parallelize(Seq(1), 1)
    memRDD.foreachPartition { part =>
      part.foreach {
        x =>
          var hello = new MyThread()
          hello.start
          hello = new MyThread()
          hello.start
          hello = new MyThread()
          hello.start
          hello = new MyThread()
          hello.start
          while (true) {
            val j = 1+2
            Thread.sleep(1000)
          }
      }
    }
    sc.stop()
  }
}

下面的問題:我很好奇,如果我在Spark + Mesos上運行上面的代碼,會發生什么,Mesos會限制只在一個核心上運行的4個線程。

但我仍然無法理解Spark獨立如何實現資源隔離和分配。

使用Spark,我們有一個Master節點和Worker節點的表示法。 我們可以將后者視為資源池。 每個worker都有CPU和RAM,它帶來了池,Spark作業可以利用該池中的資源來進行計算。

Spark Standalone具有Executor的表示法,Executor是處理計算的過程,我們從資源池中提供資源。 在任何給定的執行器中,我們運行由不同任務組成的計算的不同階段 現在,我們可以控制給定任務使用的計算能力(核心)量(通過spark.tasks.cpu配置參數),並且我們還可以控制給定作業可能具有的一般計算能力(通過spark.cores.max ,它告訴集群管理器中總的資源如何,我們想給我們正在運行的特定作業)。 請注意,默認情況下Standalone是最安全的,並將在群集中的每個Worker節點上安排執行程序。 通過使用動態分配,我們可以對我們擁有的實際執行程序數量進行更精細的控制。

例如,我在一個執行程序中運行了10個線程,但Spark只給執行程序一個核心,那么Spark如何保證這10個線程只在一個cpu核心上運行。

Spark不會驗證執行只發生在單個核心上。 Spark不知道它將從底層操作系統獲得哪個CPU周期。 Spark Standalone嘗試做的是資源管理,它告訴你“看,你有X個CPU和Y量的RAM,如果你沒有正確地划分你的資源,我不會讓你安排工作”。

Spark standalone僅處理資源分配 ,這是一項簡單的任務。 所需要的就是密切關注:

  • 可用資源。
  • 分配資源。

它沒有處理資源隔離 具有更廣范圍的YARN和Mesos不實現資源隔離,而是依賴於Linux控制組( cgroups )。

暫無
暫無

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

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