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.mfbz.cn/a/551686.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java——代码块

目录 一.代码块概念以及分类 二.普通代码块 三.构造代码块 四.静态代码块 一.代码块概念以及分类 使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种: 普通代码块构造块静态块同步代码块(后续讲解多…

MySQL数据库第二天

如何授权和撤销 已经给客户授权: GRANT all on *.* to "用户名""获取IP地址" identified by "密码" 如果想撤销可以使用: revoke all on 数据库.表 form "用户名""获取的IP地址" 补充&#xff1…

基于云的内部威胁该如何应对,基础设施策略该如何部署

德迅云安全发现云的内部威胁对基于云的基础设施的安全性和完整性构成威胁,因此需要采取主动的风险缓解策略。组织可以通过在云中采用访问控制、用户监控、加密、员工培训和事件响应协议的组合来增强对内部威胁的防御能力。 在当今瞬息万变的网络安全世界中&#xff…

安卓官方例程

https://learn.microsoft.com/zh-cn/shows/connecton-demand/202?sourcerecommendations https://learn.microsoft.com/zh-cn/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?viewvs-2022 https://learn.microsoft.com/zh-cn/shows/xamari…

短信防刷之滑动验证码

前言:最近想写一个滑动验证码,前台的样式虽然很好看,但是并不安全,网上也都是一些demo,不是前后台分离的,然后就自己查资料,自己来完成了 滑动验证码 一、为什么要使用滑动验证码 首先&#x…

洁净区气流流型测试及拍摄注意事项-北京中邦兴业解读

洁净区气流流型测试在众多确认和验证项目中虽然看似微不足道,但其重要性却不容忽视。要做好气流流型测试,绝非易事,它要求精细的操作和深入的专业知识。毫不夸张地说,即便是对影视圈的大牌导演而言,若是不了解气流流型…

MySQL死锁与死锁检测

一、什么是MySQL死锁 MySQL中死锁是指两个或多个事务在互相等待对方释放资源,导致无法继续执行的情况。 MySQL系统中当两个或多个事务在并发执行时,就可能会遇到每项事务都持有某些资源同时又请求其他事务持有的资源,从而形成事务之间循环等…

npm命令卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动

1.现象 执行npm install命令时,没有报错,卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动 2.解决办法 (1)更换淘宝镜像源 原淘宝 npm 域名http://npm.taobao.org 和 http://registry.npm.ta…

springboot 人大金仓 kingbase-备份还原,命令中带密码,支持window和linux

命令带密码参考 Java代码实现国产人大金仓数据库备份还原需求-CSDN博客文章浏览阅读818次,点赞16次,收藏12次。本人在一次项目中,遇到了需要在系统管理中提供给用户备份还原系统数据的功能,由于项目特殊性,项目底层数…

Day:007(3) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy 保存数据案例-小说保存 spider import scrapyclass XiaoshuoSpiderSpider(scrapy.Spider):name xiaoshuo_spiderallowed_domains [zy200.com]url http://www.zy200.com/5/5943/start_urls [url 11667352.html]def parse(self, response):info response.xpath(&qu…

react v18 项目初始化

按照以下命令进行傻瓜式操作即可: 全局安装脚手架工具: npm install -g create-react-app创建项目my-react-app: create-react-app my-react-app安装 antd: yarn add antd安装 react-router-dom: yarn add react-router-dom启动项…

幻兽帕鲁老板公开发声:腾讯正在制作幻兽帕鲁克隆版

昨天,Pocketpair的老板出来指责中国游戏公司抄袭了他们的游戏Palworld,说这简直是太不可思议了。 Pocketpair的CEO Takuro Mizobe发布了一个叫Auroria的游戏的截图,然后说:“腾讯正在制作Palworld的克隆游戏!在中国&a…

10个你可能没听过但很好用的建筑设计AI工具

在之前的文章中我给大家介绍了很多Midjourney、Stable Diffusion的使用方法和对应的功能: Midjourney vs Stable Diffusion:提示相同,出图差距竟这么大!哪个更适配你的工作?https://news.vsochina.com/cn/industry/64…

Java 基于微信小程序的医院预约挂号小程序(V3)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

基于SpringBoot的“商务安全邮箱”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“商务安全邮箱”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构 收件箱效果图 草稿箱效果图 已发送…

计算机网络实验实验之VLAN的配置与分析

实验目的 了解什么是带内管理;熟练掌握如何使用telnet方式管理交换机;熟练掌握如何为交换机设置web方式管理;熟练掌握如何进入交换机web管理方式;了解交换机web配置界面,并能进行部分操作。 (6)了解VLAN原理&#xf…

OpenHarmony南向开发案例:【智能门锁】

一. 简介 本demo是基于Openharmony 3.1 Beta本版开发,不仅可以接收数字管家应用下发的指令来控制门锁开启,而且还可以通过数字管家设置不同的开锁密码以及一次性密码,实现给临时用户一个临时密码,保证门户安全。当然除了开锁的功…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时,批量工具可以更好的提升效率。通过本指南,你将了解如何批量上传全球商品,本指南适用于所有站点。 一、什么是批量上传? 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

部署ssm项目时遇到的一些错误

问题一:项目使用maven,打包完之后在idea启动不了 打包完之后在idea里面运行报错,提示找不到springmvc.xml配置文件。 再次clean后又可以运行了。 这是因为maven打包只会打包java文件,配置文件不进行打包,导致target-…

P1157 组合的输出 (dfs深搜)

题目连接&#xff1a;P1157 组合的输出 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; AC代码&#xff1a; #include<iostream> #include<cstring>using namespace std;const int N 30; int st[N];//用来存这个数用没用过&#xff08;1~n个…