Hadoop之MapReduce面试知识复习


目录

  1. 谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化?
  2. FileInputFormat切片机制
  3. 在一个运行的Hadoop 任务中,什么是InputSplit?
  4. 自定义InputFormat流程
  5. Maptask的个数由什么决定?
  6. MapTask工作机制
  7. ReduceTask工作机制
  8. 请描述mapReduce有几种排序及排序发生的阶段
  9. 请描述mapReduce中combiner的作用是什么,一般使用情景,哪些情况不需要,及和reduce的区别?
  10. Mapreduce的工作原理,请举例子说明mapreduce是怎么运行的?
  11. 如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?
  12. MapReduce 怎么实现 TopN?
  13. 如何使用mapReduce实现两个表的join?
  14. 有可能使 Hadoop 任务输出到多个目录中么?如果可以,怎么做?
  15. 什么样的计算不能用mr来提速,举5个例子

1. 谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化?

已详细总结过,请参考:Hadoop之Hadoop序列化


2. FileInputFormat切片机制

已详细总结过,请参考:Hadoop之InputFormat数据输入详解


3. 在一个运行的Hadoop 任务中,什么是InputSplit?

已详细总结过,可以参考:Hadoop之InputFormat数据输入详解

  1. 找到你数据存储的目录。

  2. 开始遍历处理(规划切片)目录下的每一个文件

  3. 遍历第一个文件ss.txt

    1. 获取文件大小fs.sizeOf(ss.txt)

    2. 计算切片大小 computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M

    3. 默认情况下,切片大小=blocksize

    4. 开始切,形成第1个切片:ss.txt—0:128M 第2个切片ss.txt—128:256M 第3个切片ss.txt—256M:300M(每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片)

    5. 将切片信息写到一个切片规划文件中

    6. 整个切片的核心过程在getSplit()方法中完成

    7. 数据切片只是在逻辑上对输入数据进行分片,并不会在磁盘上将其切分成分片进行存储。InputSplit只记录了分片的元数据信息,比如起始位置、长度以及所在的节点列表等

    8. 注意:block是HDFS物理上存储的数据,切片是对数据逻辑上的划分

  4. 提交切片规划文件到yarn上,yarn上的MrAppMaster就可以根据切片规划文件计算开启maptask个数。


4. 自定义InputFormat流程

  1. 自定义一个类继承FileInputFormat
  2. 改写RecordReader,实现一次读取一个完整文件封装为KV

5. Maptask的个数由什么决定?

  1. 一个job的map阶段MapTask并行度(个数),由客户端提交job时的切片个数决定。

6. MapTask工作机制

已详细总结过,可以参考:Hadoop之MapTask工作机制


7. ReduceTask工作机制

已详细总结过,可以参考:ReduceTask工作机制


8. 请描述mapReduce有几种排序及排序发生的阶段

排序的分类:

  1. 部分排序:
    MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部排序。

  2. 全排序:
    如何用Hadoop产生一个全局排序的文件?最简单的方法是使用一个分区。但该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构。
    替代方案:首先创建一系列排好序的文件;其次,串联这些文件;最后,生成一个全局排序的文件。主要思路是使用一个分区来描述输出的全局排序。例如:可以为待分析文件创建3个分区,在第一分区中,记录的单词首字母a-g,第二分区记录单词首字母h-n, 第三分区记录单词首字母o-z。

  3. 辅助排序:(GroupingComparator分组)
    Mapreduce框架在记录到达reducer之前按键对记录排序,但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。

  4. 二次排序:
    在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。

  5. 自定义排序WritableComparable
    bean对象实现WritableComparable接口重写compareTo方法,就可以实现排序

    @Overridepublic int compareTo(FlowBean o) {// 倒序排列,从大到小return this.sumFlow > o.getSumFlow() ? -1 : 1;}

排序发生的阶段:

  1. 一个是在map side发生在spill后partition前。
  2. 一个是在reduce side发生在copy后 reduce前。

9. 请描述mapReduce中combiner的作用是什么,一般使用情景,哪些情况不需要,及和reduce的区别?

  1. Combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量。
  2. Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟reducer的输入kv类型要对应起来。
  3. Combiner和reducer的区别在于运行的位置。
    1. Combiner是在每一个maptask所在的节点运行;
    2. Reducer是接收全局所有Mapper的输出结果。

10. Mapreduce的工作原理,请举例子说明mapreduce是怎么运行的?

已详细总结过,可以参考:Hadoop之MapReduce工作流程


11. 如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?

如果没有自定义的 partitioning,则默认的 partition 算法,即根据每一条数据的 key的 hashcode 值模运算(%)reduce 的数量,得到的数字就是"分区号"。


12. MapReduce 怎么实现 TopN?

可以自定义groupingcomparator,对结果进行最大值排序,然后再reduce输出时,控制只输出前n个数。就达到了topn输出的目的。


13. 如何使用mapReduce实现两个表的join?

  1. reduce side join : 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:tag=0 表示来自文件File1,tag=2 表示来自文件File2。
  2. map side join : Map side join 是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task 内存中存在一份(比如存放到hash table 中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table 中查找是否有相同的key 的记录,如果有,则连接后输出即可。

14. 有可能使 Hadoop 任务输出到多个目录中么?如果可以,怎么做?

可以通过自定义outputformat来实现。

  1. 自定义OutputFormat步骤

    1. 自定义一个类继承FileOutputFormat。
    2. 改写recordwriter,具体改写输出数据的方法write()。

15. 什么样的计算不能用mr来提速,举5个例子

  1. 数据量很小。
  2. 繁杂的小文件。
  3. 索引是更好的存取机制的时候。
  4. 事务处理。
  5. 只有一台机器的时候。

Hadoop之MapReduce面试知识复习相关推荐

  1. Hadoop之Yarn面试知识复习

    Hadoop之Yarn面试知识复习 目录 简述hadoop1与hadoop2 的架构异同 为什么会产生 yarn,它解决了什么问题,有什么优势? Hadoop之Yarn工作机制详解 HDFS的数据压缩 ...

  2. Hadoop之HDFS面试知识复习

    Hadoop之HDFS面试知识复习 目录 HDFS的存储机制 secondary namenode工作机制 NameNode与SecondaryNameNode 的区别与联系? hdfs整体架构介绍 ...

  3. mapreduce面试问题_MapReduce问题与解答第1部分

    mapreduce面试问题 围绕NoSQL的所有炒作和嗡嗡声,我决定看看它. 我很快发现没有一个我可以学习的NoSQL. 相反,有各种不同的解决方案具有不同的目的和权衡. 这些不同的解决方案往往有一个 ...

  4. 大数据开发面试知识点复习3

    文章目录 大数据开发复习课程 10.scala 10.1.scala介绍 10.2.scala解释器 10.3.scala的基本语法 10.3.1.声明变量 10.3.2.字符串 10.3.3.数据类 ...

  5. 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  6. Hadoop/Spark相关面试问题总结

    Hadoop/Spark相关面试问题总结 面试回来之后把当中比較重要的问题记了下来写了个总结: (答案在后面) 1.简答说一下hadoop的map-reduce编程模型 2.hadoop的TextIn ...

  7. 学习hadoop需要具备基础知识

    学习hadoop需要具备基础知识 首先整体上了解Hadoop,包括hadoop是什么,能够做什么,使用场景等,不需要考虑细节问题.在有了整体上的了解后,就开始准备系统地学习hadoop.建议:勿一味学 ...

  8. Java String知识复习及补充和包装类

    Java String知识复习及补充和包装类 1. String类 1.1 String API复习 1.2 正则表达式 1.3 StringBuffer 和 StringBuilder 1.4 St ...

  9. 大数据技术之Hadoop(MapReduce)

    大数据技术之Hadoop(MapReduce) (作者:大数据研发部) 版本:V1.4 第1章MapReduce入门 map 计算 reduce 规约 1.1 MapReduce定义 Mapreduc ...

最新文章

  1. magento模板区块--首页content区块
  2. 脑电传感器并不复杂,那精度呢?
  3. jquery.validate不用submit而用js提交的例子
  4. Java 基础之 static 静态
  5. [原创]java WEB学习笔记02:javaWeb开发的目录结构
  6. IT十八掌作业_java基础第十一天_集合
  7. 【PC工具】200324更新百度网盘下载工具——最新百度网盘下载工具使用方法及注意事项...
  8. C#去除字符串的最后一个字符
  9. Infor与Marketo®合作,帮助全球企业实现客户体验变革
  10. MySQL group_concat函数使用详解
  11. Springboot的static和templates区别
  12. Java常见加密方式
  13. python实现栅栏密码加解密
  14. 基于STM32的NRF24L01模块一对一的问题记录
  15. 移动计算的未来:是什么在推动变革? | 幂集创新
  16. 3d建模公司可视化建模数字孪生应用
  17. 【基础理论】Jenkins CI/DI持续集成部署
  18. 通过ajax单独上传图片
  19. 网站不收录怎么解决问题?三个SEO技巧秒收实例
  20. 原始分布式架构服务探索的得与失

热门文章

  1. Oracle Online Redefinition在线重定义(下)
  2. XMNetworking 网络库的设计与使用
  3. mongodb - 查看正在执行的操作
  4. 修改lastpass主密码后需重启firefox才能加载已保存的站点密码或用导入工具
  5. 天下会 - 搜索实战系列之视频
  6. NSIS打包软件(一)
  7. 中石油训练赛 - 01 Matrix(构造)
  8. qduoj - 今晚一起打CF吧——Codeforces,十三亿人的ACM梦。(排序背包)
  9. npoi 删除多行 操作excel_NPOI操作excel 2007/2010版本
  10. exe软件ui嵌套软件_UI设计行业中的PS软件起什么用途