在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的調度器負責資源的分配,而NodeManager則負責資源的供給和隔離。ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的「資源調度」)後,NodeManager需按照要求爲任務提供相應的資源,甚至保證這些資源應具備獨佔性,爲任務運行提供基礎的保證,這就是所謂的資源隔離。
YARN會管理集羣中全部機器的可用計算資源. 基於這些資源YARN會調度應用
(好比MapReduce)發來的資源請求,而後YARN會經過分配Container來給每一個應用
提供處理能力, Container是YARN中處理能力的基本單元, 是對內存, CPU等的封裝.java
日誌:node
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 spacepython
優化原則
1 |
--調節參數列表 |
優化前:
yarn.nodemanager.resource.memory-mb
8GB
yarn.nodemanager.resource.cpu-vcores
32coreapache
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倍!app
yarn.nodemanager.resource.memory-mb=32GB
yarn.nodemanager.resource.cpu-vcores=32coreoop
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 端合併排序期間要使用的排序頭 |
mapreduce.task.io.sort.factor=64
xml配置
yarn.nodemanager.vmem-pmem-ratio=10 # yarn-site.xml 的 YARN 客戶端高級配置
mapreduce.task.timeout=1800000
impala調優
Impala 暫存目錄:須要注意此目錄磁盤空間問題!最好在單獨的一個掛載點!
一、內存
-服務器端(impalad) Mem:default_query_options MEM_LIMIT=128g
二、併發查詢
queue .queue_wait_timeout_ms默認只有60s - queue_wait_timeout_ms=600000 .default pool設置
三、資源管理
-Dynamic Resource Pools .併發控制:max running queries
四、yarn資源隔離
http://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html