MapReduce和Spark

  • MapReduce
    • 简介
    • 原理示例
      • 基本概念
      • 作业运行模式
  • Spark
    • 简介
    • 概念
    • 编程模型
      • RDD
        • RDD操作(Operator)
        • RDD依赖(Dependency)
    • 作业运行模式
  • 课后温习
  • 参考

MapReduce

简介

MapReduce是一个面向离线批处理的分布式计算框架。
离线:对时间不敏感,慢慢算
批处理:数据攒一批,处理一批(相对于流处理)
分布式编程模型:MapReduce程序被分为Map(映射)阶段和Reduce(化简)阶段
特点

  • 计算跟着数据走
  • 良好的扩展性:计算能力随着节点数增加,近似线性增长
  • 高容错
  • 状态监控
  • 适合海量数据的离线批处理
  • 降低了分布式编程的门槛

使用场景:对时间不敏感,非流式数据(不适用OLAP、流计算、DAG计算)

原理示例

WordCount示例

实际上shuffle是虚拟的,一边做一半。

基本概念

作业Job与任务Task
作业是客户端请求执行的一个工作单元(包括输入数据、MapReduce程序、配置信息);任务是将作业分解后得到的细分工作单元(分为Map任务和Reduce任务)
Split(切片)
输入数据被划分成等长的小数据块,称为输入切片(Input Split),简称切片。spilt是一个逻辑概念,仅包含元数据信息,如数据的起始位置、长度、所在节点等。有多少个切片就会有几个任务启动,切片大小默认等于HDFS的block大小(因为MapReduce取数最大的情况下是从block里面取),它的划分方式由程序设定,与Block无严格对应关系(切片是个逻辑概念)。
Split越小,Map任务越多,并发度越高,但开销也越大;Split越大,任务越少,并发度降低。
Map阶段(映射)
由若干Map任务组成,任务数量由Split数量决定。
输入:Split切片(key-value)
输出:中间计算结果(key-value)
Reduce阶段(化简
由若干Reduce任务组成,任务数量由程序指定
输入:Map阶段输出的中间结果(key-value)
输出:最终结果(key-value)
Shuffle阶段(混洗)
Shuffle是Map和Reduce之间的强依赖关系(Shuffle依赖)导致的,即每个Reduce的输入依赖于所有Map的输出
Map和Reduce阶段的中间环节(虚拟阶段),分为Map端Shuffle和Reduce端Shuffle。
包括Partition(分区)、Sort(排序)、Spill(溢写)、Merge(合并)和Fetch(抓取)等工作。

如上图,Reduce任务数量决定了Partition数量,Partition编号 = Reduce任务编号。
分区Partition
利用“哈希取模”对Map输出数据分区,即Partition编号 = key hashcode % reduce task num(%为取模)。

由于Shuffle阶段很耗资源,避免和减少Shuffle是MapReduce程序调优的关键。

作业运行模式

在MapReduce2.x中的YARN模式下,运行模式如下:

Spark

简介

Spark解决了MapReduce的局限性,它的出现改变了大数据的生态。
MapReduce缺陷在于:语义较少(仅支持Map、Reduce两种语义操作),模型较为粗糙(划分为两个阶段);无法避免Shuffle所以效率较低;不适合迭代计算、在线分析、实时流处理等场景。另外,计算框架多、选型难导致学习成本很高。

概念

高性能的分布式通用计算引擎,包括:

  • Spark Core:核心计算框架
  • Spark SQL:结构化数据查询
  • Spark Streaming:实时流处理
  • Spark MLib:机器学习
  • Spark GraphX:图计算

Spark具有有高吞吐、低延时、通用易扩展、高容错等特点,采用Scala语言开发,提供多种运行模式(可本地可单机可集群)。
特点

  1. 计算高效:语义操作多样,模型设计精细;利用RDD内存计算和Cache缓存机制,支持迭代计算和数据共享,减少数据读取的IO开销;利用DAG引擎,减少中间计算结果写入HDFS的开销;利用多线程池模型,减少任务启动开销。
  2. 通用易用:适用于批处理、流处理、在线分析、机器学习等场景;提供了丰富的开发API,支持Scala、Java、Python、R等。
  3. 运行模式多样:Local模式、Standalone模式、YARN/Mesos模式。

相比MapReduce效率提升在一个数量级以上。

编程模型

RDD

数据模型:弹性分布式数据集(Resilient Distributed Datesets,RDD)。Spark就是通过基于RDD进行计算。
RDD相当于一张表,由分布在集群中的多个Partition组成。
Partition分布在集群的不同节点中,主要在内存中,只读。如果数据出现错误或问题了会自动重构(体现了弹性)。
和MapReduce的split相比,区别主要在弹性分布和驻留内存。

RDD操作(Operator)

  1. Transformation(转换)

    将Scala集合或Hadoop输入数据构造成一个新RDD(从无到有);通过已有的RDD产生新RDD(从有到新)。
    Transformation特点是惰性执行,只记录转换关系,不触发计算。例如:map、filter、flatmap、union、distinct、sortbykey都是Transformation操作。
  2. Action操作
    通过RDD计算得到结果或者落盘;真正触发计算,例如:first、count、collect、foreach、saveAsTextFile都是Action操作。

RDD依赖(Dependency)

分为窄依赖和宽依赖。
窄依赖(Narrow Dependency)

每个父RDD分区只能为一个子RDD分区供数,子分区所依赖的父分区集合之间没有交集;子RDD分区数据丢失或损坏,从其依赖的父RDD分区重新计算即可,无需Shuffle。例如:map、filter、union都是窄依赖的关系。
宽依赖(Wide/Shuffle Dependency)

每个父RDD分区为所有子RDD分区供数;子RDD区数据丢失或损坏,从所有父RDD分区重新计算,必须Shuffle;相对于窄依赖,宽依赖付出的代价要高很多,尽量避免使用(资源消耗太高)。例如:groupByKey、reduceByKey、sortByKey都是宽依赖。

作业运行模式

抽象模式

Master-Slave架构。把Driver注册到ApplicationMaster中(大数据各种框架是热插拔),告诉YARN是什么。

Driver:

  • 每个Spark作业启动一个Driver(作业管家),每个Driver创建一个SparkContext(负责加载配置信息,初始化运行环境,创建DAGScheduler和TaskScheduler)
    DAGScheduler:根据任务的依赖关系建立DAG(Directed Acyclic Graph, 有向无环图),根据依赖关系是否为宽依赖,即是否存在Shuffle,将DAG划分为不同的阶段(Stage),最终将各阶段Task组成的TaskSet提交给TaskScheduler。
    TaskScheduler:负责任务调度;重新提交失败的Task;为执行速度慢的Task启动备用Task。其中的Executor负责执行Driver分发的任务,一个节点可以启动多个Executor,每个Executor通过多线程运行多个任务(真正在后台跑的是Executor)。Task是Spark运行的基本单位,负责处理若干RDD分区的计算逻辑,在DAG阶段划分为窄依赖的可以一起执行。
  • 负责Spark作业解析(生成逻辑和物理计划,以及DAG)、任务调度

作业运行模式主要分为三种:

  • Local模式
    单机运行,通常用于测试
  • Standalone模式

    Spark集群可以独立运行,不依赖于第三方资源管理系统,如YARN、Mesos。采用Master/Slave架构:Master统一管理集群资源,Worker负责本地计算,Driver一对一管理作业;ZooKeeper负责Master HA,避免单点故障。
    适用于集群规模和数据量都不大的情况。
  • YARN模式
    YARN-Client模式:适用于交互和调试;YARN-Cluster模式:适用于生产环境。

课后温习

简述MR Split与HDFS Block的关系。
为什么MapReduce要求输入输出必须是key-value键值对?
简述Shuffle的工作原理。
从编程模型的视角,MapReduce有哪些优缺点?
简述“哈希取模”在MapReduce中的作用。

参考

课程内容来自:南京大学+星环科技课程,大数据大数据理论与实践课程

大数据理论与实践5 分布式计算框架MapReduce和Spark相关推荐

  1. 大数据理论与实践6 分布式ETL工具Sqoop

    ETL是指数据收集层,指的是数据抽取(Extract).转换(Transform).加载(Load),在真正的大数据工作中,很大的工作量都在做这一块的内容. Sqoop简介 只要用于在Hadoop和关 ...

  2. spark大数据计算引擎原理深剖(优缺点)-spark简介

    用spark,你仅仅只是调用spark的API肯定是很low的. 今天来讲讲spark的原理,并且会针对部分源码进行讲解,如有不同意见请联系本人交流探讨. 目前大数据生态主要部分是Hadoop软件框架 ...

  3. 【大数据入门笔记系列】第六节 分布式计算框架MapReduce的工作流程

    [大数据入门笔记系列]第六节 分布式计算框架MapReduce的工作流程 前言 MapReduce分布式运算 MapReduceApplication MapTask ReduceTask split ...

  4. 第十一章·大数据技术与实践

    11.1大数据概述 11.1.1大数据产生的背景 家阿尔文,托夫勒便在<第三次浪潮>一书中, 将大数据比作 第三次浪潮的华彩乐章". 在传统数据处理过程中,单个计算机的性能往往很 ...

  5. 现场直击大数据行业应用实践

    2015年4月16-18日,由国内领先的IT专业网站IT168联合旗下ITPUB.ChinaUnix两大技术社区,举办的第六届中国数据库技术大会(DTCC2015)在北京新云南皇冠假日酒店开幕.DTC ...

  6. 【TOP100】100个中国大数据应用最佳实践案例—为您打开万亿元大数据产业的财富之门

    热门下载(点击标题即可阅读) ☞[下载]2015中国数据分析师行业峰会精彩PPT下载(共计21个文件) 2017年3月28日至29日,由工业和信息化部指导.中国信息通信研究院和数据中心联盟主办的&qu ...

  7. 科大讯飞交通超脑荣获 2019 年大数据应用最佳实践案例 TOP10

    12月5日,由中国计算机学会主办,CCF 大数据专家委员会承办的中国大数据技术大会(BDTC 2019)在北京长城饭店隆重举行.会上揭晓了由CCF大数据专家委员会组织评选的大数据应用最佳实践案例TOP ...

  8. 基于云原生的大数据产品前端实践 | 第七期图文直播文字回放

     点击"蓝字"关注我们 2月5日晚,智领云第七次社群图文技术直播如约而至.本次直播由智领云Web开发经理陈磊为大家分享了<基于云原生的大数据产品前端实践>主题内容,其中 ...

  9. 第11章 大数据技术与实践

    第11章 大数据技术与实践 11.1 大数据概述 大数据一词由英文" big data"翻译而来,是最近几年兴起的概念,目前还没有一个统的定义.相比于过去的"信息爆炸&q ...

最新文章

  1. 2020 8月 每日花语
  2. 关于background-*的一些属性
  3. 8位可控加减法电路设计_100以内数的认知也加减法详解
  4. 机器学习均方误差_机器学习:均方误差和回归线简介
  5. HTML 5 aside 标签
  6. linux内核调度算法(2)--CPU时间片如何分配
  7. mp3/rmvb转换
  8. Head First 深入浅出系列 电子书
  9. 网络安全等级测评师培训(初级)----2021.6.6
  10. poj 1284 Primitive Roots 求素数元根数
  11. 盘点2017企业服务领域最受关注的100家厂商(BPM平台篇)
  12. 利用Java反射机制降低代码圈复杂度
  13. 「万字总结」熬夜总结50个JS的高级知识点,全都会你就是神
  14. 记录一下js获取上周、下周日期
  15. wordpress(DUX主题)怎么给文章添加历史上的今天
  16. 机器学习-线性回归 原理详解
  17. OSGi模块化的守护神,阿里P8都服了
  18. 基于poi包的流式文件和版式文件操作工具
  19. 电脑桌面图标白色方块异常
  20. 房屋销售/楼盘管理信息系统(c课设/大作业)

热门文章

  1. 38、Neural 3D Reconstruction in the Wild
  2. 9.5 政务办公领域的RPA实战案例分析
  3. Type-C转3.5mm音频转接器的由来
  4. vue中安装recorderx v-emoji-picker vue-context-menu vue-dragging失败的解决方法
  5. 在面试一个游戏编程职位前,你需要知道的东西
  6. 前端 table 数据纵向展示
  7. 万兆网和千兆网ubuntu环境下的配置
  8. java/php/net/python无人售货机管理系统设计
  9. 我的初梦《梦幻重游》开发记录一
  10. 左程云 算法与数据结构基础班