什么是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的重要组件,来源于网络
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运行基本流程图,来源于网络
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相比有什么不同?的主要内容,如果未能解决你的问题,请参考以下文章