hadoop入门

hadoop入门(面试需要)

 MapReduce简介:(参考)

  1. MapReduce是一种分布式计算模型,主要应用于搜索领域,解决海量数据的计算问题。
  2. 有两个阶段map(),reduce(),实现这两个阶段即可实现分布式计算。

MapReduce执行过程:


 

MapReduce原理:

MapReduce执行步骤:

map过程

  1. 读取hdfs中的文件,逐行解析成key-value键值对,并对每个key-value键值对调用一次map函数。
    eg.<hadoop hello hadoop bigdata>====》<1,hadoop hello><2,hadoop bigdata>
  2. 覆盖上一次的map(),对执行的结果(<k,v>)继续进行处理,转换成新的<k,v>
    eg.<hadoop,1><hello,1><hadoop,1><bigdata,1>
  3. 对输出的<k,v>进行分区,默认分为一个区(partitioner)
  4. 对不同分区中的数据进行排序(按照k)、分组。分组指的是相同key的value放到一个集合中。 
    排序后:<bigdata,1> <hadoop,1> <hadoop,1> <hello,1>  分组后:<bigdata,{1}><hadoop,{1,1}><hello,{1}>
  5. 对分组后的数据进行规约(可有)
    combiner
    • 每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量。
    • combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。 如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。
    • 注意:Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。
    为什么使用Combiner?Combiner发生在Map端,对数据进行规约处理,数据量变小了,传送到reduce端的数据量变小了,传输时间变短,作业的整体时间变短。
    为什么Combiner不作为MR运行的标配,而是可选步骤呢?因为不是所有的算法都适合使用Combiner处理,例如求平均数。
    Combiner本身已经执行了reduce操作,为什么在Reducer阶段还要执行reduce操作呢?combiner操作发生在map端的,处理一个任务所接收的文件中的数据,不能跨map任务执行;只有reduce可以接收多个map任务处理的数据。

Reduce过程

  1. 多个map任务的输出,按照不同的分区,通过网络将输出复制到不同的节点上,shuffle过程

  2. 对多个map的输出进行合并,排序。覆盖Reduce函数,接收的是分组后的数组,实现自己的业务逻辑。
    <bigdata,1><hadoop,2><hello,1>
  3. 将Reduce产生的结果输出到hdfs中。
原文地址:https://www.cnblogs.com/Try-kevin/p/7887166.html