mapreduce工作流程图_hadoop如何退出输入模式

mapreduce工作流程图_hadoop如何退出输入模式MapReduce工作流程图 流程详解(重点) MapTask 待处理的文本通过submit()方法,获取待处理的数据信息,然后根据InputFormat切片方法机制,生成切片方法文件。把切片方法文件

MapReduce工作流程

MapReduce工作流程图

流程详解(重点)

MapTask

  1. 待处理的文本通过submit()方法,获取待处理的数据信息,然后根据InputFormat切片方法机制,生成切片方法文件。把切片方法文件和资源配置文件全部提交在资源路径。提交的信息有:Job.split、wc.jar、Job.xml
  2. 把资源提交路径下的信息文件提交给YARN集群或者本地内存中,之后YARN集群根据提交的信息启动Mr appmaster主机
  3. Mr appmaster根据提交的切片规划机制计算出MapTask的数量,生成对应的MapTask任务。
  4. MapTask任务根据Mr appmaster分配的数据量,去原始文件当中读取相应切片的数据。读取数据需要借助InputFormat中定义的 RecordReader(如果没有定义,则会默认使用TextInputFormat)进行切片
  5. 如果使用默认切片方法,则每读取一行,在Mapper类中进行逻辑运算,即通过获取到的key-value值确定文件传到Reduce类中的key-value值
  6. 逻辑运算完成后,通过Context.write(k,v)方法进行数据传输。此时先将结果(<k,v>数据)写入到一个环形缓冲区,在这个环形缓冲区中一分为二,从右侧的缓冲区开始写入数据(<k,v>键值对),从左侧开始写入数据的索引。
  7. 在往环形缓冲区写入数据的过程中,不仅要写入数据的索引,还需要写出数据所在分区(MapReduce中分区默认有一个,也可以指定多个分区)。在声明了所在的分区之后,要对<k,v>键值对进行排序。排序不是每时每刻进行的,是在数据写入完成,或者数据往磁盘溢写的时候,要进行一次排序
  8. 当内存已存入80%时,将环形缓冲区中的数据溢写到磁盘中,并将缓冲区中的数据清空,之后在反向写入数据和索引(顺时针改为逆时针/逆时针改为顺时针)。如果数据过多,会进行多次溢写,溢写时根据分区溢写,并且每个分区内的数据是有序的
  9. 对溢写文件通过Merge进行归并排序,之后通过Combiner对数据进行合并

ReduceTask

  1. MapTask数据处理完成之后,将数据写入缓冲区分区或者磁盘中去,磁盘中存储的文件信息与缓冲区存储的文件信息相同,都有<k,v>键值对及其分区和索引。
  2. 在所有的MapTask任务完成后,Mr appmaster做出响应。Mr appmaster根据MapTask输入的分区数确定ReduceTask的数量
  3. 之后Mr appmaster启动相应数量的ReduceTask,并告知ReduceTask处理数据的范围(数据分区),一个分区需要有一个ReduceTask处理数据。ReduceTask1处理partition 1的数据,ReduceTask2处理partition2的数据……
  4. ReduceTask将MapTask中相应分区中的数据下载到ReduceTask本地磁盘中,并将文件进行合并,之后再对文件中的数据进行归并排序
  5. 通过GroupingComparator(k,knext)方法对文件进行分组,之后将key值相同的数据调用Reduce(k,v)方法,一次读取一组
  6. 通过OutPutFormat将数据输入到结果文件中(默认调用TextOutPutFormat)。如果有多个ReduceTask,则写入到多个输出文件中

Shuffle

  1. maptask收集我们的map()方法输出的kv对,放到内存缓冲区中
  2. 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
  3. 多个溢出文件会被合并成大的溢出文件
  4. 在溢出过程中及合并的过程中,都要调用partitioner进行分区和针对key进行排序
  5. reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据
  6. reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)
  7. 合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程(从文件中取出一个一个的键值对group,调用用户自定义的reduce()方法)

总结

  • MR流程总共分为四个阶段:
  1. submit阶段:切片job.split和配置项信息job.xml形成文件提交到一个资源路径,然后通过YARN启动运行
  2. MapTask任务处理阶段:读取切片数据、处理切片数据
  3. Shuffle阶段(MapTask任务执行结束到ReduceTask任务执行之前):MapTask写出数据到环形缓冲区、分区、排序、溢写文件……
  4. ReduceTask任务处理阶段:读取环形缓冲区数据、读取溢写文件数据、reduce运算逻辑、输出结果到输出文件
  • 注意:

    Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

    缓冲区的大小可以通过参数调整,参数:io.sort.mb 默认100M

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5974.html

(0)
上一篇 2023-04-20
下一篇 2023-04-20

相关推荐

  • Python字典:构建网站页面所需的完美数据结构

    Python字典:构建网站页面所需的完美数据结构在Web开发中,数据结构的选择非常关键。Python中提供了一种非常有用的数据结构——字典。字典提供了一种映射关系,将键映射到值上。在构建网站页面时,使用字典可以方便地存储和管理页面所需的各种数据。这篇文章将详细介绍Python字典在网站开发中应用的方方面面。

    2024-01-26
    106
  • 「Flink」配置使用Flink调试WebUI[通俗易懂]

    「Flink」配置使用Flink调试WebUI[通俗易懂]很多时候,我们在IDE中编写Flink代码,我们希望能够查看到Web UI,从而来了解Flink程序的运行情况。按照以下步骤操作即可,亲测有效。1、添加Maven依赖<dependency&gt

    2023-01-25
    188
  • 数据库的结构,创建,使用是什么_sql创建数据库代码

    数据库的结构,创建,使用是什么_sql创建数据库代码从逻辑上看:描述信息的数据存在数据库中并由DBMS统一管理 从物理上看:描述信息的数据事宜文件的方式存储在物理磁盘上 数据库文件分为: 1.数据文件:存放数据库数据和数据仓库对象的文件 主要数据文件(

    2023-03-04
    143
  • 用Python轻松掌握时间操作

    用Python轻松掌握时间操作随着计算机应用的不断普及,时间操作在计算机编程中也越来越重要。Python作为一门通用的编程语言,具有良好的时间处理能力,能够轻松解决许多时间相关的问题。本文将介绍Python中常用的时间处理模块及其应用,帮助读者轻松掌握时间操作。

    2024-01-16
    111
  • SQL 关联子查询[通俗易懂]

    SQL 关联子查询[通俗易懂]学习重点 关联子查询会在细分的组内进行比较时使用。 关联子查询和 GROUP BY 子句一样,也可以对表中的数据进行切分。 关联子查询的结合条件如果未出现在子查询之中就会发生错误。 一、普通的子查询和

    2023-04-29
    161
  • oracle查看版本命令_oracle 命令行登录

    oracle查看版本命令_oracle 命令行登录select banner from sys.v_$version;

    2022-12-27
    168
  • 存储过程的使用(四)– 使用DECLARE 定义条件和处理程序

    存储过程的使用(四)– 使用DECLARE 定义条件和处理程序定义条件和处理程序是事先定义程序执行过程中可能遇到的问题,并且可以在处理程序中定义解决这些问题的办法,可以简单理解为异常处理,这种方式可以提前预测可能出现的问题,并提出解决办法,从而增强程序健壮性,…

    2023-03-29
    155
  • Python的字典:高效地存储和检索数据的方式

    Python的字典:高效地存储和检索数据的方式Python是一种脚本语言,可以进行许多不同类型的编程。在这些类型中,使用Python字典是最常见和重要的。Python字典是一种可变的,无序的数据类型,可以以键值对的形式存储和查询数据。在这篇文章中,我们将详细介绍Python字典的使用方法、优点和缺点。

    2023-12-30
    110

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注