《spark实战》笔记01--Spark与Hadoop联系

来源:《spark实战》讲义


  • [1.1 ] spark与hadoop联系

Spark可以使用YARN作为它的集群管理器,并且可以处理HDFS的数据。这
对于已经部署Hadoop集群的用户特别重要,毕竟不需要做任何的数据迁移
就可以使用Spark的强大处理能力。
在这里插入图片描述


  • [ 1.2] Spark与Hadoop的区别

  • 框架:
    MR:由Map和Reduce两个阶段,并通过shuffle将两个阶段连接起来的。
    Spark:是通用的DAG框架,可以将多个有依赖关系的作业转换为一个大的DAG。核心思想是将Map和Reduce两个操作进一步拆分为多个元操作,这些元操作可以灵活组合,产生新的操作,并经过一些控制程序组装后形成一个大的DAG作业。

  • 中间结果存储方式:
    MR:在DAG中,由于有多个MapReduce作业组成,每个作业都会从HDFS上读取一次数据和写一次数据(默认写三份),即使这些MapReduce作业产生的数据是中间数据 也需要写HDFS。
    Spark: 在Spark中,使用内存(内存不够使用本地磁盘) 替代了使用HDFS存储中间结果。

  • 操作模型:
    MR:Hadoop只提供了Map和Reduce两种操作
    Spark:Spark提供很多种的数据集操作类型比如Transformations 包括map, filter, flatMap,
    sample, groupByKey, reduceByKey, union, join, cogroup, mapValues,sort,partionBy等多种操作类型,还提供actions操作包括Count,collect,reduce, lookup, save等多种。

  • 编程模型
    MR:Hadoop就是唯一的Data Shuffle一种模式
    spark用户可以命名,物化,控制中间结果的存储、分区等,编程方式更灵活

  • 缓存
    MR:Hadoop无法缓存数据集
    Spark:spark的60%内存用来缓存RDD,对于缓存后的rdd进行操作,节省IO,效率高

  • 应用场景
    MR:离线大规模分析处理
    Spark:Hadoop适用的场景基本上都适合。对于迭代计算比Hadoop有更大的优势。

  • 其他
    MR:Hadoop对迭代计算效率低
    Spark:
     spark使用scala语言,更简洁高效
     spark对机器学习算法,图计算能力有很好的支持。


  • Spark处理
    假设一个用户任务需要进行下面几个操作:
    1)从HDFS读取数据; 2)filter;3)map;4)groupByKey;5)union;6)reduceByKey;7)将结果写到
    HDFS
    在这里插入图片描述
    说明几点:
    • spark是把该任务作为一个job来执行
    • 虽然逻辑上是把HDFS上的文件全部拉入内存形成一个巨大的字符串数组, Filter一遍再生成一个略小的新的字符串数组,再map一遍又生成另一个字符串数组,然后再继续下
    面的处理,实际上是逐条(构造Iterator)读取数据到内存然后filter、 map等处理,所以进行转换操作时不会占用太大内存。
    • GroupByKey、 ReduceByKey等涉及到shuffle操作,不管采用hash方式还是sort方式shuffle后结果都是需要写本地磁盘的,这点与MapReduce类似,在shuffle操作方面, Spark并没有对MapReduce有明显的优势。但是对shuffle后的结果做GroupByKey、 ReduceByKey等类似reduce操作后生成的结果放到内存,这点与MapReduce是很大的不同。

处理步骤
• 从HDFS中逐条读取记录到内存(实际上是读取一个block 64M大小的数据),
然后在内存中逐条执行filter和map操作。
• 执行groupByKey(首先需要对key shuffle,然后才能执行groupByKey操作,其中shuffle操作写本地磁盘),groupByKey生成后的结果还是存放在内存(与MapReduce不同)
• 继续在内存执行union操作
• 执行ReduceByKey(shuffle操作写本地磁盘)
• 生成的结果写HDFS


  • MR处理

    • 其中filter、 map、 union操作都是属于map阶段操作, groupByKey和reduceByKey属于reduce阶段操作。
    • 用户该任务被分割成多个job来执行。
    • 对于MapReduce而言,没有filter、 union等操作,用户只能自己写程序来实现该功能。
    在这里插入图片描述
    •如果有连续多个map操作, MapReduce经过ChainMapper优化后,与spark类似, spark没有明显的优势;
    •进行reduce系列操作时,需要先shuffle,再进行reduce操作。 spark 与MapReduce 进行shuffle后的结果都写本地盘,这点也没有明显区别
    • Reduce操作生成的结果, spark是存放在内存中的, MapReduce是写HDFS的。所以用户的操作中涉及到的reduce操作越多, Spark比MapReduce写HDFS的次数就越少, Spark的性能优势就越大。

  • 对比 Hadoop MapReduce 和 Spark 的 Shuffle 过程
    从 high-level 的角度来看,两者并没有大的差别。 都是将 mapper(Spark 里是
    ShuffleMapTask) 的输出进行 partition,
    不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一个 stage 里的
    ShuffleMapTask, 也可能是ResultTask)。 Reducer 以内存作缓冲区,边 shuffle 边
    aggregate 数据,等到数据 aggregate 好以后进行 reduce()

    从 low-level 的角度来看,两者差别不小。 Hadoop MapReduce 是 sort-based, 进入
    combine() 和 reduce() 的 records必须先 sort。 这样的好处在于 combine/reduce() 可以
    处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,
    reducer 的 shuffle 对排好序的每段数据做归并)。目前的 Spark 是 hash-based, 通常使
    用 HashMap来对 shuffle 来的数据进行 aggregate, 不会对数据进行提前排序。如果用户
    需要经过排序的数据,那么需要自己调用类似sortByKey() 的操作

    从实现角度来看,两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几
    个阶段: map(), spill, merge,shuffle, sort, reduce() 等。每个阶段各司其职,可以按照过程
    式的编程思想来逐一实现每个阶段的功能。在 Spark 中, 没有这样功能明确的阶段,只有
    不同的 stage 和一系列的 transformation(), 所以 spill, merge, aggregate 等操作需要蕴
    含在transformation()中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值