Yarn資源分配性能調優

日誌:

Container [pid=134663,containerID=container_1430287094897_0049_02_067966] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.5 GB of 10 GB virtual memory used. Killing container. Dump of the process-tree for


Error: Java heap space

問題1:Container xxx is running beyond physical memory limits
問題2:java heap space

優化前:

yarn.nodemanager.resource.memory-mb
8GB
yarn.nodemanager.resource.cpu-vcores
32core

pre Mapper 
CPU:1   [mapreduce.map.cpu.vcores ]
MEM:1G  [mapreduce.map.memory.mb ]
===> 8 map slot / node

pre Reducer
CPU:1   [mapreduce.reduce.cpu.vcores]
MEM:1G  [mapreduce.reduce.memory.mb]
===> 8 reduce slot / node 【有8G內存,實際有CPU 32個,所以只能啓動8個reduce在每個node上】
  • map slot / reduce slot 由nodemanager的內存/CPU core上限與客戶
    端設置的單mapper, reducer內存/CPU使用值決定
  • heapsize( java.opts中的-Xmx)應根據單mapper, reducer內存進
    行調整,而與slot個數無關 => heapsize不能大於memory.mb值,一
    般設置爲memory.mb的85%左右

OOM

•內存、Heap
需要設置:
-內存:mapreduce.map.memory.mb
–Heap Size:-Xmx在mapreduce.map.java.opts做相同調整
–內存:mapreduce.reduce.memory.mb
–Heap Size:-Xmx在mapreduce.reduce.java.opts做相同調整

Container 超過了虛擬內存的使用限制

– Container XXX is running beyond virtual memory limits
• NodeManager端設置,類似系統層面的overcommit問題
–yarn.nodemanager.vmem-pmem-ratio 【默認2.1,我們的做法呢【物理內存和虛擬內存比率】值爲了15,yarn-site.xml中修改】

<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>10</value>
    </property>
–或者yarn.nodemanager.vmem-check-enabled,false掉 
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

調優後:

mapreduce.map.java.opts, mapreduce.map.java.opts.max.heap=1.6G
mapreduce.reduce.java.opts,mapreduce.reduce.java.opts.max.heap=3.3G
注意上面兩個參數和下面的mapper,reducer的內存有關係,是下面mem的0.85倍!

yarn.nodemanager.resource.memory-mb=32GB
yarn.nodemanager.resource.cpu-vcores=32core

pre Mapper 
CPU:2   [mapreduce.map.cpu.vcores ]
MEM:2G  [mapreduce.map.memory.mb ]
===> 16 map slot / node

pre Reducer
CPU:4   [mapreduce.reduce.cpu.vcores]
MEM:4G  [mapreduce.reduce.memory.mb]
==> 8 reduce slot / node

shuffle.parallelcopies如何計算?

(reduce.shuffle並行執行的副本數,最大線程數–sqrt(節點數 map slot數) 與 (節點數 map slot數)/2 之間 ==>結果:{12-72}
mapreduce.reduce.shuffle.parallelcopies=68

1
`排序文件時要合併的流的數量。也就是說,在 reducer 端合併排序期間要使用的排序頭
數量。此設置決定打開文件句柄數。並行合併更多文件可減少合併排序迭代次數並通過消
除磁盤 I/O 提高運行時間。注意:並行合併更多文件會使用更多的內存。如 'io.sort.
factor' 設置太高或最大 JVM 堆棧設置太低,會產生過多地垃圾回收。Hadoop 默認值爲 
10,但 Cloudera 建議使用更高值。將是生成的客戶端配置的一部分。`

mapreduce.task.io.sort.factor=64

xml配置
yarn.nodemanager.vmem-pmem-ratio=10 # yarn-site.xml 的 YARN 客戶端高級配置
mapreduce.task.timeout=1800000

impala調優

Impala 暫存目錄:需要注意此目錄磁盤空間問題!最好在單獨的一個掛載點!

1、內存

-服務器端(impalad)
Mem:default_query_options MEM_LIMIT=128g  

2、併發查詢

queue
    .queue_wait_timeout_ms默認只有60s
       - queue_wait_timeout_ms=600000
    .default pool設置

3、資源管理

-Dynamic Resource Pools
    .併發控制:max running queries

4、yarn資源隔離

http://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章