MapReduce问答题

本文详细探讨了MapReduce的相关问题,包括手写MR的流程、Hadoop序列化及其与Java序列化的区别、MR执行流程、InputFormat切片原理、Shuffle机制、CombineTextInputFormat、分区实现、排序规则等。此外,还讨论了Combiner的使用场景、OutputFormat自定义、ReduceJoin和MapJoin的实现思路及优缺点。
摘要由CSDN通过智能技术生成

MapReduce问答题

一、描述一下手写MR的大概流程和规范

写mapper类
  • 继承Hadoop提供的Mapper类
  • 重写map()方法
  • 在map()方法中写业务逻辑
  • context对象输出<k,v>
写reducer类
  • 继承Hadoop提供的Reducer类
  • 重写reduce()方法
  • 在reduce()方法中写业务逻辑
  • context对象输出<k,v>到结果文件
写driver类
  • 编写MR作业提交流程和自定以配置项目

二、如何实现Hadoop中的序列化,以及Hadoop的序列化和Java的序列化有什么区别?

实现:
  1. 在具体bean对象中实现Writable接口
  2. 写无参构造
  3. 重写序列化、反序列化方法下
区别:

​ Java的序列化比较重量级,会对类数据及类的继承结构等信息全部序列化传递

​ 而Hadoop只序列化类的数据,轻量高效

三、概述一下MR程序的执行流程

​ InputFormat读取HDFS中的数据文件,并在内部切片,每一个切片对应搞一个MT任务,MT按照文件逐行处理数据,每一行数据调用一次Mapper里我们自定义的map()方法,而map()方法里是我们自己写的处理逻辑,但主要任务还是把数据通过context对象输出到磁盘里

​ 在MT处理完数据、RT开始前,数据会走一趟shuffle

​ 数据走完shuffle之后,RT会先把MT处理完的数据拷贝一份,每一组相同key的values调用一次Reducer类里边我们自定义的reduce()方法,数据处理完之后通过OutputFormat把结果数据再写到磁盘上

四、InputFormat负责数据写的时候要进行切片,为什么切片大小默认是128M

​ 切片大小是由minSize,MaxSize,blockSize三个参数调整决定的,默认切片大小为blocksize大小=128M,而如果读数据的时候切片大小不等于块大小,在集群环境下可能会造成跨机器读数据的情况,这样会造成额外的资源消耗,拖慢整体MR程序执行效率,因此如果切片大小为块大小,一次读数据读一块就会避免上述情况。

五、描述一下切片的逻辑(从源码角度描述)

​ FileInputFormat----->getSplits()

  1. 找到数据存储的目录,把待处理的输入数据的元数据信息放入一个集合

  2. 开始遍历待处理目录下的每一个文件,默认不忽略处理子目录

  3. 切片计算规则:minSize、MaxSize和

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值