1.HDFS调优
a.设置合理的块大小(dfs.block.size)
b.将中间结果目录设置为分布在多个磁盘以提升写入速度(mapred.local.dir)
c.设置DataNode处理RPC的线程数(默认为3),大集群可适当加大点(dfs.datanode.handler.count)
d.设置NameNode能同时处理请求数(dfs.namenode.handler.count)为集群规模的自然对数lnN的20倍
2.YRAN调优
Yarn的资源表示模型Container,Container将资源抽象为两个维度,内存和虚拟CPU核(vcore)
map slot 与 reduce slot,任务槽不能混用,数量一定,不能动态分配资源
Yarn-Container兼容各种计算框架,动态分配资源,减少资源浪费
容器内存-yarn.nodemanager.resource.memory-mb
最小容器内存-yarn.scheduler.minimum-allocation-mb
容器内存增量-yarn.scheduler.increment-allocation-mb
最大容器内存-yarn.scheduler.maximum-allocation-mb
根据实际情况灵活调整,如物理机为128GB,那么容器内存要为100GB
容器虚拟CPU内核yarn.nodemanager.resource.cpu-vcores ---总量要考虑硬件,如双路四核,这里可以设置为10
最小容器虚拟CPU内核数量yarn.scheduler.minimum-allocation-vcores
容器虚拟CPU内核增量yarn.scheduler.increment-allocation-vcores
最大容器虚拟CPU内核数量yarn.scheduler.maximum-allocation-vcores
3.MapReduce调优
调优三大原则
a.增大作业并行程度---改变输入分片(input spilt)的大小,输入分片是个逻辑概念,是一个map Task的输入。在调优过程中,尽量让输入分片与块大小一样,这样就能实现计算本地化,减少不必要的网络传输。
计算公式为max(mapred.min.spilt.size,min(mapred.max.spilt.size,dfs.block.size))
mapred.min.spilt.size=1 ---最小分片大小
mapred.max.split.size=9223372036854775807 ---最大分片大小
dfs.block.size为块大小
b.给每个任务足够的资源
Map任务内存:mapreduce.map.memory.mb
Reduce任务内存:mapreduce.reduce.memory.mb
Map任务最大堆栈:mapreduce.map.java.opts.max.heap
Reduce任务最大堆栈:mapreduce.reduce.java.opts.max.heap
ApplicationMaster内存:yarn.app.mapreduce.am.resource.mb
c.在满足前两个条件下,尽可能地给shuffle(数据混洗-输入到输出整个过程)预留资源
最大洗牌连接:mapreduce.shuffle.max.connections
I/O排序内存缓存(MiB):mapreduce.task.io.sort.mb
I/O排序因子:mapreduce.task.io.sort.factor
洗牌期间并行传输的默认数量:mapreduce.reduce.shuffle.parallelcopies
压缩Map输出:mapreduce.map.output.compress
备注:其他调优参数参考官网hadoop默认配置,hadoop调优要深刻理解mapreduce