HDP 中 yarn 和 MR2 的配置

       如下說明均以集羣中 slave 結點的配置爲 48G內存,12塊硬盤,12核(core) CPU 爲例。java

       在 Yarn 中,一個 Container 是一個基礎的包含內存和CPU 的單元。爲了較好的平衡利用集羣的資源,一般建議每塊磁盤和每一個core 分配1~2 個 container。因此在上面的配置下,每一個結點容許最大配置 20 個 container。node

       咱們給 yarn 分配 40G內存,另外 8G留給操做系統。40G分配給 20 個 container,因此每一個 container 分配到 2個G的內存。在 yarn-site.xml 中配置以下:spa

<property>
    <!-- 總共有多少資源能夠被分配 --> <name>yarn.nodemanager.resource.memory-mb</name> <value>40960</value> </property> <property>
    <!-- 分配給AM單個容器可申請的最小內存 --> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property>

 

      MapReduce2 運行在 Yarn 之上,利用 container 去安排 Map 和 Reduce 任務, 配置 MR2 的資源,須要考慮如下三個方面:操作系統

    (1)每一個 map 和 reduce 任務的物理內存限制code

    (2)每一個任務的 JVM 堆大小xml

    (3)每一個任務得到的虛擬內存的總量blog

    每一個 map 和 reduce 任務運行在不一樣的 container 中,所以 Map 和 reduce 最大的內存配置應該等於或大於 yarn.scheduler.minimum-allocation-mb 的值。內存

在 mapred-site.xml 裏配置:資源

<property>
<!-- AM 中分配給map Container的內存大小 --> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property>
<!-- AM 中分配給 reduce container 的內存大小,通常爲 map 的兩倍 --> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property>

    每一個 container 均會開啓 JVM , JVM 的堆大小必須小於上面 Map 和 Reduce 的 memory 的配置。所以在 mapred-site.xml 中加入下面的配置:it

<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx3072m</value>
</property>

<property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx6144m</value>
</property>

   上面配置了 Map 和 Reduce 使用的物理內存的上限。map 和 reduce 任務使用的虛擬內存(physical + paged memory)由 yarn container 容許的 ratio 決定。這個ratio 能夠在 yarn-site.xml 中進行配置(2.1 是默認值):

<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>2.1</value>
</property>

 

   綜上所述,每一個 map 任務可得到以下的內存分配:

(1) 物理 RAM = 4G

(2)map 任務的 container 的 JVM 的堆大小上限 = 3G

(3)虛擬內存上限 = 4*2.1 = 8.4G

 

總的來講,以 yarn.nodemanager. 開頭的配置,配置的是硬件資源相關的東西, yarn.scheduler. 開頭的配置,配置的是資源調度相關的,其值不能大於 yarn.nodemanager 中相關的資源限制。

相關文章
相關標籤/搜索