日誌:
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