在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