什么是Spark?它与Hadoop相比有什么不同?

Posted 企通查

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Spark?它与Hadoop相比有什么不同?相关的知识,希望对你有一定的参考价值。




什么是Spark?


Apache Spark 是一种与 Hadoop 相似的开源集群计算环境,是一种专为大规模数据处理而设计的通用大数据快速处理引擎。


Spark作为基于内存计算的一站式框架,能为开发与管理减轻很多问题,如搭建管理维护、多技术学习成本等,主要包含了Spark Core、Spark SQL(交互式查询)、Spark Streaming(实时流计算)、MLlib(机器学习)、GraphX(图计算)等重要处理组件。各个组件的具体功能如下:


Spark Core

Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD(RDD:弹性分布式数据集Resilient Distributed Dataset的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型)之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core。


Spark SQL

Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析。


Spark Streaming

Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等。


MLlib

MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作。


GraphX

GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。


什么是Spark?它与Hadoop相比有什么不同?

图:spark的重要组件,来源于网络


Spark运行基本流程


Spark的基本运行流程如下:


  • 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源。

  • 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上。

  • SparkContext根据RDD的依赖关系构建DAG图(是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系),DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor。

  • 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。


什么是Spark?它与Hadoop相比有什么不同?

图:Spark运行基本流程图,来源于网络


Spark的特点


Spark具有如下几个主要特点:


运行速度快

Spark使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;Spark基于内存进行计算(当然也有部分计算基于磁盘)。


容易上手开发

Spark的基于RDD的计算模型,比Hadoop的基于Map-Reduce的计算模型要更加易于理解,更加易于上手开发,实现各种复杂功能,比如二次排序、topN等复杂操作时,更加便捷。


超强的通用性

Spark提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。


集成Hadoop

Spark并不是要成为一个大数据领域的“独裁者”,一个人霸占大数据领域所有的“地盘”,而是与Hadoop进行了高度的集成,两者可以完美的配合使用。Hadoop的HDFS、Hive、HBase负责存储,YARN负责资源调度;Spark复杂大数据计算。实际上,Hadoop+Spark的组合,是一种“double win”的组合。


极高的活跃度

Spark目前是Apache基金会的顶级项目,全世界有大量的优秀工程师是Spark的committer。并且世界上很多顶级的IT公司都在大规模地使用Spark。


Spark和Hadoop的区别


关于架构

Hadoop:MapRedcue由Map和Reduce两个阶段,并通过shuffle将两个阶段连接起来的。但是套用MapReduce模型解决问题,不得不将问题分解为若干个有依赖关系的子问题,每个子问题对应一个MapReduce作业,最终所有这些作业形成一个DAG。

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


关于中间计算结果处理

Hadoop:在DAG中,由于有多个MapReduce作业组成,每个作业都会从HDFS上读取一次数据和写一次数据(默认写三份),即使这些MapReduce作业产生的数据是中间数据也需要写HDFS。这种表达作业依赖关系的方式比较低效,会浪费大量不必要的磁盘和网络IO,根本原因是作业之间产生的数据不是直接流动的,而是借助HDFS作为共享数据存储系统。

Spark:在Spark中,使用内存(内存不够使用本地磁盘)替代了使用HDFS存储中间结果。对于迭代运算效率更高。


关于数据处理速度

Hadoop:Hadoop是磁盘级计算,计算时需要在磁盘中读取数据;其采用的是MapReduce的逻辑,把数据进行切片计算用这种方式来处理大量的离线数据。

Spark:Spark会在内存中以接近“实时”的时间完成所有的数据分析。Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。


关于操作模型

Hadoop:只提供了Map和Reduce两种操作所有的作业都得转换成Map和Reduce的操作。

Spark:提供很多种的数据集操作类型比如Transformations 包括map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues,sort,partionBy等多种操作类型,还提供actions操作包括Count,collect, reduce, lookup, save等多种。这些多种多样的数据集操作类型,给开发上层应用的用户提供了方便。


关于灾难恢复

Hadoop:Hadoop将每次处理后的数据写入磁盘中,对应对系统错误具有天然优势。

Spark:Spark的数据对象存储在RDD中,这些数据对象既可放在内存,也可以放在磁盘,所以RDD也提供完整的灾难恢复功能。


奥德塔动态大数据资源中心基于互联网+大数据+人工智能技术构建,通过分布式数据采集集群、数据特征提取、机器学习和深度学习算法模型、NLP文本分析等技术实现了数据的实时更新、高度关联、动态下载、主动推送,为企业采购风控、销售客户评估、Al精准获客、精准招商、投融资、高校科研机构、政府事业单位提供了全方位的数据支持和数据应用解决方案;基于数据资源中心和分析专家团队为客户提供了行业产业分析报告、发展趋势报告和相关指数报告等专业咨询服务支持。


如您感兴趣或有合作意向,欢迎进行咨询:

联系人:赵先生


参考文献:

https://blog.csdn.net/qq_17677907/article/details/88685705

https://bigdata.51cto.com/art/201907/599730.htm



粉丝福利




书籍推荐

以上是关于什么是Spark?它与Hadoop相比有什么不同?的主要内容,如果未能解决你的问题,请参考以下文章

Spark

Hadoop与Spark的关系,Spark集群必须依赖Hadoop吗?

Spark和MapReduce相比,有哪些优势?

spark和hadoop的区别

零基础学习大数据怎样入门Spark

spark和hadoop的区别