zoukankan      html  css  js  c++  java
  • 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中。
  • 相关阅读:
    勤娇猛伤湃负纶孪跋贡那睦
    C#
    日记造词——有世无解
    chrome主页被hao123篡改,怎么改回来?
    不知还有人遇到这个问题没有:数据库 'xxx' 的版本为 706,无法打开。此服务器支持 661 版及更低版本。不支持降级路径。
    JQuery插件(三)分页插件-JqPaginator
    Jquery插件(二) filterMore仿京东筛选插件
    Jquery插件(一) webupload上传插件
    hadoop安装配置
    亚马逊aws ubuntu设置root 密码方式登录方法
  • 原文地址:https://www.cnblogs.com/Try-kevin/p/7887166.html
Copyright © 2011-2022 走看看