[第七章]MapReduce

概述

如果运算需要用到前轮的运算结果,有相关性。则不适用MapReduce

分布式并行编程

并行编程框架
  • 传统框架MPL、OpenCL、CUDA
  • MapReduce
    • 优点

模型简介

计算过程抽象成Map和Reduce函数
  • 主要思想
    • 分而治之
    • 计算向数据靠拢
  • 采用mater/,一个mater多个

Map和Reduce函数

Map

  • 输入:键值对
  • 输出:一堆小键值对

Reduce

  • 输入:一个键和对应的多个值的列表
  • 输出:键值对

体系结构

Client/JobTracker/TaskTracker/Task
    • JobTracker(核心)
      • 监控、作业调度
      • 失败会造成单点故障
      • Zookper可
    • TaskTracker
      • “心跳”传送资源使用情况和任务运行进度给JobTracker
    • Task
      • 分为Map Task和ReduceTask

    工作流程

    概述

    分片、执行Map任务,Shuffle,Reduce任务、输出
    • Map之间没有通信,Reduce之间也是

    各个阶段的执行

    流程

    InputFomat→split→RR→Map→Shuffle→Reduce→OutFomat

    Split

    • 块是物理单位
    • Split是逻辑概念划分方法完全由用户决定
    • Map数量取决于Split
    • Reduce数量取决于Reduce任务槽(slot)(比它稍小)

    Shuffle

    简介

    分为多个分区,并排序、合并,每满一次磁盘文件归并,数据被Reduce取走前再归并

    Map端

    • 每个Map分配一个缓存
    • 分区默认哈希函数
    • 溢写比0.8
    • 排序
    • 可以合并,不能改变结果
    • Map任务结束前归并,如果归并后溢写值过大,可以再次启用合并
    • 合并:<a,1><a,1>→<a,2>
    • 归并:<a,1><a,1>→<a,<1,1>>
    • Map
      • n句Map输出n个缓存,每个缓存中放每句的每个单词
      • Map不排序
    • Suffle
      • 排序
      • 不使用Combiner函数,同一个缓存中归并
      • 使用,合并
    • reduce
      • 排序
      • 输出结果
    别忘了排序!
    别忘了排序!
    notion image

    Reduce端

    若所有Map端完成,执行Reduce
    • 放入缓存→归并→合并→写入磁盘(数据量少不用)
    • 多个溢写文件合并成一个或多个文件,键值对会排序

    实例分析:WordCount

    词频统计并按字母顺序排序
    核心代码需要记住
    WordCount:

    具体应用

    • 计算问题
      • 关系代数
      • 分组与聚合
      • 矩阵向量
      • 矩阵乘法

    编程应用

    WordCount

    编写Map

    java和MapReduce数据类型不同

    编写Reduce

    main

    执行方式

    java
    python
    pig
    shell
    hive
    hadoop jar
    Prev
    [第六章]云数据库
    Next
    [第八章]Hadoop再探讨
    Loading...
    Article List
    一个NotionNext搭建的博客
    数据库系统概论
    大数据原理与应用
    javaWeb应用开发基础教程
    python
    毕业设计
    大数据技术综合应用
    实训-航空数据系统
    java面向对象程序设计
    数据结构
    算法分析与设计
    SPARK
    Python爬虫大数据采集与挖掘
    云计算
    概率论与数理统计
    数字逻辑
    计算机网络
    计算机组成原理
    linux
    操作系统
    人工智能导论
    数据仓库与数据挖掘
    数据可视化
    大数据安全与隐私保护
    c语言
    C++