mapreduce中的MapTask工作机制(Hadoop)

MapTask工作机制

MapReduce中的Map任务是整个计算过程的第一阶段,其主要工作是将输入数据分片并进行处理,生成中间键值对,为后续的Shuffle和Sort阶段做准备。


1. 输入数据的划分:

  • 输入数据通常存储在分布式文件系统(如HDFS)中,InputFormat负责将输入数据划分成若干个InputSplit,每个InputSplit对应一个Mapper任务的输入
  • 输入数据被划分成多个InputSplit的目的是为了充分利用集群中的计算资源,并实现数据的并行处理。

2. Map任务的启动:

  • 一旦MapReduce作业被提交,Master节点(JobTracker)会将Map任务分配给空闲的Map任务槽(Task Slot)。
  • 每个Map任务槽都运行在集群中的某个节点上,并且能够处理一个或多个Mapper任务。

3. Mapper的初始化:

  • Map任务被分配到一个节点上时,该节点会启动一个Mapper实例。
  • Mapper实例会首先执行初始化操作,包括获取输入数据的位置信息、加载用户自定义的Map函数等。

4. 数据处理:

  • Mapper开始处理其对应的InputSplit中的数据。
  • 对于每个输入记录,Mapper会调用用户定义的Map函数,该函数将输入记录转换成若干个中间键值对(key-value pairs)。
  • 这些中间键值对通常表示了对输入数据的处理结果,比如单词计数问题中,键可以是单词,值可以是该单词出现的次数。

Map任务中,为了提高处理速度和效率,通常会采取一些数据处理优化策略,比如:

  • 数据局部性优化:尽可能在处理数据时减少网络通信开销,使得处理同一输入分片的数据的Mapper任务能够在同一个节点上执行,以减少数据的传输成本

  • 流水线处理Map任务可以通过流水线处理来提高吞吐量,即在处理一个输入记录的同时,可以开始处理下一个输入记录,从而减少处理过程中的等待时间


5. 中间结果的缓存:

Map任务通常会将中间结果缓存在内存中,但如果缓存空间不足以存储所有的中间结果时,会采取一些策略来管理缓存,例如

  • 溢出到磁盘:当内存中的中间结果达到一定阈值时(比如默认的80%),Map任务会将部分中间结果写入磁盘的临时文件中,以释放内存空间,从而继续处理新的输入记录。

  • 内存管理算法:Map任务可能采用LRU(最近最少使用)等算法来管理内存中的中间结果,保留最常使用的数据,释放不常用的数据。

    在 Map 阶段完成后,中间结果会被写入本地磁盘,但在写入之前,通常会进行本地排序操作

  • 本地排序可以确保相同 key 的数据在同一个位置,以便后续的 Shuffle 阶段更高效地进行数据传输和处理。

  • 在必要时,还可以对数据进行合并和压缩操作,以减少存储空间和提高数据传输效率。这些步骤都是为了优化整个 MapReduce 作业的性能和效率。


6. 任务状态更新:

  • Map任务执行期间,Master节点会周期性地接收来自Map任务的心跳信息,以报告任务的运行状态,并定期更新任务进度

  • 如果Map任务长时间没有发送心跳信息,Master节点可能会将其标记为失败,并重新分配任务给其他节点执行。

  • Map任务在执行完所有的输入记录后,会向Master节点报告任务完成,并将生成的中间结果的位置信息发送给Master

  • MapReduce框架具有强大的容错机制,即使Map任务在执行过程中出现失败,Master节点也能够重新分配任务并继续执行,以确保作业的顺利完成


7. Map任务的结束:

  • 所有数据处理完成后,MapTask 对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。

  • 当所有数据处理完后,MapTask 会将所有临时文件合并成一个大文件,并保存到文件output/file.out 中,同时生成相应的索引文件output/file.out.index。

  • 在进行文件合并过程中,MapTask以分区为单位进行合并。对于某个分区,它将采用多轮递归合并的方式。每轮合并mapreduce.task.io.sort.factor(默认 10)个文件,并将产生的文件重新加入待合并列表中,对文件排序后,重复以上过程,直到最终得到一个大文件。

  • 让每个 MapTask 最终只生成一个数据文件,可避免同时打开大量文件和同时读取大量小文件产生的随机读取带来的开销。

  • 一旦所有的输入记录都被处理完毕,并且中间结果都被写入磁盘,Map任务就会结束。

  • Map任务会将最终的中间结果的位置信息发送给Master节点,以便后续的ShuffleSort阶段能够获取到这些数据。


8.示例

假设我们有一个大的文本文件,其中包含了多篇文章,每篇文章之间由一个或多个空行分隔。Map任务的目标是将输入数据中的每个单词映射成键值对(单词, 1),以便后续的Reduce任务可以统计每个单词的频次。


(1) 输入数据的划分

  • Hadoop中,这个文本文件被分成若干个逻辑块(block),每个逻辑块会被存储在HDFS的不同节点上。当我们提交MapReduce作业时,Hadoop会将这些逻辑块划分成若干个InputSplit,每个InputSplit对应一个Mapper任务的输入。

(2) Map任务的启动

  • 一旦MapReduce作业被提交,Master节点会启动作业的第一个阶段,即Map阶段。Master节点会根据集群中的可用资源情况,将Map任务分配给空闲的节点上的Map任务槽。

(3) Mapper的初始化

  • 每个Mapper任务在运行之前都需要进行初始化。这个初始化过程包括获取对应的InputSplit的数据位置信息、加载用户自定义的Map函数等

  • 在我们的例子中,Map函数需要额外的逻辑来识别文章的标题。


(4) 数据处理

  • Mapper开始处理其对应的InputSplit中的数据。对于每个InputSplitMapper会逐行读取数据。
  • 在我们的例子中,Mapper会识别每篇文章的标题,并为每篇文章的每个单词生成键值对。对于每个键值对,键是单词,值是1,表示该单词在文章中出现了一次。

(5) 中间结果的缓存

  • Mapper会将生成的中间键值对缓存在内存中。当内存中的数据达到一定阈值时,部分结果会被写入磁盘的临时文件中以释放内存空间。
  • 在我们的例子中,中间结果包括文章标题和单词出现次数的键值对。

(6)任务状态更新

  • Map任务执行期间,Mapper会定期向Master节点发送心跳信息,以报告任务的运行状态和进度。Master节点会根据这些信息来监控任务的执行情况,并在必要时重新分配任务。

(7) Map任务的结束

  • Mapper处理完其对应的InputSplit中的所有数据,并且中间结果都被写入磁盘后,Map任务结束。
  • Mapper会将最终的中间结果的位置信息发送给Master节点,以便后续的ShuffleSort阶段能够获取到这些数据。

通过Map任务的执行,我们得到了每篇文章中单词的频次统计结果,并且识别出了每篇文章的标题。这些中间结果将被用于后续的Shuffle和Sort阶段,最终得到我们想要的每篇文章中单词的频次统计结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生实现ajax

1 什么是ajax AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…

unity学习(85)——同步节奏(tcp架构确实有问题)

挂的时间长了,就出现其他下线本地不destroy的情况了,而且此时再登录,新渲染中已经没有已经下线的玩家 unity这边就没有收到126!!!125的问题是多种多样的!!! 化简服务器w…

设计循环队列(队列oj)

1.设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。…

【笔记】vscode debug进入site-packages包源码

选择左侧栏第三个图标,点击创建 launch.json 文件 选择 Python Debugger 选择Python文件 这里可以看到launch.json 文件 在configurations中添加键值对 "justMyCode": false在文件中打上断点,点击"三角符"号开始调试 按F11或者红框…

reportlab 生成pdf文件 (python)

1 安装 pip install reportlab2 应用场景 通过网页动态生成PDF文档大量的报告和数据发布用XML一步生成PDF 官网案例 3 PLATYPUS Platypus是“Page Layout and Typography Using Scripts”,是使用脚本的页面布局和印刷术的缩写,这是一个高层次页面布局…

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元,这些 SQL 语句要么全部执行成功,要么全部不执行,不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务的主要作用是保证数…

记一次kafkakerberos认证问题

1,报错信息 排查思路:检查kerberos配置文件 kerberos.kafka.principalkafka/huawe_baseSECURITY.COM kerberos.kafka.keytabPath/etc/huawe_base.keytab kerberos.kafka.krb5ConfPath/etc/krb5.conf但是查看kafka_client_jass.conf文件,发现…

网络基础-TCP/IP和OSI协议模型

一、OSI和TCP/IP模型 二、OSI七层模型 三、TCP/IP模型 参考:https://www.cnblogs.com/f-ck-need-u/p/7623252.html

关联规则挖掘(二)

目录 三、FP-增长算法(一)算法的背景(二)构造FP-树(三)生成频繁项集 四、关联规则的评价(一)支持度和置信度的不足(二)相关性分析 三、FP-增长算法 &#xf…

.NET 发布,部署和运行应用程序

.NET应用发布 发布.Net应用有很多种方式,下面列举三种发布方式: 单文件发布跨平台发布Docker发布 单文件发布 右键工程,选择“发布”,部署模式选择“独立”,目标运行时选择自己想要部署到的系统,我这里用…

问题:react函数中的state是上一次的值

场景 有一个聊天输入框组件,输入框上面有表情包组件。 通过redux创建了store,存储一个message的状态,用于表情包和输入框共享状态。 输入框通过设置value和onClick做了一个简单双向绑定,其中value的值为store里的message。 impor…

【Java框架】Spring框架(三)——Spring整合Mybatis及Spring声明式事务

目录 回顾Mybatis和新对象思路整理 Spring和MyBatis的整合步骤1. 创建Web工程,导入Spring和MyBatis的相关依赖2. 建立开发目录结构,创建实体类3. 创建数据访问接口和SQL映射语句文件4. 使用Spring配置文件配置数据源4.1 database.properties4.2spring配置…

全国产化无风扇嵌入式车载电脑在救护车远端诊断的行业应用

救护车远端诊断的行业应用 背景介绍 更加快速的为急症病人在第一时间开始进行诊断和治疗,是提高病人救助成功率的关键。因此,先进的救护系统正在思考,如何在病人进入救护车之后,立刻能够将救护车中各种检查仪器的信息快速的传回医院&#xf…

aws云靶场和一些杂记

aws靶场 在AWS靶场中,存在三个安全问题:1) 一个S3存储桶政策配置错误,允许公共访问,通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色,允许发送和接收消息,通过aws sqs命令行工具的receive-…

JS-42-Node.js01-Node.js介绍

一、浏览器大战 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准。 后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步。(2001年推出…

C++面向对象程序设计-北京大学-郭炜【课程笔记(七)】

C面向对象程序设计-北京大学-郭炜【课程笔记(七)】 1、类型转换运算符2、自增、自减运算符的重载3、继承和派生的基本概念3.1、基本概念3.2、派生类对象的内存空间 4、继承关系和复合关系4.1、继承关系的使用4.2、复合关系的使用 5、派生类覆盖基类成员6…

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI 前言简介模型构架情绪推理器回复生成器实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《The Empathic Dialogue Generation Model…

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED (创建vue过程) 起因:卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前,使用npm更新或者安装啥的时,出现此类提示,则表明,用来验证和网络加…

java读取Excel表格数据

java读取Excel表格数据 环境说明项目结构1.controller层2.service层实现层StudentModel.java类 使用的Maven依赖效果示例一效果示例二文档截图第一页第二页 postman请求说明其他说明 环境说明 jdk1.8,springboot2.5.3 项目结构 1.controller层 package com.exam…

Taro-vue微信小程序用户隐私保护

Taro-vue微信小程序用户隐私保护 一、在 微信公众平台的【设置】- 【服务内容与声明】 ,设置用户隐私保护指引,添加项目需要的接口权限。 【用户隐私保护指引】提交之后,官方会进行审核。审核通过之后,对应的接口权限才会生效。 …