Spark入门简介

定义

分布式批处理系统和分析挖掘引擎。

 

特性

1、高效性。Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG(无回路有向图)执行引擎,可以通过基于内存来高效处理数据流。

2、易用性。Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。

3、通用性。Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。

4、兼容性。Spark可以非常方便地与其他的开源产品进行融合。

 

主要组件

∙  SparkCore —— 将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。

SparkSQL —— Spark Sql 是Spark来操作结构化数据的程序包,用户可以使用SQL语句的方式来查询数据,Spark支持多种数据源。

SparkStreaming —— 是Spark提供的实时数据进行流式计算的组件。

Mllib —— 提供常用机器学习算法的实现库。

GraphX —— 提供一个分布式图计算框架,能高效进行图计算。

 

组织架构

Spark入门简介

SparkContext —— 创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中由SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver。

Cluster Manager —— 集群资源管理服务,通常包含主节点和多个运行节点。

Executor —— 是Application运行在worker node上的一个进程,负责运行task。

Task —— 提供常用机器学习算法的实现库。

 

RDD

RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。

通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同节点上,从而在集群中的不同节点上进行并行计算。

Spark入门简介

RDD 具有容错机制,并且只读不能修改,可以执行确定的转换操作创建新的 RDD。 

具体来讲,RDD 具有以下几个属性:

    只读 —— 不能修改,只能通过转换操作生成新的 RDD。

    分布式 —— 可以分布在多台机器上进行并行处理。

    弹性 —— 计算过程中内存不够时它会和磁盘进行数据交换。

    基于内存 —— 可以全部或部分缓存在内存中,在多次计算间重用。

RDD 的操作分为转化(Transformation)操作和行动(Action)操作。转化操作就是从一个 RDD 产生一个新的 RDD,而行动操作就是进行实际的计算。

 

Spark on Yarn

Spark on Yarn模式根据Driver在集群中的位置分为两种模式:一种是Yarn-Client模式,另一种是Yarn-Cluster模式。

Yarn-Client模式中,Driver在客户端本地运行,这种模式使得Spark Application和客户端进行交互。因为Driver在客户端,所以可以通过Web UI访问Driver的状态。

在Yarn-Cluster模式中,用户向Yarn中提交一个Application后,Yarn将分两个阶段运行:

  (1)把Spark的Driver作为一个ApplicationMaster在Yarn集群中先启动;

  (2)由ApplicationMaster创建应用程序,然后向ResourceManager申请资源,并启动Executor来运行Task,同时监控整个运行过程,直到运行完成。