写点什么

MapReduce 优化

发布于: 2021 年 04 月 10 日
MapReduce优化

1、资源相关参数

//以下参数是在用户自己的 MapReduce 应用程序中配置就可以生效


(1) mapreduce.map.memory.mb: 一个 Map Task 可使用的内存上限(单位:MB),默认为 1024。如果 Map Task 实际使用的资源量超过该值,则会被强制杀死。


(2) mapreduce.reduce.memory.mb: 一个 Reduce Task 可使用的资源上限(单位:MB),默认为 1024。如果 Reduce Task 实际使用的资源量超过该值,则会被强制杀死。


(3) mapreduce.map.cpu.vcores: 每个 Maptask 可用的最多 cpu core 数目, 默认值: 1


(4) mapreduce.reduce.cpu.vcores: 每个 Reducetask 可用最多 cpu core 数目默认值: 1


(5) mapreduce.map.java.opts: Map Task 的 JVM 参数,你可以在此配置默认的 java heap


size 等参数, 例如:“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”


(@taskid@会被 Hadoop 框架自动换为相应的 taskid), 默认值: “”


(6) mapreduce.reduce.java.opts: Reduce Task 的 JVM 参数,你可以在此配置默认的 java


heap size 等参数, 例如:“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”, 默认值: “”


//应该在 yarn 启动之前就配置在服务器的配置文件中才能生效


(1) yarn.scheduler.minimum-allocation-mb RM 中每个容器请求的最小配置,以 MB 为单位,默认 1024。


(2) yarn.scheduler.maximum-allocation-mb RM 中每个容器请求的最大分配,以 MB 为单位,默认 8192。


(3) yarn.scheduler.minimum-allocation-vcores 1


(4)yarn.scheduler.maximum-allocation-vcores 32


(5) yarn.nodemanager.resource.memory-mb 表示该节点上 YARN 可使用的物理内存总量,默认是 8192(MB),注意,如果你的节点内存资源不够 8GB,则需要调减小这个值,而 YARN 不会智能的探测节点的物理内存总量。


//shuffle 性能优化的关键参数,应在 yarn 启动之前就配置好


(1) mapreduce.task.io.sort.mb 100 shuffle 的环形缓冲区大小,默认 100m


(2) mapreduce.map.sort.spill.percent 0.8 环形缓冲区溢出的阈值,默认 80%

2、容错相关参数

(1) mapreduce.map.maxattempts: 每个 Map Task 最大重试次数,一旦重试参数超过该值,则认为 Map Task 运行失败,默认值:4。


(2) mapreduce.reduce.maxattempts: 每个 Reduce Task 最大重试次数,一旦重试参数超过该值,则认为 Map Task 运行失败,默认值:4。


(3) mapreduce.map.failures.maxpercent: 当失败的 Map Task 失败比例超过该值,整个作业则失败,默认值为 0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于 0 的值,比如 5,表示如果有低于 5%的 Map Task 失败(如果一个 Map Task 重试次数超过 mapreduce.map.maxattempts,则认为这个 Map Task 失败,其对应的输入数据将不会产生任何结果),整个作业扔认为成功。


(4) mapreduce.reduce.failures.maxpercent: 当失败的 Reduce Task 失败比例超过该值为,整个作业则失败,默认值为 0.


(5) mapreduce.task.timeout:如果一个 task 在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该 task 处于 block 状态,可能是临时卡住,也许永远会卡住。为了防止因为用户程序永远 block 不退出,则强制设置了一个超时时间(单位毫秒),默认是 600000,值为 0 将禁用超时。

3、效率跟稳定性参数

(1) mapreduce.map.speculative: 是否为 Map Task 打开推测执行机制,默认为 true, 如果为 true,则可以并行执行一些 Map 任务的多个实例。


(2) mapreduce.reduce.speculative: 是否为 Reduce Task 打开推测执行机制,默认为 true


(3)mapreduce.input.fileinputformat.split.minsize: FileInputFormat 做切片时最小切片大小,默认 1。


(5)mapreduce.input.fileinputformat.split.maxsize: FileInputFormat 做切片时最大切片大小

4、mapreduce 程序在 yarn 上的执行流程


详细流程


  • 一:客户端向集群提交一个任务,该任务首先到 ResourceManager 中的 ApplicationManager;

  • 二:ApplicationManager 收到任务之后,会在集群中找一个 NodeManager,并在该 NodeManager 所在 DataNode 上启动一个 AppMaster 进程,该进程用于进行任务的划分和任务的监控;

  • 三:AppMaster 启动起来之后,会向 ResourceManager 中的 ApplicationManager 注册其信息(目的是与之通信);

  • 四:AppMaster 向 ResourceManager 下的 ResourceScheduler 申请计算任务所需的资源;

  • 五:AppMaster 申请到资源之后,会与所有的 NodeManager 通信要求它们启动计算任务所需的任务(Map 和 Reduce);

  • 六:各个 NodeManager 启动对应的容器用来执行 Map 和 Reduce 任务;

  • 七:各个任务会向 AppMaster 汇报自己的执行进度和执行状况,以便让 AppMaster 随时掌握各个任务的运行状态,在某个任务出了问题之后重启执行该任务;

  • 八:在任务执行完之后,AppMaster 向 ApplicationManager 汇报,以便让 ApplicationManager 注销并关闭自己,使得资源得以回收;

发布于: 2021 年 04 月 10 日阅读数: 17
用户头像

还未添加个人签名 2021.03.07 加入

还未添加个人简介

评论

发布
暂无评论
MapReduce优化