Hadoop 04

Hadoop 04


1. MapReduce大致流程

大致分为五个阶段:map前 -> map -> shuffle -> reduce -> reduce后

各阶段做的操作如下:

map前

  • InputFormat计算切片信息
  • 建立临时目录
  • 生成jobid
  • 生成提交目录
  • 将切片信息放入提交目录
  • 将程序jar包放入提交目录
  • 将xml配置文件放入提交目录
  • 将提交目录内的内容发送给Yarn集群
  • yarn根据切片等信息计算需要的资源
  • 创建appmaster、maptask、reducetask进程

map

  • maptask通过InputFormat的RecordReader向hdfs读取信息到map方法中
  • 执行map方法中的逻辑
  • 若是有自定义分区,输出的数据会加上分区号,否则分区号为0

shuffle

  • map中数据出来后进入环形缓冲区
  • 缓冲区内占满80%后,会进行一次排序并写入磁盘,新数据从缓冲区另一方向继续写入
  • 当所有数据都处理完后,各文件会进行一次归并排序成一个文件,若有自定义combainer,此处会进行一次合并,浓缩数据

reduce

  • 数据从各个maptask的宿主机通过网络向reducetask中按分区写入数据
  • redustask内存不够则会持久到磁盘
  • 所有数据接收完后,进行一次归并排序为一个文件
  • 文件按组写入到reduce方法中供逻辑代码处理

reduce后

  • 经过处理后的数据,通过OutputFormat输出到日志/数据库/文件中

2. MapReduce中可自定义的一些组件

按照数据流顺序如下

InputFormat

设置后的作用:

  • 根据自己需要来自定义RecordReader读取数据到map中

Partioner

设置后的作用:

  • 在map方法后,每一个数据会被添加一个分区号
  • 有几个分区就会有几个reducetask
  • reduce阶段开始时会将同一分区号的数据copy到对应的reducetask中

Combainer

设置后的作用:

  • 在shffle阶段(map的后面阶段),环形缓冲区向磁盘溢写的时候会先combain一次,再溢写到磁盘
  • 在shffle阶段(map的后面阶段),所有文件归并排序为一个文件之前会先combain一次,再归并排序为一个文件
  • 注意:使用combainer需要保证结果不会被影响

OutputFormat

设置后的作用:

  • 可自定义数据最后的流出方式

3. Mapper特点

  • mapper中自己编写的逻辑代码执行之前,会运行一个setup方法,根据这个特性可以实现类似数据库中的join
  • mapper中自己编写的逻辑代码执行之后,会运行一个cleanup方法
  • 运行过程如:setup() -> map() //根据数据会多次执行 ->cleanup()
  • setup() 和 cleanup() 在一个map阶段只会运行一次

上一章:Hadoop 03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值