zoukankan      html  css  js  c++  java
  • [hadoop]mapreduce原理简述

    1、用于map的输入,先将输入数据切分成相等的分片,为每一个分片创建一个map worker,这里的切片大小不是随意订的,一般是与HDFS块大小一致,默认是64MB,一个节点上存储输入数据切片的最大size就是HDFS的块大小,当设置的切片size大于HDFS块大小,会引起节点之间的传输,占用带宽。

    2、map worker调用用户编写的map函数对每个分片进行处理,并且将处理结果输出到本地存储(非HDFS)

    3、对map的输出进行combiner操作,这里的的combiner主要是减少map与reduce之间的数据传输量,不是必须的步骤,可以例举一个《hadoop: the definitive guide》中的例子求最大温度的处理。

      Fir Map Output:

        (1950, 0)

        (1950, 20)

        (1950, 10)

      Sec Map Output:

        (1950, 25)

        (1950, 15)

    在不调用combiner的情况下,是将map的输出数据都将传送到reduce那里,在reduce处理时,将会将如下数据作为输入:

        (1950, [0, 20, 10, 25, 15])

    在调用combiner的情况下,现在每个map本地对输出数据进行处理(即将当前的map的最大温度求出),然后再传输给reduce,如下:

      Fir Map Combined:

        (1950, 20)

      Sec Map Combined:

        (1950, 25)

    而此时reduce将会用如下数据作为输入,从而map与reduce之间的数据传输量得到降低:

        (1950, [20, 25])

    4、将combiner处理后的数据或者map的输出数据进行shuffle处理,所谓的shuffle处理是将数据中的记录通过partition操作映射到reduce中,从而保证每个reduce处理的是相同key的记录。注意partition函数可以进行自定义,也可以使用默认的partition函数,默认的partition是利用一个hash映射操作将相同key的记录映射到相同的reduce.

    5、reduce调用用户定义的reduce函数对数据进行处理,输出存入HDFS。

  • 相关阅读:
    Oracle 12C 物理Standby 主备切换switchover
    Oracle 性能之 Enq: CF
    dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
    OGG 从Oracle备库同步数据至kafka
    WARNING: inbound connection timed out (ORA-3136)
    11G 新特性之 密码延迟认证
    org-mode 写 cnblogs 博客
    inner join, left join, right join, full outer join的区别
    Emacs 浏览网页
    服务器被攻击后当作矿机,高WIO
  • 原文地址:https://www.cnblogs.com/fantasy01/p/4311941.html
Copyright © 2011-2022 走看看