• 3、MapReduce


    MapReduce是一种处理海量数据的并行编程模型和计算框架,用于对大数据及的并行计算。

    1、MapReduce基础

    1)MapReduce处理数据集过程,如下图:

    a)Map阶段:

    MapReduce 框架将任务的输入分割成固定大小的片段(splits),随后将每个split进一步分解成一批键值对<K1,V1>。Hadoop为每个split创建一个Map任务用于执行用户自定义的map函数,并将对应split中的<K1,V1>对作为输入,得到计算的中间结果<K2,V2>.接着将中间结果按照K2进行排序,并将key值相同的value放在一起形成<K2,list(V2)>元组。最后再根据Key值的范围将这些元组进行分组,对应不同的Reduce任务。

    b)Reduce阶段:

    Reducer把从不同Mapper接收来的数据整合在一起并进行排序,然后调用用户自定义的reduce函数,对输入的<K2,list(V2)>对进行相应处理,得到键值对<K3,V3>并输出到HDFS上。 job.setNumReduceTasks()方法设置reduce数。

    2、MapReduce的集群行为

    1)、任务调度与执行:有一个JobTracker和多个TaskTracker两类节点控制完成

    2)、本地计算:split通常应小于或等于HDFS数据块的大小,从而保证split不会跨越两台计算机存储,便于本地计算。

    3)、Shuffle过程:将Mapper的输出结果按照key值分成R份(R是设定的Reduce的个数)划分时使用哈希函数,保证某一范围内的key由某个Reduce来处理。

    4)、合并Mapper输出:在Shuffle之前闲的结果进行合并(Combine过程)即将中间结果相同key值的多组<key,value>对合并成一对。可以减少中间结果数量,从而减少数据传输过程中的网络流量。

    5)、读取中间结果:Mapper的输出结果被直接写到本地磁盘而非HDFS,

    6)、任务管道:有时R个Reduce会产生R个结果,会将这R个结果作为另一个计算任务的输入开始两一个任务

    3、Map/Reduce个数

    1)Mappers的数目直接有splits来决定

    2)Reducers的数目略小于reducer slots的总数

    a.所有的Reducers可以并行执行,减少排队时间

    b.对于未执行reducer的slots,可以在其他reducer发生故障时立即分配给新创建的reducer

    3)Reducers的个数要小于Mappers的个数

  • 相关阅读:
    多线程-死锁代码示例
    区块链技术:以太方学习文档
    svn 不能校验路径“XXX”的锁;没有匹配的可用锁令牌 故障解决方法
    Oracle ORA-27102的解决办法(out of memory)
    Linux常用命令语法+示例
    Java如何实现form表单提交的数据自动对应实体类(源码)
    Java分布式锁看这篇就够了
    quartz时间配置
    volatile 实现原理
    == 和 equals()的区别
  • 原文地址:https://www.cnblogs.com/liutoutou/p/3242728.html
Copyright © 2020-2023  润新知