• hadoop map-red的执行过程


    hadoop的 map-red就是一个并行计算平台,我们在使用这个平台的时候,要做的事情就是提交自己定制的任务(job,主要定制map类,reduce类,combine类等类),然后设置job的各种参数,比如设置mappe/reducer/combine类, 输入数据路径,输出数据路径,输出格式。然后可以根据日志或者web页面查看任务执行的情况,如果错误,通过web页面查看日志。对于map-red平台,我们可以设置各种参数,来使得我们提交的任务的执行效率得到优化,比如多少个reducer任务,分片大小等。

    map-red的执行过程,首先分片由hadoop来完成,hadoop将完成的分片交给一个mapper任务,一个mapper任务可以不只执行一个分片,mapper任务的执行过程是,从data中读入一行,然后用我们自定义的mapper函数处理,每读入一行,调用mapper函数一次。 如果有多个reducer任务,hadoop还要进行分区,默认的分区器是“key.hash(reduce任务的个数)”(注: 可以写自己的分区器),也就是在一个分区中,是具有相同的hash值的key-value, 等到reducer任务运行的时候,会从对应于自身(hash对应)的多个mapper的相应分区中通过网络取过来放在本地,然后在reducer本地进行shuffle操作,shuffle操作是对多个map的输出进行一次重排序,因为单个map的输出已经是有序的啦(map写入磁盘前在内存中执行的),shuffle操作后进行reduc操作,将结果输出到目标地。(为什么要进行排序,为了reduce的输出?)

    为了减少map和redu的之间传输的数据数量,在mapper操作完成后,在map处可以对中间数据进行一次combine处理,combine处理实质上是reduce数据的预处理在map本地的运行。combine是在map输出的中间数据写入到磁盘前运行,并且会反复运行,所以combine的另外一个意义也是使得map写入到磁盘的中间数据量更少。

    如果没有reduce任务,hadoop会将map结果直接输出到目标地,如果有reduce,map的结果就是reduce的输入,即中间数据,hadoop把这些中间数据放在本地存储(是否是采用oracle的临时表空间的思想)。

  • 相关阅读:
    运行缓慢的查询语句
    EditPlus 替换所有文件夹下的文件包含子文件夹
    PRM–pageLoaded事件
    DataSet接收XML数据并按条件搜索
    复杂数据类型使用基础
    WebService客户端调用错误处理
    仿GOOGLE个性首页可移动图层效果
    asp.net 2.0中md5密码加密
    页面上的可鼠标移动内嵌页面层,并有关闭按钮,背景不可点击
    最好的。NET反编译工具
  • 原文地址:https://www.cnblogs.com/kangls/p/3613114.html
Copyright © 2020-2023  润新知