文章目录
- 配置NodeManager
- 配置 Container
- 配置 mapTask reduceTask
- 配置ApplicationMaster
- vcores 什么意思
- 其它常用参数
- mapred-site.xml
- yarn-site.xml
配置NodeManager
yarn-site.xml
建议:
- cpu核数=逻辑核数 - 其他应用数
- 内存 :cpu(1 : 1)
- 查看集群的逻辑核数命令
配置 Container
容器的个数计算公式:
每个nodemanager可分配的内存总量 / 每个container可申请的最小的内存
yarn-site.xml
如果提示物理内存溢出,提高这个值即可
注意:
单个Container分配的资源要小于单个NodeManager
配置 mapTask reduceTask
mapred-site.xml
资源配比最好遵循:
- reduceTask申请的资源值=mapTask*2
- mapreduce.map.java.opts的值=mapreduce.map.memory.mb的值 *0.75,reduce.java.opts同样也是
注意:
- mapreduce.map.memory.mb和mapreduce.reduce.memory.mb的值能被yarn.scheduler.minimum-allocation-mb整除
- 如果MapTask实际使用的资源量超过上述配置的值,则会被强制杀死;ReduceTask也一样
配置ApplicationMaster
mapred-site.xml
建议:
cpu和内存比例,最好和 NodeManager 的分配比例保持一致
vcores 什么意思
vcores 是虚拟
CPU,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力不一样
,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数
其它常用参数
mapred-site.xml
Shuffle相关的 | mapreduce.task.io.sort.mb | 环形缓冲区大小,默认100m |
Shuffle相关的 | mapreduce.map.sort.spill.percent | 环形缓冲区溢出的阈值,默认80% |
Shuffle相关的 | mapreduce.task.io.sort.factor | 在Map 任务完成前,所有的spill 文件将会被归并排序为一个索引文件和数据文件。这是一个多路归并过程,最大归并路数由io.sort.factor 控制(默认是10) |
ReduceTask | mapreduce.reduce.shuffle.input.buffer.percent | ReduceTask拉取过来的数据先缓存到内存,内存中的数据达到多少比例开始写入磁盘。默认值0.7 |
ReduceTask | mapreduce.reduce.input.buffer.percent | ReduceTask的Buffer占堆内存的大小,默认值是0.0 |
容错相关参数 | mapreduce.map.maxattempts | 每个MapTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败,默认值:4 |
容错相关参数 | mapreduce.reduce.maxattempts | 每个ReduceTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败,默认 |
容错相关参数 | mapreduce.task.timeout | 如果一个Task在一定时间内没有任何进入,既不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大 |
yarn-site.xml
虚拟内存相关的 | yarn.nodemanager.vmem-check-enabled | 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true |
虚拟内存相关的 | yarn.nodemanager.vmem-pmem-ratio | 虚拟内存和物理内存设置比例,默认2.1 |
调度器相关的 | yarn.resourcemanager.scheduler.class | 选择哪个调度器,apache,默认容量 |
Resourcemanager相关的 | yarn.resourcemanager.scheduler.client.thread-count | 客户端连接resourcemanager,resourcemanager负责接待客户端的线程数,默认50;如果提交的任务数大于50,可以增加该值,但是不能超过3台 * 4线程 = 12线程(去除其他应用程序实际不能超过8) |
NodeManager(每个NodeManager单独配置)(假设3个节点,node1使用的cpu为i7,node2为i3,node3为i3,想把node2,node3的cpu的2核心做为一核心来用,来匹配i7的一核)心) | yarn.nodemanager.resource.count-logical-processors-as-cores | 是否将虚拟核数当作CPU核数,默认是false,采用物理CPU核数 |
NodeManager(每个NodeManager单独配置)(假设3个节点,node1使用的cpu为i7,node2为i3,node3为i3,想把node2,node3的cpu的2核心做为一核心来用,来匹配i7的一核) | yarn.nodemanager.resource.pcores-vcores-multiplier | 虚拟核数和物理核数乘数,默认是1.0。若为2,则意思是将2个cpu物理核数作为一个 |