【大数据技术原理】MapReduce详解

本文主要针对MapReduce1.0相关概念进行介绍,主要参考厦大林子雨教授的mooc,结合自己理解总结成文。

文章目录

  • 简介
    • 背景
    • 比较
  • 模型
    • 模型策略
    • 模型理念
    • 模型架构
    • Map和Reduce函数
  • 体系结构
  • 工作流程
    • 过程拆解
      • 概览
      • shuffle
    • 注意点
  • 应用程序执行流程
  • 实例:wordCount


简介

MapReduce是一种分布式并行编程框架,支持横向扩展的数据处理能力。

Hadoop MapReduce是分布式应用程序Hadoop的核心数据处理组件,是google提出的MapReduce的开源实现。

背景

数据处理能力的增长方式有二:

  1. 纵向扩展,即提高内存、性能,单核->双核->多核;
  2. 横向扩展,使用分布式并行编程,借助一个集群通过多台机器同时并行处理大规模数据。

运算能力方面,由于制作工艺受限,单位面积上的晶体管数量具有上限,过度集成会导致热效应、磁场效应影响增大,所以CPU性能增长摩尔定律从05年开始逐渐失效。

但是在数据方面,数据量却依然保持着每两年翻一番的速度高速增长。

这种数据量和处理能力的不均衡发展使得运算的纵向扩展(提高内存、性能)受到限制,横向扩展的方法变得重要起来。

比较

MapReduce出现之前,就已经有了很多经典的并行编程框架,如MPI(消息传递接口)、OpenCL(为异构平台编写程序的框架)、CUDA(Compute Unified Device Architecture,统一计算架构)。

传统并行编程框架与MapReduce区别:

  • 集群架构
    • 前者采用性能计算模型HPC,共享式架构(内存、存储),底层采用统一的存储区域网络SAN
    • 后者采用典型的非共享式架构
  • 容错性
    • 前者任何硬件故障都容易导致集群不可工作
    • 后者分布式任何节点出问题都不会影响其他节点正常运行,且有冗余和容错机制
  • 硬件
    • 前者:昂贵,刀片服务器+高速网络+存储区域网络SAN
    • 后者:廉价PC机做计存节点
  • 扩展性
    • 前者共享式集群架构,扩展性差
    • 后者整个集群可以任意增减相关计算节点,扩展性好
  • 编程学习难度
    • 前者难度高,和多线程编程逻辑累死,需借助互斥量信号锁等机制,要实现不同任务间同步
    • 后者难度低,自动分布式部署,核心是编程设计Map和Reduce函数
  • 实用场景
    • 前者:计算密集型应用,实时细粒度计算
    • 后者:数据密集型应用,非实时批处理

模型

模型策略

MapReduce采用分而治之的方法,将庞大的数据集切分成非常多独立的小分片,分别启动map任务,在多个机器上处理

模型理念

计算向数据靠拢,而不是数据向计算靠拢

模型架构

Master/slave架构

  • 一个master架构
    • 作业跟踪器JobTracker:负责作业调度和处理、失败和恢复
  • 若干个slave服务器
    • 具体任务执行组件TaskTracker:负责接收JobTracker的作业处理指令,完成任务处理

Map和Reduce函数

  • Map函数
    • 输入,输出List(),其中是计算中间结果
    • 例:<行号,‘a b c’> <‘a’,1><‘b’,1><‘b’,1>
  • Reduce函数
    • 输入,输出,其中List(v2)是同一批属于同个k2的值列表
    • 例:<‘a’,(1,1,1)> <‘a’,3>
      【大数据技术原理】MapReduce详解_第1张图片

体系结构

组件介绍:

  • Client
    • 提交用户应用程序,交到JobTracker
    • 查看提交作业运行状态
  • 作业跟踪器JobTracker
    • 资源监控&作业调度
    • 监控TaskTracker和Job的健康状况
    • 探测到失败任务转移
  • 任务调度器TaskTracker
    • 执行JobTracker传过来的任务运行指令
    • 资源使用情况&任务运行进度通过HeartBeat传给JobTracker
  • 资源单位slot
    • map slot & reduce slot

工作流程

过程拆解

概览

【大数据技术原理】MapReduce详解_第2张图片

  1. Map任务从HDFS读取数据进行分片处理
  2. 将分片的内容通过map函数解析成kv对缓存在内存中
  3. 缓存满后会发生溢写,通过分区、排序、可能有的合并操作,将结果归并写入磁盘
  4. Shuffle:Reduce任务将属于自己处理对象的分区文件内容取走
  5. Reduce任务先将来自同一分区逻辑多个磁盘文件进行归并
  6. 通过reduce函数将kv对列表进行处理,输出写入HDFS

注:文件合并是可能会有的combine函数,用于减少map端文件大小,例如计数会将合并成

shuffle

shuffle的目的是按照partition、key对中间结果进行排序合并,输出给reduce线程
目标:

  • 完整地从map task端拉取数据到Reduce端
  • 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗
  • 减少磁盘IO对task执行的影响

Map shuffle:
【大数据技术原理】MapReduce详解_第3张图片
Reduce端Shuffle:
【大数据技术原理】MapReduce详解_第4张图片

注意点

  1. 一般分片大小一般等于block大小,来最大化性能
    【大数据技术原理】MapReduce详解_第5张图片
  2. 最优Reduce任务数量取决于集群可用reduce slot数量,但通常设置小一些以防错误

应用程序执行流程

【大数据技术原理】MapReduce详解_第6张图片

实例:wordCount

【大数据技术原理】MapReduce详解_第7张图片
【大数据技术原理】MapReduce详解_第8张图片

你可能感兴趣的:(数据,mapreduce,big,data,hadoop)