目录

  • 1 MapReduce概述
  • 2 mapreduce优点
  • 3 mapreduce缺点
  • 4 Hadoop序列化
  • 5 为什么不用Java的序列化
  • 6 InputFormat
  • 7 MapTask工作机制
  • 8 ReduceTask工作流程
  • 9 mapreduce工作流程
  • 10 MapJoin介绍
  • 11 ReduceJoin介绍

1 MapReduce概述

mapreduce是一个分布式运算程序的编程框架,是用户开发的基于Hadoop的数据分析应用的核心框架。mapreduce核心功能是将用户编写的逻辑代码和自带默认组件整合成一个完成的分布式运算程序,并发运行在Hadoop集群上。

2 mapreduce优点

易于编程:简单实现一些接口,就可以完成一个分布式程序
良好的扩展性:简单的增加机器就可以扩展计算能力
高容错性:在程序运行过程中,某个节点挂了会自动把上面的计算任务转移到另外一个节点上,不至于这个任务失败。
适合PB级以上海量数据的离线处理:可以实现上千台服务器并发工作,提供较强的数据处理能力。

3 mapreduce缺点

不擅长实时计算:不能毫秒或秒级返回结果
不擅长流式计算:输入mapreduce的数据都是静态的
不擅长DAG有向图计算:多个应用程序之间存在依赖关系,后一个程序的输入是前一个程序的输出,在这种情况下mapreduce并不是不能做,而是不擅长做。因为每个mapreduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常低下。

4 Hadoop序列化

序列化就是把内存中的对象转换成字节序列,以便于存储到磁盘和网络传输
反序列化就是将收到的字节序列,或者是磁盘持久化的数据转换成内存中的对象

5 为什么不用Java的序列化

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息,比如:各种校验信息,Header,继承体系等。不便于在网络中高校传输。所以Hadoop有自己的一套系列化机制(Writable)。
Hadoop序列化的特点:
紧凑:高效的使用存储空间
快速:读写数据的额外开销小
可扩展:随着通信协议的升级而可以升级
互操作:支持多语言的交互

6 InputFormat

inputformat代表数据输入格式,主要解决两个问题:如何将数据分割成分片,比如多少行为一个分片;以及如何读取分片中的数据,比如按行读取。
如何切片由getSplits方法完成,如何读取分片中的数据由RecordReader方法完成。

7 MapTask工作机制

①read阶段:MapTask通过用户编写的RecordReader,从输入的InputSpilt中解析出一个个k-v值
②map阶段:该阶段将解析出的k-v交给用户编写map方法处理,并产生新的k-v值
③collect阶段:在用户编写的map方法中,当数据处理完成后会调用OutputCollector.collect方法输出结果。在collect方法内部会将打上分区标签的k-v值写入到环形缓冲区中
④spill阶段:当环形缓冲区达到80%的容量后,其中的数据会溢写到磁盘上,在溢写前会进行一次快速排序,溢写完成之后会对磁盘中的数据文件进行一次归并排序,并在必要时对数据进行合并、压缩等操作

8 ReduceTask工作流程

①copy阶段:ReduceTask从各个MapTask远程拷贝属于自己分区的数据,在拷贝过程中数据大小超过一定阈值会被写到磁盘上,否则直接放在内存中
②merge阶段:在远程拷贝数据的同时,ReduceTask会启动两个线程对磁盘上的文件进行合并,以防止内存使用过多或磁盘小文件过多
③sort阶段:用户编写的reduce方法输入数据是按key进行聚集的一组数据。为了将key相同的数据聚集到一起,hadoop采用排序策略。由于各个MapTask已经对自己处理的结果进行局部排序,因此,ReduceTask只需要对所有的数据进行一次归并排序即可
④reduce阶段:reduce方法将计算结果写到HDFS上

9 mapreduce工作流程

mapreduce程序分为六个步骤:input、split、mapper、shuffle、reducer、finalRedult
split:每一个分片对应一个mapTask,计算分片大小的公式:Math.max(minSize, Math.min(maxSize, blockSize))

shuffle:
shuffle阶段表示map方法之后,reduce方法之前的数据处理过程。map方法之后,数据会首先进入分区方法,将数据打上分区标签,然后把数据发送到环形缓冲区;环形缓冲区默认大小100M,环形缓冲区达到80%时进行溢写。在溢写之前对环形缓冲区中的数据进行快速排序,排序按照key的索引进行字典顺序排序,溢写生成的文件最后会对这些文件进行一次归并排序。对溢写文件也可以进行预聚合combiner操作,最后将文件按照分区存储到磁盘中,等待reducer段拉取。
每个reducer从磁盘拉取对应分区的数据,拉取数据后先存储到内存中,当内存不足时,再存储到磁盘。拉去完所有的数据后,采用归并排序将内存和磁盘中的数据进行排序。在进入reduce方法前,对数据进行分组操作。(整个shuffle操作进行了3次排序,1次快速排序,2次归并排序)

10 MapJoin介绍

mapjoin的主要思想:小表复制到各个节点上,并加载到内存中;大表分片,与小表完成连接操作。mapjoin操作在mapTask中完成,因此无需启动ReduceTask。适合一个小表和一个大表操作

11 ReduceJoin介绍

reducejoin的主要思想:mapper端读取多个数据文件,在map方法中对不同文件中的连接字段打上标记,在reduce阶段根据标记对数据进行连接。join操作在reduceTask中完成,适合两个大表连接操作。reducejoin的shuffle的网络传输和排序效率很低,并且reduce端要对2个集合进行乘机计算,很耗费内存

【hadoop】mapreduce面试题总结相关推荐

  1. HADOOP MapReduce 处理 Spark 抽取的 Hive 数据【解决方案一】

    开端: 今天咱先说问题,经过几天测试题的练习,我们有从某题库中找到了新题型,并且成功把我们干趴下,昨天今天就干了一件事,站起来. 沙问题? java mapeduce 清洗 hive 中的数据 ,清晰 ...

  2. hadoop错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster 原创hongxiao2016 最后发布于2019-03-30 21:20:5 ...

  3. hadoop调用python算法_使用Python实现Hadoop MapReduce程序

    根据上面两篇文章,下面是我在自己的ubuntu上的运行过程.文字基本采用博文使用Python实现Hadoop MapReduce程序,  打字很浪费时间滴. 在这个实例中,我将会向大家介绍如何使用Py ...

  4. Hadoop MapReduce编程 API入门系列之最短路径(十五)

    不多说,直接上代码. ====================================== = Iteration: 1 = Input path: out/shortestpath/inpu ...

  5. Hadoop mapreduce框架简介

    传统hadoop MapReduce架构(老架构) 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 1.首先用户程序 (JobClient) 提交了一个 job,job 的信息会 ...

  6. mapreduce编程实例python-使用Python语言写Hadoop MapReduce程序

    原标题:使用Python语言写Hadoop MapReduce程序 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本教程中,我将描述如何使用Pytho ...

  7. hadoop MapReduce实例解析

    1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...

  8. 使用Python实现Hadoop MapReduce程序

    根据上面两篇文章,下面是我在自己的ubuntu上的运行过程.文字基本采用博文使用Python实现Hadoop MapReduce程序,  打字很浪费时间滴. 在这个实例中,我将会向大家介绍如何使用Py ...

  9. Hadoop MapReduce

    先看一段代码: package com.abc;import java.io.IOException; import java.util.Iterator; import java.util.Stri ...

  10. 《Hadoop MapReduce性能优化》一1.3 Hadoop MapReduce的工作原理

    本节书摘来异步社区<Hadoop MapReduce性能优化>一书中的第1章,第1.3节,作者: [法]Khaled Tannir 译者: 范欢动 责编: 杨海玲,更多章节内容可以访问云栖 ...

最新文章

  1. exchange 2010-诊断小工具简解
  2. CTF web题总结--php函数漏洞
  3. POJ1904 强联通(最大匹配可能性)
  4. [云炬创业学笔记]第二章决定成为创业者测试2
  5. 基于LZ77算法的文件压缩
  6. ASP.NET Core(十)Configuration 配置优先级详解
  7. SpringBoot - 配置文件加载位置与优先级
  8. kali 安装volatility_电子取证技术之实战Volatility工具
  9. Android 电容屏驱动
  10. eclipse里的Maven插件安装
  11. C语言之perror()与sterror()用法(十九)
  12. PMP考试重点总结二——启动过程组
  13. java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载
  14. java.lang.NoSuchMethodError: org.jaxen.dom4j.DocumentNavigator.getInstance()【可能的解决办法】
  15. 详解Unity中的生命周期函数
  16. Virtualbox虚拟Ubuntu系统扩展磁盘分区
  17. moment-timezone
  18. STL教程:C++ STL快速入门
  19. post_thumbnail_html,wordpress get_the_post_thumbnail()不显示任何内容
  20. 驻留内存 虚拟内存 共享内存

热门文章

  1. 图像特征之SURF特征匹配
  2. c语言国际编码标准统一编码,88、国际C语言混乱代码大赛-2020.03.11
  3. bigdecimal转换为long_BigDecimal与Long、int之间的相互转换
  4. 威联通nas怎么更换大硬盘_扩充存储池:威联通NAS添加硬盘的扩容设置教程
  5. Intellij Idea远程调试小记
  6. 数学建模-灰色预测模型(预测模型)
  7. python的英文单词表_随机单词生成器 - Python
  8. android String文件中修改部分字体颜色
  9. 2.开关电源中常见的控制算法
  10. Binutils 相关工具记录