1、Spark概述

1.1 Spark介绍

官网地址Apache Spark™ – Unified Engine for large-scale data analytics

Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写。2014年5月,Spark 1.0.0发布。2016年1月,Spark 1.6.0发布。2016年7月,Spark 2.0.0发布。2020年6月,Spark 3.0.0发布。截止2020年1月,1.x最终版本为1.6.3,2.x最后一个维护版本为2.4.8,3.x最新版本为3.2.0。​Spark 官网将Spark 定义为一个大型可扩展数据的快速和通用处理引擎。​首先,Spark 采用了先进的DAG执行引擎,支持循环数据流和内存计算,使得 Spark 速度更快,在内存中的速度是Hadoop MR的百倍,在磁盘上的速度是Hadoop MR的十倍(官网数据) 。其次,Spark 是一个通用的处理引擎, 被设计用来做批处理、迭代运算、交互式查询、流处理、机器学习等。另外,Spark 易用,可以用Scala、Java、Python、R等开发分布式应用,Spark 提供了大量高级API,方便开发。最后,Spark 集成了多种数据源,并且可以通过local、Yarn、Mesos、Standalone(Spark 提供的部署方式)等各种模式运行。
1.2 Hadoop与Spark的关系及区别
hadoopspark
起源20052009
起源地MapReduce (Google) Hadoop (Yahoo)University of California, Berkeley
数据处理引擎BatchBatch
处理Slower than Spark and Flink100x Faster than Hadoop
编程语言Java, C, C++, Ruby, Groovy, Perl, PythonJava, Scala, python and R
编程模型MapReduceResilient distributed Datasets (RDD)
Data TransferBatchBatch
内存管理Disk BasedJVM Managed
延迟HIghMedium
吞吐量MediumHigh
优化机制ManualManual
APILow-levelHigh-level
流处理支持NASpark Streaming、StructuredStreaming
SQL支持Hive, ImpalaSparkSQL
Graph 支持NAGraphX
机器学习支持NASparkML

处理流程比较

MR中的迭代:

Spark中的迭代:

1.3 Spark 组件

Spark Core

实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统 交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。

Spark SQL

是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。

Spark Streaming

是 Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。

Spark MLlib

提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。

Spark GraphX

GraphX在Spark基础上提供了一站式的数据解决方案,可以高效地完成图计算的完整流水作业。GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。

Structured Streaming(2.X版本)

结构化流是构建在sparksql引擎上的可伸缩且容错的流处理引擎。在内部,默认情况下,结构化流式处理查询使用微批处理引擎进行处理,该引擎将数据流作为一系列小批处理作业进行处理,从而实现低至100毫秒的端到端延迟,并且只保证一次容错。

1.4 Spark特点

与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客