2013-01-16 51 views

回答

19

它表示給定羣集上單個節點上的資源(內存)。
容器是

  • 由節點管理器
  • 由資源管理器

一個MR任務在這樣容器(一個或多個)運行調度監督。

+1

MR任務不在這樣的容器中運行。它在一組容器上運行,因爲每個映射或reduce函數都在一個容器上運行。任務可以在一個容器上以超級模式運行,但任務通常由「MRAppMaster」跨越數百或數千個容器。此外,由豐富的資源矢量描述的容器並不代表專用內存。 – Dyin

+0

謝謝你指出這點,你是對的,我更新了答案。然而,當我在2年前或多或少地回答這個問題時,一個容器只是一個內存資源。 –

+1

容器和執行者之間的關係是什麼?每個執行者都在一個容器中運行嗎?謝謝! – lucian

13

在一個節點(或一個很大的節點)上可以有多個容器。

系統中的每個節點都被認爲是由最小容量的內存(比如512MB或1GB)組成的多個容器組成。 ApplicationMaster可以請求任何容器作爲最小內存大小的倍數。

Source請參見ResourceManager /資源模型一節。

+0

AFAIK,ApplicationMaster可以請求任何大小,但Yarn Scheduler只能分配爲yarn.scheduler.minimum *屬性中定義的最小內存大小的倍數。 –

2

字「集裝箱」紗線用於兩種語境,

集裝箱:表示的資源分配給一個ApplicationMaster。 ResourceManager負責將資源/容器發佈給ApplicationMaster。檢查Container API。

啓動容器:基於分配的資源(容器)ApplicationMaster請求NodeManager啓動Containers,從而導致在一個節點上執行任務。檢查ContainerManager API。

1

簡而言之,Container是運行YARN應用程序的地方。它在每個節點中都可用。 Application Master與調度程序(資源管理器的組件之一)協商容器。容器由節點管理器啓動。

2

在Hadoop 2.x中,Container是一個工作單元發生的地方。例如,每個MapReduce任務(不是整個作業)都在一個容器中運行。

應用程序/作業將在一個或多個容器上運行。

爲每個容器分配一組系統資源,目前支持CPU內核和RAM。 Hadoop集羣中的每個節點都可以運行多個容器。

在Hadoop 1.x中,由JobTracker分配一個插槽來運行每個MapReduce任務。然後,TaskTracker爲每個任務生成一個單獨的JVM(除非未啓用JVM重用)。

0
Container : 

資源的邏輯租約和節點上產生的實際進程可以互換使用。 這是執行任務(或AM)的相同過程。 爲了啓動容器,我們提供了容器對象和CLC(ContainerLaunchContext),我們在其中設置了運行任務(或AM)的命令列表。

nmClient.startContainer(container, clcObj) 

ContainerLaunchContext code snippet : 

<code> 
. 
. 
. 
/** 
    * Add the list of <em>commands</em> for launching the container. All 
    * pre-existing List entries are cleared before adding the new List 
    * @param commands the list of <em>commands</em> for launching the container 
    */ 
    @Public 
    @Stable 
    public abstract void setCommands(List<String> commands); 
</code> 
0

根據輸入數據的大小,創建多個輸入分割。 MR作業需要處理整個數據,以便創建多個任務(地圖&減少任務)。所以對於每個輸入分割將由一個任務處理。現在如何運行這個任務,由資源經理建議。資源管理器知道哪個節點管理器是免費的,哪個是繁忙的,它的大學校長和節點經理是大學的班主任,校長知道哪個教師是免費的。因此它要求節點管理器在容器中運行該任務(整個工作的一小部分),即存儲區域,使得jvm。因此,作業在容器內作爲應用程序主人運行。