MapReduce的数据流程、执行流程

2023-05-16

MapReduce的大体流程是这样的,如图所示:

这里写图片描述

由图片可以看到mapreduce执行下来主要包含这样几个步骤
1.首先对输入数据源进行切片
2.master调度worker执行map任务
3.worker读取输入源片段
4.worker执行map任务,将任务输出保存在本地
5.master调度worker执行reduce任务,reduce worker读取map任务的输出文件
6.执行reduce任务,将任务输出保存到HDFS

若对流程细节进行深究,可以得到这样一张流程图
这里写图片描述
角色描述:
JobClient:执行任务的客户端
JobTracker:任务调度器
TaskTracker:任务跟踪器
Task:具体的任务(Map OR Reduce)

从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化、分配、执行、反馈、成功与失败的后续处理
每个阶段所做的事情大致如下

1.JobClient对数据源进行切片
切片信息由InputSplit对象封装,接口定义如下:

public interface InputSplit extends Writable {  
    long getLength() throws IOException;  
    String[] getLocations() throws IOException;  
}  

可以看到split并不包含具体的数据信息,而只是包含数据的引用,map任务会根据引用地址去加载数据
InputSplit是由InputFormat来负责创建的

public interface InputFormat<K, V> {  
    InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;  
    RecordReader<K, V> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;  
} 

JobClient通过getSplits方法来计算切片信息,切片默认大小和HDFS的块大小相同(64M),这样有利于map任务的本地化执行,无需通过网络传递数据
切片成功后,JobClient会将切片信息传送至JobTracker
2.通过jobTracker生成jobId
JobTracker.getNewJobId()
3.检查输出目录和输入数据源是否存在
输出目录已存在,系统抛出异常
输入源目录不存在,系统抛出异常
4.拷贝任务资源到jobTracker机器上(封装任务的jar包、集群配置文件、输入源切片信息)

任务分配
JobTracker遍历每一个InputSplit,根据其记录的引用地址选择距离最近的TaskTracker去执行,理想情况下切片信息就在TaskTracker的本地,这样节省了网络数据传输的时间
JobTracker和TaskTracker之间是有心跳通信的逻辑的,通过彼此间不停的通信,JobTracker可以判断出哪些TaskTracker正在执行任务,哪些TaskTracker处于空闲状态,以此来合理分配任务

任务执行
TaskTracker接到任务后开始执行如下操作:
1.将任务jar包从HDFS拷贝到本地并进行解压
2.创建一个新的JVM来执行具体的任务,这样做的好处是即使所执行的任务出现了异常,也不会影响TaskTracker的运行使用

如果所执行的任务是map任务,则处理流程大致如下:
首先加载InputSplit记录的数据源切片,通过InputFormat的getRecordReader()方法
获取到Reader后,执行如下操作:

K key = reader.createKey();  
V value = reader.createValue();  
while (reader.next(key, value)) {//遍历split中的每一条记录,执行map功能函数  
    mapper.map(key, value, output, reporter);  
} 

执行反馈
mapreduce的执行是一个漫长的过程,执行期间会将任务的进度反馈给用户
任务结束后,控制台会打印Counter信息,方便用户以全局的视角来审查任务

执行成功
清理MapReduce本地存储(mapred.local.dir属性指定的目录)
清理map任务的输出文件

执行失败
1.如果task出现问题(map或者reduce)
错误可能原因:用户代码出现异常;任务超过mapred.task.timeout指定的时间依然没有返回
错误处理:
首先将错误信息写入日志
然后jobtracker会调度其他tasktracker来重新执行次任务,如果失败次数超过4次(通过mapred.map.max.attempts和mapred.reduce.max.attempts属性来设置,默认为4),则job以失败告终
如果系统不想以这种方式结束退出,而是想通过Task成功数的百分比来决定job是否通过,则可以指定如下两个属性
mapred.max.map.failures.percent map任务最大失败率
mapred.max.reduce.failures.percent reduce任务最大失败率
如果失败比率超过指定的值,则job以失败告终

2.如果是tasktracker出现问题
判断问题的依据:和jobtracker不再心跳通信
jobtracker将该tasktracker从资源池中移除,以后不在调度它

3.jobtracker出现问题
jobtracker作为系统的单点如果出现问题也是最为严重的问题,系统将处于瘫痪

转载自:http://blog.csdn.net/javaman_chen/article/details/8576028

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapReduce的数据流程、执行流程 的相关文章

随机推荐

  • 知识图谱(Knowledge Graph, KG)(王昊奋老师-课程学习笔记)

    主要内容 xff1a 1 知识图谱的概念 2 典型知识库介绍 xff08 简 xff09 3 知识图谱技术概览 4 典型案例简介 知识图谱 KG 的概念 知识图谱 KG 得益于Web的发展 xff08 更多的是数据层面 xff09 xff0
  • Boa+CGI环境搭建笔记

    转自 xff1a https www sfantree com boa web cgi utm source 61 tuicool amp utm medium 61 referral BOA看了 xff0c CGI 原理也大概了解 现在要
  • 2021 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 的问题终极解决方案

    一 首先执行命令 xff0c 查看自己的镜像源 conda config show channels 二 可以首先删除已经存在的镜像源 xff08 注 xff1a 上述三个镜像源无需删除 xff01 xff01 xff01 xff09 xf
  • K8s bridge、ip分配原理

    一个Blog jerichoking wtf 自建网站欢迎来戳 一 项目地址 GitHub containernetworking plugins Some reference and example networking plugins
  • RT-Thread系统的SysTick和pendSV的中断优先级

    问题描述 xff1a SysTick和pendSV的中断优先级分别设置为0和15 SysTick中断用于系统心跳 pendSV中断用于任务调度 代码证明 xff1a RT Thread中设置pendSV中断优先级的代码在cpu文件夹下con
  • curl的安装

    window下 xff1a 开启curl的步骤 span class hljs number 1 span 在localhost站点下输出一下phpinfo xff0c 以此来检测php ini的所在 xff08 因为我在开启CURL的时候
  • Hive DDL常见操作

    文章目录 Hive中DDL的使用Hive数据库介绍Hive数据库的操作Hive创建表操作数据类型分隔符指定默认分隔符创建表的示例 Hive show语法 Hive数据模型图 Hive中DDL的使用 Hive SQL xff08 HQL xf
  • 判断两个ip地址是否属于同一子网

    include lt stdio h gt include lt string h gt include lt stdlib h gt 功能 判断两台计算机IP地址是同一子网络 原型 xff1a int checkNetSegment ch
  • 做一个程序媛

    高考过去 xff0c 又一届的本科小鲜肉也毕业了 xff0c 办公室里面的实习生也换了一批 xff0c 忽然间有一点感慨 xff0c 转眼间 xff0c 也做了一年的程序猿了呀 这两天csdn从高考的程序员正巧在征文 xff0c 我也来蹭一
  • Ubuntu 进不了图形界面 硬盘文件系统错误 /dev/sda1 :clean...只有命令界面 give root password for maintaince. or press contro

    故障原因 xff1a 非法关机 xff0c 造成文件系统损坏 现象 xff1a 如题 xff0c 开机可以进入grub xff0c 但是任何选项都是无法进入图形界面 recovery 模式下选择菜单也无响应 正常开机只能进入如下图的状态 网
  • 花开两朵 天各一方

    他和她最后一次见面 xff0c 大约是四年前的毕业季 xff0c 分别的场景似乎已经模糊了 xff0c 但她临别的那句 到了深圳照顾好自己 xff0c 等国庆了我就去看你 却将美好的青春永远的定格在了那黄昏的站台 他和她相识是在十一年前的开
  • 嵌入式平台安装pandas以及其他包常见问题解决

    1 在嵌入式平台例如树莓派上安装python包常见问题解决 xff1a 问题1 xff1a 在使用pip进行安装pandas的时候 xff0c 安装完成之后在终端输入python3 然后导入pandas时出错 出现这个问题的最大原因就是pi
  • 从高考到程序员

    转瞬之间 xff0c 大四也已经结束了 天气晴朗 xff0c 毕业典礼上也人声鼎沸 xff0c 让我不禁想起了四年前 xff0c 高考结束大家急忙收拾东西逃离校园参加班级聚餐的情形 xff0c 与今日独自回宿舍最后清理一遍行李箱后拖着就走的
  • CAS学习笔记(三):认证中心返回多属性配置

    概述 cas server默认的可用信息只有用户名 xff0c 如果我还想知道他的角色类型等其它属性 xff0c 这时候就需要做一些配置了 其它代码编写代码方式这里不做介绍 xff0c 只做简单配置的方式介绍 配置操作 1 cas serv
  • 研究生语音识别课程作业记录(三) 非特定人孤立词识别

    研究生语音识别课程作业记录 xff08 三 xff09 非特定人孤立词识别 前言一 任务要求二 识别方法三 语音数据库四 特征参数提取五 识别过程及分析六 实验总结七 小结 前言 研究生期间的语音识别课程作业记录 xff0c 研一暑假的主要
  • 文献查找几种方法

    这几天忙着统计学院院长的一些个人研究成果 xff0c 其中要对每条研究标明相关的信息 xff0c 找到了一些途径 xff0c 可以留个备用 1 专著 1 xff09 专著估计最不好找的要算出版日期了 xff0c 所以下次要用的话 xff0c
  • Debian 11 KDE Plasma桌面环境,编译Fcitx5(只编译,不安装)

    Debian 11 KDE Plasma桌面环境 xff0c 编译Fcitx5 xff08 只编译 xff0c 不安装 xff09 安装依赖的工具和库 安装前需要检查电脑上是不是具备这些工具 xff0c 或者库 xff08 这是我根据实际情
  • 快速解决 vsftpd nologin 虚拟用户 拒绝访问 无法登录

    搭建好了vsftpd服务之后 xff0c 新建了一个nologin虚拟用户 xff0c 然而在另一台win7上用WinSCP连接ftp时提示错误 useradd d home ftp s sbin nologin ftpUser1 pass
  • 云计算的部署

    一 云计算的服务和交付模式 基础设施即服务 xff08 Iaas xff09 平台即服务 xff08 Paas xff09 软件即服务 xff08 Saas xff09 衍生出 xff1a 存储即服务 数据库即服务 安全即服务 通信即服务
  • MapReduce的数据流程、执行流程

    MapReduce的大体流程是这样的 xff0c 如图所示 xff1a 由图片可以看到mapreduce执行下来主要包含这样几个步骤 1 首先对输入数据源进行切片 2 master调度worker执行map任务 3 worker读取输入源片