Spark简介
Spark是基于内存的分布式计算框架。在迭代计算的场景下,数据处理过程中的数据可以存储在内存中,提供了比MapReduce高10到100倍的计算能力。Spark可以使用HDFS作为底层存储,使用户能够快速地从MapReduce切换到Spark计算平台上去。Spark提供一站式数据分析能力,包括小批量流式处理、离线批处理、SQL查询、数据挖掘等,用户可以在同一个应用中无缝结合使用这些能力。
Spark的特点如下:
- 通过分布式内存计算和DAG(无回路有向图)执行引擎提升数据处理能力,比MapReduce性能高10倍到100倍。
- 提供多种语言开发接口(Scala/Java/Python),并且提供几十种高度抽象算子,可以很方便构建分布式的数据处理应用。
- 结合SQL、Streaming等形成数据处理栈,提供一站式数据处理能力。
- 支持契合Hadoop生态环境,Spark应用可以运行在Standalone、Mesos或者YARN上,能够接入HDFS、HBase、Hive等多种数据源,支持MapReduce程序平滑转接。
Spark结构介绍
模块名称
|
描述
|
---|---|
Cluster Manager |
集群管理器,管理集群中的资源。Spark支持多种集群管理器,Spark自带的Standalone集群管理器、Mesos或YARN。Spark集群默认采用YARN模式。 |
Application |
Spark应用,由一个Driver Program和多个Executor组成。 |
Deploy Mode |
部署模式,分为cluster和client模式。cluster模式下,Driver会在集群内的节点运行;而在client模式下,Driver在客户端运行(集群外)。 |
Driver Program |
是Spark应用程序的主进程,运行Application的main()函数并创建SparkContext。负责应用程序的解析、生成Stage并调度Task到Executor上。通常SparkContext代表Driver Program。 |
Executor |
在Work Node上启动的进程,用来执行Task,管理并处理应用中使用到的数据。一个Spark应用一般包含多个Executor,每个Executor接收Driver的命令,并执行一到多个Task。 |
Worker Node |
集群中负责启动并管理Executor以及资源的节点。 |
Job |
一个Action算子(比如collect算子)对应一个Job,由并行计算的多个Task组成。 |
Stage |
每个Job由多个Stage组成,每个Stage是一个Task集合,由DAG分割而成。 |
Task |
承载业务逻辑的运算单元,是Spark平台上可执行的最小工作单元。一个应用根据执行计划以及计算量分为多个Task。 |
Spark原理及相关介绍
Spark原理
Spark的应用运行结构如下图。
运行流程如下:
1、应用程序(Application)是作为一个进程的集合运行在集群上的,由Driver进行协调。
2、在运行一个应用时,Driver会去连接集群管理器(Standalone、Mesos、YARN)申请运行Executor资源,并启动ExecutorBackend。然后由集群管理器在不同的应用之间调度资源。Driver同时会启动应用程序DAG调度、Stage划分、Task生成。
3、然后Spark会把应用的代码(传递给SparkContext的JAR或者Python定义的代码)发送到Executor上。
4、所有的Task执行完成后,用户的应用程序运行结束。
Spark Streaming
Spark Streaming是一种构建在Spark上的实时计算框架,扩展了Spark处理大规模流式数据的能力。当前Spark支持两种数据处理方式:Direct Streaming和Receiver方式。
SparkSQL和DataSet
SparkSQL是Spark中用于结构化数据处理的模块。在Spark应用中,可以无缝地使用SQL语句亦或是DataSet API对结构化数据进行查询。
SparkSQL以及DataSet还提供了一种通用的访问多数据源的方式,可访问的数据源包括Hive、CSV、Parquet、ORC、JSON和JDBC数据源,这些不同的数据源之间也可以实现互相操作。SparkSQL复用了Hive的前端处理逻辑和元数据处理模块,使用SparkSQL可以直接对已有的Hive数据进行查询。
另外,SparkSQL还提供了诸如API、CLI、JDBC等诸多接口,对客户端提供多样接入形式。
SparkSession
SparkSession是Spark编程的统一API,也可看作是读取数据的统一入口。SparkSession提供了一个统一的入口点来执行以前分散在多个类中的许多操作,并且还为那些较旧的类提供了访问器方法,以实现最大的兼容性。
Structured Streaming
Structured Streaming是构建在Spark SQL引擎上的流式数据处理引擎,用户可以使用Scala、Java、Python或R中的Dataset/DataFrame API进行流数据聚合运算、按事件时间窗口计算、流流Join等操作。当流数据连续不断的产生时,Spark SQL将会增量的、持续不断的处理这些数据并将结果更新到结果集中。同时,系统通过checkpoint和Write Ahead Logs确保端到端的完全一次性容错保证。
Structured Streaming的核心是将流式的数据看成一张不断增加的数据库表,这种流式的数据处理模型类似于数据块处理模型,可以把静态数据库表的一些查询操作应用在流式计算中,Spark执行标准的SQL查询,从不断增加的无边界表中获取数据。
Spark与其他组件的关系
-
通常,Spark中计算的数据可以来自多个数据源,如Local File、HDFS等。最常用的是HDFS,用户可以一次读取大规模的数据进行并行计算。在计算完成后,也可以将数据存储到HDFS。
分解来看,Spark分成控制端(Driver)和执行端(Executor)。控制端负责任务调度,执行端负责任务执行。
通常,Spark中计算的数据可以来自多个数据源,如Local File、HDFS等。最常用的是HDFS,用户可以一次读取大规模的数据进行并行计算。在计算完成后,也可以将数据存储到HDFS。
分解来看,Spark分成控制端(Driver)和执行端(Executor)。控制端负责任务调度,执行端负责任务执行。
-
Spark的计算调度方式,可以通过YARN的模式实现。Spark共享YARN集群提供丰富的计算资源,将任务分布式的运行起来。Spark on YARN分两种模式:YARN Cluster和YARN Client。
Spark的计算调度方式,可以通过YARN的模式实现。Spark共享YARN集群提供丰富的计算资源,将任务分布式的运行起来。Spark on YARN分两种模式:YARN Cluster和YARN Client。