• 2017.5.10 MapReduce内部逻辑


    MapReduce内部逻辑

    Split:HDFS 中的数据以 Split 方式作为 MapReduce 的输入

    Block 是 HDFS 术语,Split 是 MapReduce 术语 通常1个 Split 对应1个 block,也可能对应多个block,具体是由 InputFormat 和压缩格式决定的

    默认情况下,使用的是TextInputFormat,这时1个Split对应1个block,上图4个Split对应4个Block

    Mapper解析出的数据输出到本地磁盘上

    Map阶段由一批同时运行的Map Task 组成,每个 Map Task由3个部分组成:

    InputFormat:对输入数据格式进行解析,默认为TextInputFormat,key代表每行偏移量,value代表每行数据内容。

    Mapper:输入数据处理 Partitioner:数据分组, Mapper 的输出key会经过

    Partitioner 分组选择不同的Reduce。默认Partitioner 会对 map 输出的key进行hash取模,比如有6个Reduce Task,它就是模(mod)6,如果key的hash值为0,就选择第0个 Reduce Task。这样不同的map 对相同key,它的 hash 值取模是一样的

    Reduce 阶段由一批同时运行的 Reduce Task 组成,每个 Reduce Task由4个部分组成:

    Shuffle: Reduce Task 远程拷贝每个 map 处理的结果,从每个 map 中读取一部分结果,每个 Reduce Task 拷贝哪些数据,是由 Partitioner 决定的

    Sort:读取完数据后,会按照key排序,相同的key被分到一组

    Reducer:数据处理,以WordCount为例,对相同的key计词频数 OutputFormat:数据输出格式, Reducer 的结果将按照

    OutputFormat 格式输出,默认为 TextOutputFormat ,以WordCount为例,这里的key为单词,value为词频数

    缓冲区默认为100M,由io.sort.mb属性控制

    缓冲区快要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),写磁盘,最后合并,reduce端也一样,reduce端拿到的map端数据是按key排序

    一边喊着救命,一边享受沉沦。
  • 相关阅读:
    从IL角度彻底理解回调_委托_指针
    微信个人机器人开发
    个人微信接口开发
    淘客微信接口
    python爬虫添加请求头代码实例
    用 Django 开发一个 Python Web API
    Common encryption methods and implementation in Python Python中常用的加密方法及实现
    python aes加密
    # Python语言程序设计基础
    Python语言程序设计基础——4 程序的控制结构
  • 原文地址:https://www.cnblogs.com/fast-walking/p/6837958.html
Copyright © 2020-2023  润新知