(二)MapReduce整体流程

2023-05-16

1.MapReduce工作流程


1.MapReduce核心思想 (图6):

      采用“分而治之”思想,将大数据集拆分到多个小数据块,再转到多台机器上并行处理。总的来说Map任务独立执行被分割的数据,Reduce将Map任务的中间结果进行并行整合,最后得到整个数据集输出结果。

图6 MapReduce整体流程

2.MapReduce各阶段流程 (图7):

(1)Map预处理:MapReduce框架使用InputFormat模块做Map任务前的预处理(从HDFS中加载数据),比如验证输入格式是否符合输入规则。然后,将输入文件切分为逻辑上多个InputSplit单位(逻辑定义分片长度、起始位置)。

(2)加载Map数据:由于InputFormat非物理上切分,所以还需要RecordReader(RR)转换为多个适合Map任务的数据格式,再输入给Map任务。

(3)执行Map任务:Map任务由用户自定义规则,然后映射输出一系列<key,value>作为中间结果。

(4)Reduce预处理:为了让Reduce并行处理Map结果,需要对Map输出结果Shuffle操作,包括但不限于:分区(Portition)、排序(Sort)、合并(Combine)、归并(Merge)等。接下来,将得到的<key,value-list>中间结果交给Reduce。

(5)执行Reduce任务:根据4中<key,value-list>中间结果输入,再执行用户用户定义的逻辑,输出结果给OutputFormat模块。

(6)保存结果:OutputFormat模块验证输出目录是否存在以及结果类型是否符合预期,若满足则将Reduce结果保存到分布式文件系统。

图7 MapReduce各阶段流程

3.Shuffle整体流程 (图8):

    所谓Shuffle是指对Map输出结果进行进行分区、排序、合并等处理并提交给Reduce,它相当于一个中间过程。其又可分为Map端和Reduce端的Shuffle操作。

图8 Shuffle流程

①Map端Shuffle流程 (图9):

      Map的输出结果首先被写入缓存,当缓存满时,启动溢写操作,将缓存中数据写入磁盘文件并清空缓存。当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序(Sort)和合并(Combine),之后再写入磁盘文件。但是每次溢写操作都会生成新的磁盘文件。在Map任务结束之前,所有溢出文件会被归并(Merge)为大的磁盘文件,然后通知相应的Reduce任务来领取属于自己处理的数据。

图9 Map端的Shuffle过程

②Reduce端Shuffle流程 (图10):

      该任务从Map端的不同Map机器节点中领取属于自己处理的专属数据,然后对数据进行归并(Merge)后,最后交给对应Reduce处理。

2.Job执行流程(MapReduceV1.0)


1.架构两大部分:MapReduce1.0采用的是主/从架构,其中主节点是JobTracker(作业服务器),从节点是TaskTracker(任务服务器)。二者之间通过定时心跳进行通信。

2.Job执行流程 (图11):

   ①提交作业:一个MapReduce作业提交到Hadoop之后,会进入完全地自动化执行过程。在这个过程中,用户除了监控作业的执行情况和强制终止作业之外,不能对作业的执行过程进行干扰,所以在作业提交之前,用户需要将作业所有的需要的参数配置完备。

   ②初始化作业:在客户端中,当用户作业调用JobTracker对象的submitJob()方法之后,JobTracker会把这个作业放在一个作业队列中去,进行调度,默认的调度方式是FIFO。当作业被调度执行时,JobTracker会对此作业进行初始化,根据处理数据的情况为其创建Map和Reduce任务。

   ③分配任务:TaskTracker是一个单独循环运行的软件,每间隔一段时间向JobTracker发送心跳信息(heartbeat),包括告知JobTracker此TaskTracker是否存活,是否准备好执行新的任务。在JobTracker接收到心跳信息后,如果任务队列中有待分配的任务时,它就会给一个准备好的TaskTracker分配一个任务,并将分配信息(包括要执行的任务信息和分配的资源信息)封装在心跳信息返回值返回给TaskTracker,TaskTracker根据此返回信息来执行任务。在JobTracker为TaskTracker分配任务时,为了减少数据移动I/O开销大的问题,会考虑将任务分配到数据所在的TaskTracker上。

   ④执行任务:TaskTracker根据心跳返回值的信息来执行任务,并跟踪任务执行的状态,并定时向JobTracker报告任务的状态,直到任务执行完成。

3.主要缺陷:

  • 可靠性差。在Hadoop集群中,任何时候都只有唯一的一个JobTracker。一旦主节点出现问题整个集群就无法工作,所以JobTracker的单点故障是所有故障中最严重的。

  • 可扩展性差。JobTracker同时作为资源管理器和作业调度器两个角色,当集群逐渐扩大时,JobTracker的压力会越来越大,成为了Hadoop系统的瓶颈,制约了Hadoop集群的可扩展性。

图11 MapReduceV1架构图

3.MapReduceV2.0主要变化内容


1.V 2.0版本思想:将JobTracker的资源管理和任务调度这两个主要功能进行分离,由两个单独的组件完成。新的资源管理器全局管理整个集群上所有计算资源的分配;YARN为每一个应用分配一个ApplicationMaster,由它负责相应作业的调度和资源的协调。

2.RsourceManager和NodeManager (图12):RsourceManager是一个主节点,它负责管理集群中所有资源的统一管理和分配,它接受来自各个节点上NodeManager的资源汇报信息。

   主节点ResourceManager只是负责简单的任务调度和资源分配,不在监控和记录每个任务的执行状态,也不再负责执行失败任务的重启等,只负责监控和重启ApplicationMaster;极大的减少了本身的资源开销,而且单点故障对整个集群的影响变得很小,恢复也因此变得更加容易。

   从节点NodeManager是单个节点上的任务和资源管理器,部署在集群的每台机器上,它管理这集群中的单个节点中的资源,监控Container的生命周期和资源使用情况,还负责与ResourceManger进行通信,报告节点计算资源的使用情况、节点的健康状况等。

3.相比与V1改进优势:

  • 资源利用率高,一个框架一个集群会造成资源占用的不均衡,某个框架因应用多而造成集群资源紧张,而某个框架因应用少而造成集群资源浪费。而YARN通过多种计算框架共享一个集群,使得集群利用率更高。

  • 数据共享,随着数据量的增加,移动数据的代价越来越大,YARN模式可以有效的降低这种代价。

  • 运维成本低。从运维多个集群到一个集群,大大降低了运维成本。

图12 MapReduceV2架构图

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

(二)MapReduce整体流程 的相关文章

  • 如何在oozie作业中指定多个libpath?

    我的 oozie 工作使用 2 个 jarx jar and y jar以下是我的 job properties 文件 oozie libpath lib oozie use system libpath true 当两个 jar 都位于
  • JobControl 和 JofConf.setMapperClass() 错误

    我正在尝试使用JobControl将多个Mappers和Reducers连接在一起但调用时遇到以下错误JobConf setMapperClass setMapperClass java lang Class
  • 高效查询Hbase

    我使用 Java 作为查询 Hbase 的客户端 我的 Hbase 表设置如下 ROWKEY HOST EVENT 21 1465435 host hst com clicked 22 1463456 hlo wrld com dragge
  • Hadoop分区器

    我想问一下Hadoop分区器 它是在Mappers中实现的吗 如何衡量使用默认哈希分区器的性能 是否有更好的分区器来减少数据偏差 Thanks 分区器不在映射器内 以下是每个映射器中发生的过程 每个映射任务将其输出写入循环缓冲存储器 而不是
  • MapReduce 上的Reduce 函数显示不正确的结果——为什么?

    我有一个数据结构来跟踪不同城市的人们 in db persons name John city Seattle name Bill city Portland 我想运行一个地图缩减来获取每个城市有多少人的列表 所以结果将如下所示 id Se
  • Hadoop中数据是如何分割的

    Hadoop是否根据程序中设置的mapper数量来分割数据 也就是说 有一个大小为 500MB 的数据集 如果 Mapper 的数量为 200 个 假设 Hadoop 集群允许同时存在 200 个 Mapper 那么每个 Mapper 是否
  • Mapfile 作为 MapReduce 作业的输入

    我最近开始使用 Hadoop 在使用 Mapfile 作为 MapReduce 作业的输入时遇到问题 以下工作代码在 hdfs 中编写一个名为 TestMap 的简单 MapFile 其中包含三个 Text 类型的键和三个 BytesWri
  • 如何在 couchdb 中索引多维数组

    我有一个多维数组 我想用 CouchDB 对其进行索引 实际上使用 Cloudant 我的用户有他们所属团队的列表 我想搜索找到该团队的每个成员 因此 获取所有具有 ID 为 79d25d41d991890350af672e0b76faed
  • CouchDB 视图:MapReduce 中可以接受多少处理?

    我一直在尝试使用 CouchDB 进行 MapReduce 一些示例显示了映射归约函数中可能存在的一些繁重逻辑 在一种特殊情况下 他们在映射内执行 for 循环 在发出您选择的文档之前 MapReduce 是否会在每个可能的文档上运行 如果
  • MongoDB 根据 _id 统计每分钟新文档数

    我想创建每分钟存储多少新文档的统计数据 由于具有标准 ObjectID 的 id 字段已经包含文档创建的时间戳 我认为应该可以以某种方式使用它 在 Stackoverflow 上 我发现了以下映射归约代码 可以在有用于创建数据的专用字段时完
  • Apache Pig:无法运行我自己的pig.jar 和pig-withouthadoop.jar

    我有一个运行 Hadoop 0 20 2 和 Pig 0 10 的集群 我有兴趣向 Pig 的源代码添加一些日志 并在集群上运行我自己的 Pig 版本 我做了什么 使用 ant 命令构建项目 有pig jar和pig without had
  • 在mongo中执行优先级查询

    样本文件 name John age 35 address join month 3 的员工优先级为 1 地址包含字符串 Avenue 的员工优先级为 2 地址包含字符串 Street 的员工优先级为 3 地址包含字符串 Road 的员工优
  • 流数据和 Hadoop? (不是 Hadoop 流)

    我想使用 MapReduce 方法分析连续的数据流 通过 HTTP 访问 因此我一直在研究 Apache Hadoop 不幸的是 Hadoop 似乎希望以固定大小的输入文件开始作业 而不是在新数据到达时将其传递给消费者 事实确实如此 还是我
  • MongoDB 从两个数组计算值、排序和限制

    我有一个存储浮点数组的 MongoDB 数据库 假设以下格式的文档集合 id 0 vals 0 8 0 2 0 5 有一个查询数组 例如 带有值 0 1 0 3 0 4 我想计算集合中所有元素的距离 例如 差异之和 对于给定的文档和查询 它
  • JA017:无法查找已启动的 hadoop 作业 ID

    当我在Hue的Oozie编辑器中提交mapreduce作业时 如何解决这个问题 JA017 无法查找与操作 0000009 150711083342968 oozie root W mapreduce f660 关联的已启动 hadoop
  • 为什么 Hadoop 中正确的缩减数量是 0.95 或 1.75?

    hadoop 文档指出 正确的归约次数似乎是 0 95 或 1 75 乘以 mapred tasktracker reduce tasks maximum 0 95 所有的减少都可以立即启动并开始 地图完成时传输地图输出 用1 75更快 节
  • array_reduce() 不能用作 PHP 的关联数组“reducer”?

    我有一个关联数组 assoc 并且需要将其简化为字符串 在这种情况下 OUT
  • mrjob组合器不工作python

    简单的映射组合reduce程序 映射column 1与值column 3并追加 在相同键和附加的每个映射器输出中 减少相同密钥的输出后 input 1 and input 2两个文件都包含 a 1 2 3 a 4 5 6 Code is f
  • Python - Map/Reduce - 如何在使用 DISCO 计数单词示例中读取 JSON 特定字段

    我正在按照 DISCO 示例来计算文件中的单词数 将单词数作为 Map Reduce 作业 http discoproject org doc disco start tutorial html 我对此工作没有任何问题 但是我想尝试从包含
  • 使用 Hadoop 映射两个数据集

    假设我有两个键值数据集 数据集A和B 我们称它们为数据集A和B 我想用 B 组的数据更新 A 组中的所有数据 其中两者在键上匹配 因为我要处理如此大量的数据 所以我使用 Hadoop 进行 MapReduce 我担心的是 为了在 A 和 B

随机推荐

  • 关于windows无法启动VMware USB Arbitration Service 错误2 问题解决

    关于windows无法启动VMware USB Arbitration Service 错误2 问题解决 控制面板 gt 卸载程序 gt 右击VMware Workstation gt 更改 gt 下一步 gt 修复 等待修复完成重启即可
  • 场景识别论文阅读感想(初步)

    近日阅读了一篇cvpr上2016年关于场景识别的论文 xff0c 写了如下感想 The Cityscapes Dataset for Semantic Urban Scene Understanding 阅读感想 1 概述 对于城市道路的环
  • 一款能生成NC文件(雕刻路径文件)的 inkscape ,想必很多人都找不到能用的

    xfeff xfeff 点击链接加入群聊 雕刻机技术营 xff1a https jq qq com wv 61 1027 amp k 61 5c6j991 下载链接 https pan baidu com s 1IQ9A6CmcgVxxKL
  • 多目标优化_学习笔记(一)

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习多目标优化中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 REMARK xff1
  • 多目标优化_学习笔记(二)NSGA-II

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习多目标优化中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 REMARK xff1
  • 多目标优化_学习笔记(三)MOEA/D

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习多目标优化中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 REMARK xff1
  • VNCViewer实现与WIN端文本复制粘贴

    主机系统 xff1a Win10 View端系统 xff1a Ubuntu 16 04 VNCViewer xff1a 6 17 今天踩的第二个坑 xff0c 主要还是因为懒 xff0c 有时候懒得打那么多字 xff0c 就想着和虚拟机一用
  • FGSM(Fast Gradient Sign Method)_学习笔记+代码实现

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 FGSM xff08 Fast
  • DeepFool对抗算法_学习笔记

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 DeepFool算法 特点 xf
  • 对抗样本黑箱攻击UPSET、ANGRI_学习笔记

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 DeepFool算法 特点 xf
  • One pixel 对抗攻击_学习笔记

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 One pixel 对抗攻击算法
  • 对抗样本可转移性与黑盒攻击_学习笔记

    前言 本篇博客出于学习交流目的 xff0c 主要是用来记录自己学习中遇到的问题和心路历程 xff0c 方便之后回顾 过程中可能引用其他大牛的博客 xff0c 文末会给出相应链接 xff0c 侵删 xff01 对抗样本可转移性与黑盒攻击深入研
  • VNC安装记录

    又是一次痛苦的安装过程 xff0c 记录一下避免再次踩坑 sudo apt get install tightvncserver 我安装的是tightvncserver 这个版本 xff0c 网上也有很多是vnc4server xff0c
  • ubuntu升级python版本

    Ubuntu16 04默认安装了Python2 7和3 5 请注意 xff0c 系统自带的python千万不能卸载 xff01 输入命令python 按Ctrl 43 D退出python命令行 输入命令sudo add apt reposi
  • Python microseconds 显示问题,及毫秒显示方法

    系统环境Ubuntu14 04 Python3 5 问题由来 xff1a 优化程序函数运行时间 xff0c 由于输入数据量比较大 xff0c 所以恰好且与1秒左右 xff0c 之前数据量小的数据集测试时用微秒 xff08 microseco
  • 关于ssh: connect to host XXX port 22: Connection timed out的解决办法

    今天想试着建立一个ss xff0c 结果犯了很多人在这里都会出现的错误 xff0c SSH连接不上 下面展现了笔者解决这个问题的流程 一 xff1a 查看master和data1 3的IP地址 当直接对data1 data2 data3进行
  • Matlab 应用GPU加速

    由于GPU近几年地迅速发展 xff0c GPU在多线程计算等方面逐渐超越CPU成为计算的主力军 而Matlab是常用的数学应用软件 xff0c 现在讲解一下如何在Matlab中使用GPU加速计算 文章目录 0 必要条件1 给GPU传输数据1
  • crt + xManager 远程打开linux 图形界面

    因为想要使用eclipse所以看了一下如何远程显示图形界面 1 安装eclipse c 43 43 xff1a sudo apt get install eclipse sudo apt get install eclipse cdt 2
  • keras.layers.upsampling2d

    span class token keyword from span keras span class token punctuation span layers span class token keyword import span U
  • (二)MapReduce整体流程

    1 MapReduce工作流程 1 MapReduce核心思想 图6 xff1a 采用 分而治之 思想 xff0c 将大数据集拆分到多个小数据块 xff0c 再转到多台机器上并行处理 总的来说Map任务独立执行被分割的数据 xff0c Re