hadoop_MapReduce详解

devtools/2024/11/8 12:40:14/

MapReduce秒懂

  • MapReduce定义
  • MapReduc优缺点
    • 优点
    • 缺点
  • MapReduc核心思想
  • MapReduc工作流程
    • Map阶段
      • 切片(split)
      • 读取(RecordReader)
      • 处理(mapper)
      • 收集(collect)
      • 溢写(spill)
      • 合并(combine)
    • Reduce阶段
      • 拷贝(copy)
      • 合并(merge)
      • 排序(sort)
      • 处理(reducer)
  • 分区概述
  • 排序概述

MapReduce定义

MapReduce是一个分布式运算程序的编程框架

MapReduc优缺点

优点

  1. 易于编程
  2. 良好的扩展性
  3. 高容错性
  4. 适合PB级以上海量数据的离线计算

缺点

  1. 不擅长实时计算
  2. 不擅长流式计算
  3. 不擅长DAG(有向图)计算

MapReduc核心思想

在这里插入图片描述

  1. Job(作业) : 一个MapReduce程序称为一个Job,MR程序一般需要分成2个阶段:map阶段和reduce阶段
  2. MRAppMaster:MR任务的主节点,一个Job在运行时,会先启动这个进程,负责Job中执行状态的监控、容错、RM申请资源、提交Task等等
  3. Map是MapReduce程序运行的第一个阶段,MapTask负责是Map阶段程序的计算,在一个MR程序的Map阶段,会启动N个MapTask,每个MapTask是完全并行运行,互不相干
  4. Reduce是MapReduce程序运行的第二个阶段(最后一个阶段),Reduce阶段的目的是将Map阶段,每个MapTask计算后的结果进行合并汇总,数据依赖于上一个阶段的所有MapTask并发实例的输出,ReduceTask也是并行运行,每个ReduceTask最终都会产生一个结果
  5. MapReduce程序只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行

MapReduc工作流程

Map阶段

切片(split)

切片指的是MapReduce框架根据输入数据源的大小和配置参数,将数据源分割成多个较小的数据集合,每个数据集合称为一个切片(Split),每个切片会被分配给一个单独的MapTask进行处理

InputFormat

MR程序必须指定一个输入目录,一个输出目录,InputFormat代表输入目录文件的格式。默认的是普通文件,使用FileInputFormat,如果处理的数据在数据库中,需要使用DBInputFormat

FileInputFormat

用来读取数据,其本身为一个抽象类,继承自 InputFormat 抽象类,针对不同的类型的数据有不同的子类来处理,不同的子类有着不同的切片机制,常见的接口实现类如下:

  • TextInputFormat(默认)

      切片机制:1. 通过计算文件的起始位置、文件的长度以及配置的块大小,简单的按照文件的内容长度进行切片2. 切片大小,默认等于Block大小(blocksize)3. 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片4. 每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分为一块切片
    
  • KeyValueTextInputFormat

      按行读取,每一行为一条记录,被分隔符分隔,默认分隔符为'\t'
    
  • NLineInputFormat

      切片机制按照指定的行数N来划分,即输入文件的总行数/N=切片数,不能整除则+1片
    
  • CombineTextInputFormat

      用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样多个小文件就可以交给一个MapTask处理切片机制:包括虚拟存储过程和切片两个部分虚拟存储过程:1. 将输入目录下所有文件按照文件名称字典顺序一次读入,记录文件大小,并累加计算所有文件的总长度2. 根据设置的虚拟存储切片最大值,将每个文件划分成一个一个设置的切片值大小的文件3. 当剩余数据大小超过设置的切片值且不大于2倍时,将文件均分成2个虚拟存储块(防止出现太小切片)切片过程:1. 判断虚拟存储的文件大小是否大于设置的切片值,大于等于则单独形成一个切片2. 如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片举例:text1大小2M、text2大小5M、text3大小3M、text4大小6M设置的虚拟存储切片最大值为4M虚拟存储过程:text1:2M < 4M 划分为1块text2:4M < 5M < 2 * 4M 划分为2块,块1:2.5M,块2:2.5Mtext3:3M < 4M 划分为1块text4:6M < 5M < 2 * 4M 划分为2块,块1:3M,块2:3M最终虚拟存储过程划分的块数为6块,2M、2.5M、2.5M、3M、3M、3M切片过程:没有文件大小是大于4M的,所以俩俩合并共同形成一个切片,最终切片为3块2 + 2.5 = 4.5M2.5 + 3 = 5.5M3 + 3 = 6M
    
  • 自定义InputFormat

FileInputFormat切片机制

  1. 通过计算文件的起始位置、文件的长度以及配置的块大小,简单的按照文件的内容长度进行切片
  2. 切片大小,默认等于Block大小(blocksize)
  3. 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

FileInputFormat切片流程

  1. 程序先找到你数据存储的目录
  2. 开始遍历处理目录下的每一个文件
  3. 遍历第一个文件,获取文件的大小,计算设置切片的大小(默认是块大小128M),开始切片
  4. 将切片信息写到一个切片规划文件中
  5. 提交切片规划文件到YARN上,YARN的MRAppMaster根据切片规划文件计算开启MapTask个数

读取(RecordReader)

RecordReader负责从输入格式中,读取数据,读取后封装为一组记录(k-v),mapreduce只能处理kv

处理(mapper)

将解析出的key_value交给map()函数处理,并产生一系列新的key_value

收集(collect)

收集线程负责将写出的key-value收集到缓冲区(MapOutPutBuffer)中,每个记录在进入缓冲区时,先调用Partitioner(分区器)为记录计算一个区号

  • 缓冲区默认大小为100M

溢写(spill)

溢写线程会在缓冲区已经收集了80%空间的数据时被唤醒,唤醒后负责将缓冲区收集的数据溢写到磁盘上,生成一个临时文件

溢写流程

  1. 一旦缓冲区满足溢写条件,先对缓冲区的所有数据,进行一次排序,排序方式是先按照分区编号Partition进行排序,然后按照key进行升序排序,排序时,只排索引不移动数据,经过排序后,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序
  2. 按照分区编号由小到大进行溢写,将每个分区中的数据写入任务工作目录下的临时文件中,溢写多次,生成多个临时文件,如果最后一批数据不满足溢写条件会执行一次flush
  3. 将分区数据的元信息写到内存索引数据结构SpillRecord中,其中每个分区的元信息包括在临时文件中的偏移量、压缩前数据大小和压缩后数据大小

合并(combine)

溢写结束后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。因为后续reduce会读取文件,这样可避免同时读取大量文件产生的开销

合并流程

  1. MapTask以分区为单位进行合并。对于某个分区,它将采用多轮递归合并的方式
  2. 每轮合并10(默认)个文件,并将产生的文件重新加入待合并列表中
  3. 对文件进行排序,重复以上过程,直到最终得到一个大文件,这个文件每个分区中的key-value都是有序的
  4. 最终将数据写入到MapTask磁盘的某个文件中

Reduce阶段

拷贝(copy)

ReduceTask从各个MapTask上远程拷贝数据,每个ReduceTask只负责一个分区,所以只copy不同MapTask上这个分区的数据,针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中

合并(merge)

在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多

  1. 文件大小超过一定阈值,则放到磁盘上,否则放到内存中
  2. 磁盘上的文件数目达到一定阈值,进行一次合并,生成一个更大的文件
  3. 内存中文件大小或者数目超过一定阈值,进行一次合并后将数据写到磁盘上

排序(sort)

由于数据是从多个MapTask上copy过来的,所以要对所有数据进行一次归并排序,保证在进入reduce之前是排好序的

处理(reducer)

将排好序的数据进行分组,调用reduce()函数处理数据,将计算结果写到文件上

分区概述

分区是在MapTask中通过Partitioner来计算分区号

  1. 总的partitions(分区数),取决于用户设置的reduceTask的数量
  2. partitions>1,默认尝试获取用户设置的分区数,如果用户没有定义,那么会使用HashPartitioner,HashPartitioner根据key的hashcode进行计算,相同的key以及hash值相同的key会分到一个区
  3. partitions<=1,默认初始化一个Partitioner,这个Partitioner计算的所有的区号都为0

排序概述

排序是MapReduce框架中最重要的操作之一,MapTask和ReduceTask均会对数据按照key进行排序,该操作属于Hadoop的默认行为,任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序

排序分类

  • 部分排序

      MapReduce根据输入记录的键值对数据集排序,最终生成N个结果文件,每个文件内部整体有序
    
  • 辅助排序

     在进入reduce阶段时,通过比较key是否相同,将相同的key分为一组
    
  • 全排序

      对所有的数据进行排序,指生成一个结果文件,这个结果文件整体有序
    
  • 二次排序

      在对key进行比较时,比较的条件为多个
    

http://www.ppmy.cn/devtools/132313.html

相关文章

微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka

在 Windows 上安装 MySQL 下载 MySQL 安装包&#xff1a; 访问 MySQL 官方网站。选择适合 Windows 的安装程序&#xff0c;下载并保存。 运行安装程序&#xff1a; 双击下载的安装文件&#xff0c;开始安装。在安装向导中选择“开发者默认”或“完整安装”。 配置 MySQL&#x…

Java基础——反射

反射是框架设计的灵魂 &#xff08;使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09;&#xff09; 翻译成人话就是&#xff1a;反射技术&#xff0c;指的是加载类的字节码到内存&#xff0c;并以…

语忆科技携手火山引擎数据飞轮 探索智能客服场景新可能

放弃支付、申请退款、购后差评……消费者在电商平台的每一项操作背后&#xff0c;其实都有原因。 而这些原因&#xff0c;往往深藏于消费者与商家客服沟通的十几条甚至几十条对话之中。 在杭州语忆科技有限公司 CTO 魏志成看来&#xff0c;消费者与商家客服的沟通内容&#xff…

市场营销应该怎么学?

别一听市场营销就觉得是那些大公司玩的高深莫测的游戏&#xff0c;其实它就在你我身边&#xff0c;无处不在&#xff0c;影响着咱们生活的方方面面。 记得去年双十一&#xff0c;你是不是被各种优惠券、预售、秒杀整得头晕眼花&#xff0c;最后还是忍不住剁了手&#xff1f; …

(十)JavaWeb后端开发——SpringBoot

目录 1.Spring Boot概述 2.参数请求 2.1简单参数&实体参数 2.2数组集合参数 ​编辑 2.3日期参数 2.4路径参数 3.服务器响应数据 1.Spring Boot概述 Spring公司提供了若干个子项目&#xff0c;每个项目用于完成特定的功能&#xff0c;比如SpringBoot、SpringData、…

从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?

Apache Atlas 是一套可伸缩且可扩展的数据治理服务&#xff0c;提供了开放的元数据管理和治理能力。它能够自动发现和创建数据资产及其血缘关系。 但是&#xff0c;在使用 Apache Atlas 时&#xff0c;有时会遇到 Hive 库 Alter 语句不更新元数据的问题。当在 Hive 库中执行 A…

SpringBoot实现的企业资产管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Anaconda超详细下载安装教程(附安装包)

文章目录 一、下载二、安装Anaconda1.解压下载的安装包2.开始安装3.测试配置是否成功4.其他问题1.查看Anaconda版本2.查看当前是否可以使用python 一、下载 Anaconda安装包下载&#xff1a;https://pan.quark.cn/s/ae29fb506730 &#xff08;直接下载&#xff0c;解压安装即可…