Apark Spark是一个可跨不同工作负载和平台的统一的分布式计算引擎。可通过自有的各种组件(Spark Streaming、Spark ML、Spark SQL、Spark GraphX)连接到不同平台,并处理各种不同的数据工作负载。其是一个数据处理框架,可由其它技术提供分布数据存储上执行操作。
Apark Spark是一个基于内存的快速数据处理引擎,它具有优雅且极具表现力的API。它由Spark core和一组库文件组成。Spark core是一个分布执行引擎,其包含的java、Scala及Python API为分布式应用开发提供一个良好的平台。
大数据的4V:种类多样、处理速度快、体量大、数据准确性。
其具有以下特性:
- 通过简单的API可以在多个节点透明的处理数据;
- 弹性处理故障;
- 尽量使用内存进行数据处理,在数据溢出时将其存入磁盘;
- 支持Java、Scala、Python、R和SQL API;
- Spark core可以在独立服务器模式下运行,也可以在Hadpoop YARN、Mesos以及云端运行。
1 组件
1.1 Spark core
Spark core是Spark平台的基础通用执行引擎,包含了运行作业所需的基本Spark功能以及用于支持网络、安全、调度以及数据重新洗牌等功能。其最重要的概念就是弹性分布式数据集(RDD)
1.2 Spark SQL
Spark SQL是Spark core上的一个组件, 它引入了新的数据抽象(SchemaRDD),可以为结构化和半结构化数据提供支持。其使用SQL函数来处理大量分布式结构化数据,通过数据帧和数据集的方式,在更高的性能水平上简化了对结构化数据的处理。其提供了一个thrift服务器,外部系统可通过JDBC和ODBC协议查询数据。
1.3 Spark Streaming
Spark Streaming利用Spark core提供的快速调用能力,通过从各种源(HDFS、Kafka、Flume)获取实时流数据来进行流式分析。其使用微批方式处理数据块并使用一种称作DStream的概念。其操作可以自动使用各种技术从故障中恢复。
1.4 Spark GraphX
GraphX是Spark栈顶层的分布式图处理框架。提供用于创建图的功能,它将图表示为Graph RDD。提供表达图计算的API,从而可以使用Pregel抽象API对用户定义的图进行建模。其包含一些重要的图论算法的事项如PageRank、连接组件、最短路径和SVD++等。
1.5 Spark ML
MLlib位于Spark core之上,是一个分布式机器学习框架,用于处理以RDD方式转换的数据集的机器学习模型。Spark MLlib是一个机器学习的算法库,提供了各种算法,例如逻辑回归、朴素贝叶斯分类、支持向量机(SVM)、决策树、随机森林、线性回归、交替最小二乘(ALS)、K-均值聚类算法。其与Spark core、Spark Streaming、Spark SQL、Spark GraphX完美集成,从而提供了真正的集成平台,能够以实时或批量的方式处理数据。
另外现在可使用PySpark和SparkR来使用Python和R对Spark进行交互。
2.执行组件
Spark种引入作业的概念,作业通过stage和task在多个worker节点上执行。Spark包含一个driver用于在worker节点集群内协调任务执行以及跟踪所有的worker节点。其关键组件有以下:
2.1 driver
driver包含应用程序和main程序。如果你使用Spark shell,它就成为driver程序,并会在集群内调用executor,同时控制task执行。其负责管理整个执行过程的容错机制,一旦driver执行完一个作业,其输出就可以写到文件、数据库,或者干脆打印到控制台。
2.2 executor
负责任务的执行。运行在集群中的worker节点上,每个节点可以有一个或多个executor,一个executor可以运行一个或多个任务。当driver与集群管理器进行通信时,集群管理器会将资源分配给excutor。
2.3 集群管理器
负责在组成集群的计算节点之间调度和分配资源。一般来说,这由一个管理员进程来完成,用于管理集群中的资源。其可以是一个独立服务器的集群管理器,也可以是YARN或Mesos.
2.4 SparkContext
SparkContext为Spark程序的主入口,位于driver之内,表示与集群的连接,同时包含执行调度和任务分发与编排的代码。当启动driver程序时,命令会被SparkContext提交到集群,然后executor就开始执行这些指令。当任务结束后,drvier程序就会完成作业。SparkContext可以用来创建RDD、累加数据或在集群中广播变量。每个JVM进程上只能有一个SparkContext处于活动状态,在创建新的之前必须使用stop()来停止掉原有的处于运行中的SparkContext。
2.5 DAG(有向无环图)
driver会为你用分布式处理框架运行的代码创建包含任务的DAG,然后DAG会按照阶段(stage)和任务(task)的方式执行。DAG代表作业,而作业又被拆分为子集,称为阶段。每个阶段以任务方式执行,而每个任务执行时,使用一个Spark core。阶段的个数以及每个阶段包含的内容由操作类型决定。一般来说,转换操作往往在同一个阶段中,但reduce或shuffle操作往往会生成新的执行阶段。任务是阶段的一部分并通常直接使用一个Sparkcore,用来在executor上执行操作。