立即注册 登录
About云-梭伦科技 返回首页

云中漫步者的个人空间 https://www.aboutyun.com/?71645 [收藏] [复制] [分享] [RSS]

日志

hadoop学习手记之mapreduce工作机制篇

已有 973 次阅读2018-4-10 09:44 |个人分类:hadoop| mapreduce

知识点概述
实体组成:
1 客户端:用于提交作业
2 YARN资源管理器:协调集群资源分配
3 YARN节点管理器:启动和监视集群中的计算容器
4 APPLICATION MASTER:协调运行MP作业的任务,两者都在容器中运行
5 分布式文件系统(HDFS):实体间共享作业文件
作业初始化:
资源管理器收到submitApplication()消息->请求传递给调度器->调度器分配容器->节点管理器在容器中启动和管理APPLICATION MASTER的进程
APPLICATION MASTER分配任务ID,并对任务区分是否Uber任务,放在自己同一个JVM运行,在任何任务开始前要调用setupJob()方法设置OutputCommitter
参数说明:
mapreduce.job.ubertask.enable设置为true,启动Uber任务
mapreduce.job.ubertask.maxmaps设置满足Uber任务的最大map数
mapreduce.job.ubertask.maxreduces设置满足Uber任务的最大reduce数
mapreduce.job.ubertask.maxbytes设置满足Uber任务的最大数据块大小
任务分配:
APPLICATION MASTER为所有非Uber任务的map和reduce向资源管理器申请容器,map申请优先级高于reduce申请,所有map任务必须在reduce排序阶段启动前完成,所以直到5%的map任务已经完成时,reduce请求才会发出
reduce可以在集群任意位置运行,map有数据本地化限制
参数说明:
mapreduce.map.memory.mb:设置作业map任务分配内存大小,默认1024M
mapreduce.reduce.memory.mb设置作业reduce任务分配内存大小,默认1024M
mapreduce.map.cpu.vcores设置作业map任务分配虚拟内核数,默认1
mapreduce.reduce.cpu.vcores设置作业reduce任务分配虚拟内核数,默认1
任务执行:
将任务运行需要的资源本地化->节点管理器启动容器
资源包括作业的配置,jar文件和所有来自分布式缓存的文件,每个任务都能执行搭建和提交动作,和任务本身在同一个JVM中运行,由作业的OutputCommitter确定。
推测执行启用时,提交能确保只有一个任务副本被提交,其他被取消。
Streaming任务运行用户提供的程序。
进度和状态更新:
比较复杂,有时不一定好度量。基本的进度组成有:读入记录,写入记录,设置状态描述,增加计数器值,调用reporter或taskattemptcontext.progress()方法。
参数说明:
mapreduce.client.progressmonitor.pollinterval设置客户端轮询Application master以接收最新状态的间隔
作业完成
当Application master收到最后一个任务完成得通知后,把作业状态置为成功,清理中间输出,作业信息由作业历史服务器存档。
失败的处理
任务运行失败:map和reduce用户代码抛异常;JVM异常退出
前者JVM会把错误报告发送给Application master,最后被记入用户日志,任务标记为失败。
后者节点管理器会感知到,并通知Application master把任务标记为失败
参数说明:
stream.non.zero.exit.is.failure设置Streaming任务进程非0退出是否标记任务为失败,默认为true
mapreduce.task.timeout单位毫秒,任务超时设置,超过此时间则杀死任务进程,0为关闭超时设置,不推荐
mapreduce.map.maxattempts:失败重试次数,超过此设置则任务失败,默认4次
mapreduce.reduce.maxattempts:失败重试次数,超过此设置则任务失败,默认4次
mapreduce.map.failures.maxpercent:失败任务比例上限,超过此比例则作业失败,否则仍视为作业成功
mapreduce.reduce.failures.maxpercent:失败任务比例上限,超过此比例则作业失败,否则仍视为作业成功
Application master运行失败
恢复过程:AM向资源管理器发送心跳,当AM失败时,资源管理器检测到并在新容器中开始一个新的master实例。
yarn.resourcemanager.am.max-attempts:application master失败后重试次数,默认2次
yarn.app.mapreduce.am.job.recovery.enabled开启自动恢复,默认开启,false关闭
节点管理器运行失败
资源管理检测不到节点管理器的心跳,会通知停止该节点管理器,并从自己的节点池中移除,节点上未完成的任务会被重新运行。
参数说明:
yarn.resourcemanager.nm.liveness-monitor.expiry-interval-ms:设置节点服务器的心跳发送频率
资源管理器运行失败
单点故障,所有作业都失败且不能恢复;要实现高可用,采用双机热备份,所有运行中的信息存储在一个高可用状态的存储区(由Zookeeper或HDFS备份)
该故障不会计入重试次数。故障切换由故障转移控制器处理,且嵌入在资源管理器中,非独立进程。
shuffle:将map输出作为输入传给reduce的过程。它是mapreduce的心脏。
map端输出时先缓存在内存并排序,当缓冲区大于或值就开始把内容写到磁盘上,如果此时缓冲区满了,map就会被阻塞,直到写磁盘过程完成。
参数说明:
mapreduce.task.io.sort.mb缓冲区大小
mapreduce.map.sort.spill.percent缓冲区或值,默认0.8
mapreduce.task.io.sort.factor控制一次最多合并多少流,默认10
mapreduce.map.combine.minspills最少溢出文件数
mapreduce.map.output.compress输出数据是否压缩,true压缩
mapreduce.shuffle.max.threads设置文件分区的工作线程数,该设置针对每个节点,默认0,是机器中处理器数2倍

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条