Mapreduce

MapReduce是一种分布式离线计算框架,主要解决海量数据的计算问题。它包含MapTask和ReduceTask,Map阶段进行数据的局部运算,Reduce阶段进行数据的汇总处理。MapReduce的运行流程涉及Job提交、资源调度、分片处理等,程序员主要编写Mapper和Reducer逻辑。通过Driver提交Job,框架负责分布式执行和容错处理。
摘要由CSDN通过智能技术生成

Mapreduce

Mapreduce

1.mapreduce是什么

  • 分布式离线的计算框架,是一个分布式运算程序的编程框架,是用户开发基于hadoop的数据分析应用的核心框架,mapreduce的核心功能是将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的分布式运算程序并发运行在一个hadoop集群上。
  • hdfs–解决的是海量数据的存储问题
  • mapreduce—解决的是海量数据的计算以及索引问题

2.mapreduce产生的背景

实现分布式计算框架的思想

在这里插入图片描述

  • 单个运算程序需要分段
    • 阶段一:并行局部运算
    • 阶段二:汇总处理(并行处理)
    • 不同阶段需要开发不同的程序
  • 阶段之间的调度
  • 业务程序(task程序)如何分发到集群中并且如何启动
  • 如何监控task程序的运行状态,如何处理异常
  • 这些所有问题是所有分布式数据分析处理需求中所必须面对的问题,完全可以封装成框架
    • MAPREDUCE -->分布式计算框架
    • YARN -->分布式资源调度
  • NIO,BIO异步非阻塞

模拟实现并不是真正的实现过程

在这里插入图片描述

  • 分发运算程序
  • worker接受jar包
  • worker向客户端发送接收成功的信息,询问如何启动程序
  • 发送启动命令给worker
    • java -cp maptask 266405.txt 0-128M
  • 根据命令启动task任务
  • 问题
    • 客户端和服务器之间的传输
      • 服务器的mr开启服务组件,其中包括SocketServer,这样客户端就可以和服务端进行通信了。
    • resourcemanager
      • 负责资源调度

mapreduce的架构

1.MR程序的组成

  • appMaster---->mapreduce的进程
  • maptask —>自己继承Mapper重写的map()方法
  • reducetask —>自己继承Reducer重写的reduce()方法
  • clinetDriver —>myClient

2.job的提交流程

  • 图示

在这里插入图片描述

  • 流程

    • 客户端提交job到RM(resourcemanager)
    • RM生成job id 和path,并返回给客户端
    • 资源上传到hdfs之上
    • 返回资源已上传成功的消息
    • RM会将job放入待调度队列
    • RM会先分配一个资源给该job
    • 第一次分配资源:启动appMaster
      • worker到hdfs上拉取资源包
      • worker拉取资源之后,向客户端发送拉取成功的消息,并询问如何启动?
      • java -cp appMaster
      • 启动appMaster
    • 之后的申请资源:启动maptask
      • appMaster向RM申请资源用于执行maptask
      • RM分配资源
      • NM到hdfs拉取资源之后,启动maptask
      • 向appMaster询问,如何启动maptask
      • appMaster发送启动命令给worker java -cp maptask a.txt 0-128M
      • 启动maptask
    • 启动reducetask
      • 任意一个maptask任务完成后,appMaster会向RM申请启动reducetask所需的资源
      • 分配资源后,appMaster发送启动命令给worker java -cp reducetask
      • reducetask启动
  • 只有启动AppMaster的时候会去询问客户端,AppMaster启动之后,整个程序的资源申请都是由appMaster来向resourcemanager申请的

  • 所有的任务都在worker中执行,包括appMaster,maptask,reducetask

  • worker:container,相当于jvm。

3.分片

  • 图示

在这里插入图片描述

  • 注意点:

    • 最小分片大小 1byte M
    • 最大分片大小long的最大值 L
    • 分块的大小 B
    • 算法
      • min(max(M,B),L)不确定
  • 如何分片

    • 客户端程序要多大的并行度(maptask的数量)

    • map阶段的并行度:

      • 可会断会首先先看一下

        待处理目录下有多少数据量

      • 循环遍历,对每一个文件

      在这里插入图片描述

      • 看看这个文件有多少个block,并将block进行累加

      • 返回一个任务规划描述文件:

        job.splits

        split0 : /date/a.txt 0-128M

        split0 : /date/a.txt 128-256M

        split6 : /date/a.txt 768-800M

    • 分片与分块的区别

      • 分片不会真正意义上的把文件切开

        只是给一个偏移量。

      • 分块是物理上的概念,真正的将数据给切开了

      • 分片是逻辑

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值