认识spark

来源:互联网 发布:大数据新闻报道 编辑:程序博客网 时间:2024/05/29 03:25

认识spark

Spark是一个用来实现快速通用的集群计算的平台。
在速度方面,Spark扩展了广泛使用的MapReduce计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。在处理大规模数据集时,速度是非常重要的。速度快就意味着我们可以进行交互式的数据操作,否则我们每次操作就需要等待数分钟甚至数小时。Spark的一个主要特点就是能够在内存中进行计算,因而更快。不过即使是必须在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。

1、Spark Core
Spark Core 实现了Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的API 定义。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是Spark 主要的编程抽象。Spark Core 提供了创建和操作这些集合的多个API。
2、Spark SQL
Spark SQL 是Spark 用来操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL或者Apache Hive 版本的SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比如Hive 表、Parquet 以及JSON 等。除了为Spark 提供了一个SQL 接口,Spark SQL 还支持开发者将SQL 和传统的RDD 编程的数据操作方式相结合,不论是使用Python、Java 还是Scala,开发者都可以在单个的应用中同时使用SQL 和复杂的数据分析。
3、Spark Streaming
Spark Streaming 是Spark 提供的对实时数据进行流式计算的组件。比如生产环境中的网页服务器日志,或是网络服务中用户提交的状态更新组成的消息队列,都是数据流。SparkStreaming 提供了用来操作数据流的API,并且与Spark Core 中的RDD API 高度对应。
4、MLlib
Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作MLlib。MLlib 提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。
5、GraphX
GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。与Spark Streaming 和Spark SQL 类似,GraphX 也扩展了Spark 的RDD API,能用来创建一个顶点和边都包含任意属性的有向图。

Spark的存储层次:
Spark 不仅可以将任何Hadoop 分布式文件系统(HDFS)上的文件读取为分布式数据集,也可以支持其他支持Hadoop 接口的系统,比如本地文件、亚马逊S3、Cassandra、Hive、HBase 等。我们需要弄清楚的是,Hadoop 并非Spark 的必要条件,Spark 支持任何实现了Hadoop 接口的存储系。

Spark核心概念简介:
从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作。驱动器程序通过一个SparkContext 对象来访问Spark。这个对象代表对计算集群的一个连接。shell 启动时已经自动创建了一个SparkContext 对象,是个叫作sc 的变量。一旦有了SparkContext,你就可以用它来创建RDD。

Spark 编程的核心概念:通过一个驱动器程序创建一个SparkContext 和一系列RDD,然后进行并行操作。

基本概念

RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系;
Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
应用:用户编写的Spark应用程序;
任务:运行在Executor上的工作单元;具体执行任务。Task 分为ShuffleMapTask 和 ResultTask两种。ShuffleMapTask和ResultTask 分别类似于Hadoop 中的Map 和Reduce。
作业:一个作业包含多个RDD及作用于相应RDD上的各种操作;用户提交的作业。一个Job可能由一到多个 Task 组成。
阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。Job分成的阶段。一个 Job可能被划分为一到多个 Stage。
Partition:数据分区。即一个 RDD的数据可以划分为多少个分区。
NarrowDependency :窄依赖,即子RDD依赖于父RDD中固定的Partition。Narrow-Dependency 分为OneToOneDependency 和RangeDependency 两种。
ShuffleDependency :shuffle 依赖,也称为宽依赖,即子 RDD对父RDD中的所有Partition 都有依赖。

架构设计



spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行过程(Executor)。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。

Spark所采用的Executor有两个优点:
一是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能。

Spark中各种概念之间的相互关系:

在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中。

Spark运行基本流程:

1)当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源;
2)资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上;
3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor;
4)任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。

Spark运行架构具有以下特点:
1)每个应用都有自己专属的Executor进程,并且该进程在应用运行期间一直驻留。Executor进程以多线程的方式运行任务,减少了多进程任务频繁的启动开销,使得任务执行变得非常高效和可靠;
2)Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可;
3)Executor上有一个BlockManager存储模块,类似于键值存储系统(把内存和磁盘共同作为存储设备),在处理迭代计算任务时,不需要把中间结果写入到HDFS等文件系统,而是直接放在这个存储系统上,后续有需要时就可以直接读取;在交互式查询场景下,也可以把表提前缓存到这个存储系统上,提高读写IO性能;
4)任务采用了数据本地性和推测执行等优化机制。数据本地性是尽量将计算移到数据所在的节点上进行,即“计算向数据靠拢”,因为移动计算比移动数据所占的网络资源要少得多。而且,Spark采用了延时调度机制,可以在更大的程度上实现执行过程优化。比如,拥有数据的节点当前正被其他的任务占用,那么,在这种情况下是否需要将数据移动到其他的空闲节点呢?答案是不一定。因为,如果经过预测发现当前节点结束当前任务的时间要比移动数据的时间还要少,那么,调度就会等待,直到当前节点可用。


参考文献:
1、Spark快速大数据分析
2、spark翻译(原始论文,CSDN翻译版本)
3、子雨大数据之Spark入门教程
4、Spark原理、机制及应用

0 0