当前位置:   article > 正文

【面试】进阶篇(一)Spark基础知识:产生背景 & 基本操作_为什么产生spark

为什么产生spark

一、Spark产生背景

在学一个新技术之前,你有必要先了解这门技术出现的意义。这样,你才能更好地理解:它是应用到什么场景的?
与同类工具相比,它的优缺点是什么?什么时候用它比其它工具好(或差)?
……至少理解了这些,你才好说自己是真正掌握了这个工具,否则只能说是浅尝辄止,半生不熟。
  • 1
  • 2
  • 3

1、MapReduce 的缺陷

MapReduce 被淘汰两大主要原因:高昂的维护成本、时间性能“达不到”用户的期待。

除此之外,还存在诸多局限。
1、MapReduce 模型的抽象层次低,大量的底层逻辑都需要开发者手工完成。

打个比方,写 MapReduce 的应用就好比用汇编语言去编写一个复杂的游戏。如果你是开发者,你会习惯用汇编语言,还是使用各种高级语言如 JavaC++ 的现有框架呢?
  • 1

2、只提供 Map 和 Reduce 两个操作。

很多现实的数据处理场景并不适合用这个模型来描述。实现复杂的操作很有技巧性,也会让整个工程变得庞大以及难以维护。举个例子,两个数据集的 Join 是很基本而且常用的功能,但是在 MapReduce 的世界中,需要对这两个数据集做一次 MapReduce 才能得到结果。这样框架对于开发者非常不友好。正如第一讲中提到的,维护一个多任务协调的状态机成本很高,而且可扩展性非常差。
  • 1

3、在 Hadoop 中,每一个 Job 的计算结果都会存储在 HDFS 文件存储系统中,所以每一步计算都要进行硬盘的读取和写入,大大增加了系统的延迟。

由于这一原因,MapReduce 对于迭代算法的处理性能很差,而且很耗资源。因为迭代的每一步都要对 HDFS 进行读写,所以每一步都需要差不多的等待时间。
  • 1

4、只支持批数据处理,欠缺对流数据处理的支持。

2、为什么需要 Spark 呢?

  • 类似提问:Spark与Hadoop的区别是什么?

Spark 提供了RDD的数据抽象,定义的 RDD操作可以像函数式编程中操作内存中的集合一样直观、简便,使得实现数据处理的代码非常简短高效。同时极大地提升了对各种复杂场景的支持,开发者既不用再绞尽脑汁挖掘 MapReduce 模型的潜力,也不用维护复杂的 MapReduce 状态机。

相对于 Hadoop 的 MapReduce 会将中间数据存放到硬盘中,Spark 会把中间数据缓存在内存中,从而减少了很多由于硬盘读写而导致的延迟,大大加快了处理速度。由于 Spark 可以把迭代过程中每一步的计算结果都缓存在内存中,所以非常适用于各类迭代算法。Spark 第一次启动时需要把数据载入到内存,之后的迭代可以直接在内存里利用中间结果做不落地的运算。所以,后期的迭代速度快到可以忽略不计。在当今机器学习和人工智能大热的环境下,Spark 无疑是更好的数据处理引擎。

在任务(task)级别上,Spark 的并行机制是多线程模型,而 MapReduce 是多进程模型。多进程模型便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间。而 Spark 同一节点上的任务以多线程的方式运行在一个 JVM 进程中,可以带来更快的启动速度、更高的 CPU 利用率,以及更好的内存共享。

从本质上看,Spark 可以算作是一种 MapReduce 计算模型的不同实现。Hadoop MapReduce 简单粗暴地根据 shuffle 将大数据计算分成 MapReduce 两个阶段,然后就算完事了。而 Spark 更细腻一点,将前一个的 Reduce 和后一个的 Map 连接起来,当作一个阶段持续计算,形成一个更加优雅、高效的计算模型,虽然其本质依然是 MapReduce。但是这种多个计算阶段依赖执行的方案可以有效减少对 HDFS 的访问,减少作业的调度执行次数,因此执行速度也更快。

Spark 有三个主要特性:**RDD 的编程模型更简单,DAG 切分的多阶段计算过程更快速,使用内存存储中间计算结果更高效**。这三个特性使得 Spark 相对 Hadoop MapReduce 可以有更快的执行速度,以及更简单的编程实现。
  • 1
  • 2
  • 3
追问1:Spark 能完全替代 Hadoop 吗?

不能。因为 Hadoop 还包含了很多组件:

  • 数据存储层:分布式文件存储系统 HDFS,分布式数据库存储的 HBase;
  • 数据处理层:进行数据处理的 MapReduce,负责集群和资源管理的 YARN;
  • 数据访问层:Hive、Pig、Mahout……

从狭义上来看,Spark 只是 MapReduce 的替代方案,大部分应用场景中,它还要依赖于 HDFS 和 HBase 来存储数据,依赖于 YARN 来管理集群和资源。

当然,Spark 并不是一定要依附于 Hadoop 才能生存,它还可以运行在 Apache Mesos、Kubernetes、standalone 等其他云平台上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/984572
推荐阅读
相关标签
  

闽ICP备14008679号